GRUB 2 如何使用 UEFI 在多個 Linux 分區下工作
當我們安裝新的 Linux 時,安裝程序會在 EFI 分區安裝引導載入程序(efi 文件)並更新 NVRAM 中的菜單項,並且很可能將新添加的引導載入程序設置為預設值。引導載入程序將讀取
/boot/grub/grub.cfg
以載入核心和 initrd。我的問題是,當 ESP 中有多個引導載入程序 (.efi) 時,它們是否相同?因為它們都是 GRUB2。他們每個人都能發現系統中的所有核心嗎?
由於每個作業系統的分區都有
/boot/grub/grub.cfg
文件,預設引導載入程序正在讀取哪個文件?
我的問題是,當 ESP 中有多個引導載入程序 (.efi) 時,它們是否相同?因為它們都是grub2。他們都能發現系統中的所有核心嗎?
如果磁碟上有多個 UEFI Linux 安裝,它們通常使用相同的 EFI 系統分區 (ESP),但它們各自的 EFI 執行檔位於 ESP 的不同子目錄中,格式為
EFI/bootloader-id
. EFI 執行檔具有相同的名稱;對於 64 位安裝,它是grubx64.efi
. 所以 EFI 變數將位於EFI/bootloader-id/grubx64.efi
這些執行檔是通過
grub-install
在各自的系統上執行來安裝的,儘管您可能必須grub-install
使用--efi-directory
. 而且您可能還必須選擇bootloader-id
with的值--bootloader-id
。不同的 Linux 發行版對bootloader-id
. 例如,Debian 預設為debian
. 有關grub-install
選項的更多資訊,請參閱man grub-install
。
grub-install
使用 UUID 將引導/根設備的名稱硬連接到這些執行檔中。這些 EFI 執行檔由主機板上的 EFI 韌體執行。由於 EFI 執行檔知道其 Linux 安裝的引導/根設備,並且根據定義,
grub.cfg
相對於引導/根設備具有固定位置,因此 EFI 執行檔可以執行/boot/grub/grub.cfg
與該安裝相對應的位置。當然grub.cfg
還有進行引導所需的所有資訊,包括系統上安裝的核心的名稱。Arch Wiki GRUB 頁面很好地涵蓋了這些問題。另請參閱Debian Wiki UEFI 頁面。