Boot
Linux 如何處理單獨的 /boot 分區?
我有興趣了解 Linux 如何處理單獨的引導分區。我對實際執行此操作不感興趣,但我想知道它是如何在幕後工作的。
考慮一個硬碟驅動器
sda
,它有兩個分區sda1
和sda2
. 假設這sda2
是包含 Linux 作業系統的root
分區。/
我的理解是引導載入程序
GRUB2
安裝到/boot
. 但是,當目錄/boot
位於單獨的分區上時,在實際掛載sda2
之前怎麼會發生這種情況?/
在這種情況下,BIOS、主引導記錄和 GRUB(或文件)之間的互動如何
/boot
成功發生?是不是這個早期的數據/boot
實際上並沒有掛載到文件系統?/
注意:這個問題涉及掛載根分區,但不討論單獨的引導分區。
這是您理解的問題:
我的理解是引導載入程序 GRUB2 安裝到 /boot。
GRUB 未在引導時“掛載”。GRUB安裝到
/boot
,並從主引導記錄中的程式碼載入。以下是現代引導過程的簡化概述,假設具有 MBR/BIOS(不是 GPT/UEFI)的 GNU/Linux 發行版:
- BIOS 載入。
- BIOS 載入主引導記錄中的一小段程式碼。
- GRUB 不適合 440 字節,即主引導記錄的大小。因此,實際上傳入的程式碼只是解析分區表,找到
/boot
分區(我相信這是在將 GRUB 安裝到主引導記錄時確定的),並解析文件系統資訊。然後它載入第 2 階段的 GRUB。(這就是簡化的地方。)- 第 2 階段 GRUB 載入它需要的所有內容,包括 GRUB 配置,然後顯示一個菜單(或不顯示,取決於使用者配置)。
- 選擇引導順序。這可能是由於超時、使用者選擇菜單項或啟動命令列表。
- 引導序列開始執行。這可以做很多事情——例如,載入核心、鍊式載入到另一個引導載入程序——但讓我們假設引導順序是標準的 GNU/Linux。
- GRUB 載入 Linux 核心。
- GRUB 載入初始 ramdisk。
- 初始 ramdisk 掛載(可能
/
以/new_root
加密方式解鎖),啟動 udev,啟動 resume-from-swap 等。- 初始 ramdisk 使用
pivot_root
實用程序設置/new_root
為 real/
。init
開始。分區被掛載,守護程序啟動,系統啟動。注意核心是如何僅在第 7 步載入的。因此,在第 7步之前沒有掛載的概念。這就是為什麼
/boot
必須在第 9 步中再次掛載的原因,即使 GRUB 已經使用了它。查看 GRUB上的 Wikipedia 頁面的GRUB 2 部分也可能有用。