grub efi loader 如何找到正确的 grub.cfg 和引导目录?

use*_*063 14 grub boot bios

据我了解,uefi bios 从 efi 分区加载 grub.efi。现在从 /boot 目录加载一堆 grub 模块和配置文件。

但是 grub 如何找到引导分区所在的正确设备呢?在 grub legacy 中,您通常将 grub 安装到特定分区,使用

# grub-install --root-directory=/dev/sda
Run Code Online (Sandbox Code Playgroud)

所以很清楚它会在哪里寻找引导目录。grub-efi 如何找出正确的设备?

Joe*_*Joe 13

在使用 ghex 检查 efi 分区中的“BOOTX64.EFI”文件后,我发现了这一行。

search.fs_uuid a43d1f11-6ebe-477d-8be3-321a33bc37f9 root hd2,gpt4 
set prefix=($root)'/boot/grub'
Run Code Online (Sandbox Code Playgroud)

这表明 grub(引导分区)的位置信息已被 grub2-install 嵌入到为系统生成的 BOOTX64.EFI 文件中。

然后 Grub2 由 EFI 加载程序执行,您将获得 grub 界面以选择要启动的操作系统(内核)或加载默认内核。

稍微扩展一下:“.EFI”文件有点像 UEFI 子系统可以执行的应用程序。旨在用于引导系统并提供一个方便的地方来运行执行保护和防病毒类型的程序。

他们将可扩展性放在“统一可扩展固件接口”中