EFI启动条目能否覆盖GRUB超时时间及传递参数的技术问询
好的,咱们来拆解这个问题——EFI启动条目能不能给GRUB传递参数,甚至覆盖它的默认超时时间? 先从EFI启动条目的基础逻辑说起,再聚焦到GRUB的特殊情况:
一、EFI启动条目传参的常规场景
EFI启动表中的条目本身是支持给它加载的程序(比如Linux内核的EFI stub)传递参数的,这在Linux内核的EFI stub场景里很常见——比如用来指定系统根分区的位置。
举个实际的例子,用efibootmgr创建一个直接加载Linux内核EFI stub的条目,就会带上根分区参数:
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的EFI启动条目不会传递任何额外参数,GRUB的菜单超时时间是直接在/boot/grub/grub.cfg里配置的。用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)
你看,这个条目里GRUB的启动路径后面没有任何附加参数,超时完全由grub.cfg控制。
三、核心问题解答:给GRUB传参&覆盖超时是可行的!
答案是肯定的——GRUB作为标准的EFI应用,支持接收EFI启动条目传递的参数,包括用来覆盖grub.cfg里配置的超时时间!
具体实现方式
你只需要在创建GRUB的EFI启动条目时,用efibootmgr的--unicode参数附加想要传递的配置项即可。比如要把GRUB的超时时间改成10秒,对应的创建命令是:
efibootmgr --create --disk /dev/nvme2n1 --part 1 --label "gentoo (grub custom timeout)" --loader "\EFI\gentoo\grubx64.efi" --unicode "timeout=10"
原理说明
GRUB启动时会优先读取EFI启动条目传递的参数,这些参数会直接覆盖/boot/grub/grub.cfg里的对应配置。除了timeout,你还可以传递其他GRUB支持的核心参数(比如指定自定义的配置文件路径configfile=/path/to/custom.cfg)。
验证方式
创建完成后,用efibootmgr --unicode查看条目,会看到参数已经附加在GRUB的启动路径后:
Boot0004* gentoo (grub custom timeout) HD(1,GPT,c12a7328-f81f-11d2-ba4b-00a0c93ec93b,0x800,0x100000)/File(\EFI\gentoo\grubx64.efi) "timeout=10"
下次从这个条目启动时,GRUB的菜单超时就会变成你设置的10秒,而不是grub.cfg里的默认值。
备注:内容来源于stack exchange,提问作者Xharlie

