Sap*_*Sap 3 boot grub uefi guid-partition-table grub2
如果在启用GPT的分区上使用GRUB2,加载程序如何“知道”在哪里找到其配置文件和其他第二阶段的文件?
注意:我发现一些有关配置文件的提及,该配置文件与GRUB的EFI加载器位于同一文件夹中,并且包含来自指定分区的“主要”配置文件的链式加载,但这绝对不正确-只有一个“东西”。 efi”文件。
实际发生这种情况的方式有几种:
grub-mkimage(通过所谓的grub-install执行时间)。后者可能是您真正要求的功能-它是默认配置文件名(grub.cfg),前缀(默认/boot/grub,但可以显式指定为grub-mkimage)和前缀所在分区的grub分区名的组合。
如果我strings /boot/efi/EFI/debian/grubx64.efi | tail -1在当前工作站上运行,它将打印出存储的值:(,gpt2)/boot/grub,告诉grubx64.efi您在GPT分区2的/ boot / grub中查找其配置文件。逗号(GRUB磁盘设备名称)前的位在运行时被填充基于grubx64.efi映像本身从哪个磁盘加载。
动态加载的模块也将在此位置下搜索,但是在特定于体系结构/平台的目录中(在这种情况下)/boot/grub/x86_64-efi。
对于 EFI 映像,我发现grub-install或总是grub-mkimage将早期配置嵌入到生成的 EFI 二进制文件中,无论您是否已指定--config FILE选项。
如果您不指定该--config FILE选项,它将尝试嵌入/boot/grub/x86-64_efi/load.cfg.
这个早期的配置文件如下所示:
search.fs_uuid 8ef704aa-041d-443c-8ce6-71ac7e7f30da root hd0,gpt1
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg # This line seems can be omitted, because
# it seems to be the default next action
Run Code Online (Sandbox Code Playgroud)
uuid意味着文件系统的 UUID,而不是分区的 UUID。您可以使用 blkid 来列出它。hd0,gpt1只是一个提示。set root=hd0,gpt1这种自动嵌入的默认行为与 BIOS 模式不同。后者默认情况下仅嵌入前缀字符串,(,gpt3)/boot而不用担心search.uuid。
我还发现Ubuntu 18.04 (Bionic Beaver) EFI 映像嵌入了早期配置,例如build-efi-images
if [ -z "\$prefix" -o ! -e "\$prefix" ]; then
if ! search --file --set=root /.disk/info; then
search --file --set=root /.disk/mini-info
fi
set prefix=(\$root)/boot/grub
fi
if [ -e \$prefix/$platform/grub.cfg ]; then
source \$prefix/$platform/grub.cfg
elif [ -e \$prefix/grub.cfg ]; then
source \$prefix/grub.cfg
else
source \$cmdpath/grub.cfg
fi
Run Code Online (Sandbox Code Playgroud)
这cmdpath是 EFI 二进制文件的目录,因此它将回退到EFI 二进制文件同一目录中的grub.cfg文件,如您所见。
| 归档时间: |
|
| 查看次数: |
1403 次 |
| 最近记录: |