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

use*_*398 4 linux boot-loader grub2 uefi

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

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

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

Fah*_*tha 5

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