GRUB 2 如何在 UEFI 的多个 Linux 分区下工作

GRUB 2 如何在 UEFI 的多个 Linux 分区下工作

当我们安装新的Linux时,安装程​​序会在EFI分区安装引导加载程序(efi文件)并更新NVRAM的菜单项,并且很可能将新添加的引导加载程序设置为默认值。引导加载程序将读取 来/boot/grub/grub.cfg加载内核和 initrd。

我的问题是,当 ESP 中有多个引导加载程序(.efi)时,它们是否相同?因为它们都是GRUB2。他们每个人都能发现系统中的所有内核吗?

由于每个操作系统的分区都有/boot/grub/grub.cfg文件,那么默认引导加载程序正在读取哪一个分区?

答案1

我的问题是,当 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-idwith的值--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 页面

相关内容