use*_*398 4 linux boot-loader grub2 uefi
当我们安装新的 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 页面。