grub efi加载程序如何找到正确的grub.cfg和引导目录?


9

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

但是grub如何找到引导分区所在的正确设备?在grub的旧版中,通常会使用以下命令将grub安装到特定分区:

# grub-install --root-directory=/dev/sda

因此,很清楚它将在哪里寻找引导目录。grub-efi如何找出正确的设备?


据我了解,内核位置的配置位于efi分区中。

显然,信息必须位于efi分区中,但是在安装grub时,您从未真正在任何时候指定它(就像以前一样)。
user128063

在运行grub-efi时生成的.efi文件中
Joe

Answers:


9

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

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

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

然后,由EFI加载程序执行Grub2,您将获得grub接口来选择要引导到的操作系统(内核)或加载默认内核。

只是扩展一下:“ .EFI”文件类似于UEFI子系统可以执行的应用程序。旨在用于引导系统并提供运行执行保护和防病毒类型程序的便利位置。

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


看看是否可以修补此文件并更改配置和uuid的状态,并在不重新安装Grub的情况下引导仍然很有趣
Joe

很奇怪,我找不到它。我的ubuntu efi目录中有一个grub.cfg(以ascii格式),其前缀和根信息位于id内。但是我的archlinux efi目录仅包含一个grubx64.efi,即使在ghex中读取它们时,该文件也没有您提到的root和prefix命令的迹象。
user128063

不在ubuntu.efi中寻找boot.efi。efi分区具有一个文件夹。称为efi,其中有一个名为boot的文件夹。

efi文件夹有几个efi二进制文件,一个用于Windows,一个用于ubuntu,依此类推。efi文件的名称无关。我找不到uuid行的原因是因为我的根分区是lvm分区。它存储一个lvmid代替!
user128063

1
哦,对不起,我看错了您以前的帖子。Stackexchange在您描述系统的部分截断了您以前的文章。您的描述是关于一个引导程序(grub)映像(BOOTX64.EFI),据我所知,该映像引导两个操作系统。这里还有更多可能性:1)steamos也可以拥有自己的单独的bootloader,为此,它在efi分区中将拥有自己的EFI文件。2)您有一个混合EFI旧式引导系统,其中,steamos引导加载程序存储在MBR中。您可以看到efi引导程序要sudo efibootmgr -v在gentoo 上使用,但我确定您知道这一点
user128063
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.