自從我讀到 UEFI 以來已經有一段時間了,並且忘記了某些部分是如何連接的。我忘記了 UEFI 和 Grub 引導程式如何協同工作。我就說一下我記得的,如有錯誤請指正:
- UEFI 獨立於作業系統,無論磁碟數量有多少,都可以透過單一 ESP 分割區來運作。
- ESP 分割區是新作業系統透過在自己的資料夾中新增開機載入程式和分割區引用來「訂閱」UEFI 進程的地方。基本上,每個安裝的作業系統在 /boot/efi 中都有一個資料夾。
- 引導程式作為序列儲存在 NVRAM 中。
現在我使用的機器有 Ubuntu、Windows 和 Arch。每個作業系統都有其引導程序,但每當我的機器向我顯示“引導條目”時,我實際上是在查看 Ubuntu 的 Grub 配置。這就像我使用 Ubuntu 的 grub 來載入我的機器中的任何作業系統。
所以問題是:UEFI 如何知道 Ubuntu 是我的「主」開機載入程式。為什麼每當我啟動電腦時都沒有看到 Windows 或 Arch 引導程式?
答案1
UEFI 是系統韌體,GRUB 是為符合韌體而建置的開機載入程式。
帶有 BIOS 的 GRUB 採用 MBR 內且第一個分割之前的開機程式碼的形式。透過 UEFI,GRUB 可以採用grubx64.efi
ESP 分割區內的單一檔案的形式。 GRUB 架構識別碼適用i386-pc
於 64 位元 x86 硬體上的 BIOS 和 UEFI x86_64-efi
。
UEFI 什麼都不知道——它通常只會為它找到的開機載入程式提供一個選單。如果它只找到一個引導程序,它不會顯示選單,然後在不詢問任何問題的情況下啟動該引導程序。
就您而言,Grub 顯然是唯一存在的引導程序,因此它會在引導時立即執行。
EFI 韌體選擇 Grub 引導有兩種方法:
UEFI 啟動變數儲存在系統 NVRAM 中。在 Linux 中,您可以使用
efibootmgr
;編輯它們在 Windows 中bcdedit /enum FIRMWARE
可以列出它們,然後對其進行編輯。當未定義 UEFI 開機變數時,UEFI 韌體會在 ESP 分割區內尋找開機載入程式。在您的情況下,它可能會找到
\EFI\boot\bootx64.efi
64 位元硬體。