grub2如何在EFI启动中找到它的配置文件?

grub2如何在EFI启动中找到它的配置文件?

网上有无数的 grub2/EFI 线程,但我发现很难找出 grub2 如何在 EFI 启动中找到其配置文件。我们被告知在 grub2 中配置文件是/boot/grub/grub.cfg.但是,当出现启动问题时,grub2 可能会出现在命令提示符(又名紧急 shell)中,而不会出现任何错误消息。因此,在能够解决任何问题之前,最好先了解 grub2 到底如何尝试找到其配置文件。

答案1

首先要明白,没有固定的方法。 grub2 在安装过程中可以进行不同的配置,并且名称grub.cfg不是硬编码的。第二个学习是没有单一的配置文件,例如,我的 Ubuntu 系统在撰写本文时依次使用两个不同的文件,实际上都命名为grub.cfg.

默认情况下,grub2 在启动时会执行两件重要的事情:

  1. 将前缀变量设置为 grub2 安装期间内置的值
  2. $prefix/grub.cfg如果配置文件存在则继续

(更多详细信息,请参阅GNU GRUB 手册.)

“如果它存在”条件是最糟糕的:如果文件不存在(例如,因为$prefix没有指向正确的位置),则不会出现它试图执行的操作的错误消息,并且您只会进入命令迅速的。

如果您最终进入紧急 shell,首先要检查的是前缀变量的值(使用 set 命令)和该目录的内容(使用 ls 和 cat 命令)。

(默认行为可以被内置配置文件覆盖,但我认为我在实践中没有看到这种情况。)

Ubuntu 将前缀设置为用于安全启动的grubx64.efi和所在的位置。shimx64.efi因此,第一个配置文件 grub.cfg 是从这些 EFI 二进制文件所在的同一目录加载的。从Linux的角度来看,路径是 /boot/efi/EFI/ubuntu和 从grub2的角度来看(hd0,gpt1)/efi/ubuntu (驱动器和分区号可能会根据您的ESP(即EFI系统分区)所在的位置而有所不同。grub2中的文件名似乎不区分大小写,因此Linux显示的EFI如 grub2 所示efi)。

第一个grub.cfg文件仅包含 3 条语句:

  1. 通过 UUID 查找包含根文件系统的分区(在使用单独引导文件系统的系统中,改为查找引导文件系统)
  2. 将前缀设置为新值$root/boot/grub(使用 $root上一步中确定的值,对于具有单独引导分区的系统,这应该是$root/grub
  3. 执行configfile起始位置$prefix/grub.cfg

后者是/boot/grub/grub.cfg我们通常所说的 Linux 位置。

相关内容