EFI 启动表条目可以覆盖 GRUB 的超时吗?

EFI 启动表条目可以覆盖 GRUB 的超时吗?

EFI 启动表中的条目可能会将参数传递给它加载的存根。例如,这通常用于在使用 Linux 内核的 EFI 存根时识别系统根。

可以使用以下命令创建这样的启动项efibootmgr

efibootmgr --create --disk /dev/nvme2n1 --part 1 --label "gentoo (test)" --loader "\EFI\Gentoo\bzImage-test.efi" --unicode "root=PARTUUID=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"

通常情况下,加载 GRUB 的条目会不是提供任何参数,并在 中配置 GRUB 的菜单超时/boot/grub/grub.cfg。 GRUB 的典型条目可以在以下输出中看到,由 生成efibootmgr --unicode

BootCurrent: 0001
Timeout: 0 seconds
BootOrder: 0001,0002,0000,0003
...
Boot0001* gentoo    HD(1,GPT,c12a7328-f81f-11d2-ba4b-00a0c93ec93b,0x800,0x100000)/File(\EFI\gentoo\grubx64.efi)

EFI 启动项是否可以向 GRUB 提供参数,并且可以使用这样的参数来覆盖超时吗?

我这样做的原因是为了方便:如果可能的话,可以在 GRUB 中配置无限超时/boot/grub/grub.cfg并将两个条目写入 EFI 表:

  1. 一个没有参数的应用无限超时(或设置的任何内容/boot/grub/grub.cfg
  2. 它用非常短的超时时间覆盖它,从而实现更快的启动时间。

后者可以设置为默认启动选项,但是,如果出现问题,可以使用主板的固件从前者启动。

答案1

EFI 启动项是否可以向 GRUB 提供参数,并且可以使用这样的参数来覆盖超时吗?

不;GRUB 不会查看它们。(至少我在 grub-core/kern/efi/ 中找不到它们。)

它只关注小路它已被调用,因此理论上你可以grubx64.efi在不同的文件夹中拥有两个副本,每个副本将使用不同的 grub.cfg(它可能设置不同的参数并提供“共享” grub.cfg),但不能直接通过加载选项字段。

后者可以设置为默认启动选项,但是,如果出现问题,可以使用主板的固件从前者启动。

您已经可以通过其他方式实现这一点;例如,GRUB 能够解析 systemd-boot 配置格式,因此您可以使用 systemd-boot 作为主加载器(超时为零)并回退到 GRUB,然后使用命令bls导入 systemd-boot 菜单条目。

(您可以在没有 systemd-init 的情况下使用 systemd-boot,它是一个相当通用的 EFI 启动管理器。)

就此而言,您可以使用 systemd-boot 作为仅有的启动管理器,具有零超时,只要您需要在菜单中停止,只需按住空格键即可中断该过程。

(GRUB 也有类似的机制,可以通过 /etc/default/grub 激活;上次尝试时没有成功,但那是 10 多年前的事了,所以也许它在较新的固件上运行得更好。)

相关内容