我正在尝试编写一个在 initramfs 上运行的脚本,该脚本使用 efibootmgr 永久设置最高启动优先级,而无需重新分配启动顺序。
efibootmgr -n 000A
例如,非常适合这种情况,因为它将驱动器设置000A
为启动优先级,但仅限于下次启动。
efibootmgr -o
要求我们列出所有驱动器并重新分配它们的顺序,这使脚本变得复杂,因为我必须获取这些值并将它们解析回命令efibootmgr
以重新排序。
有没有办法改变启动优先级,我只需要引用我想优先考虑的驱动器,而不是重写层次结构?
答案1
简短回答:不。
长答案:首先,要明白 EFI 不会启动“驱动器”,除非在某些有限的意义上或在有限的情况下。显示的最常用的启动条目efibootmgr
是 EFI 引导加载程序,它们作为普通文件存储在 ESP 上。这似乎是一个微妙的区别,但如果不理解它就试图解决问题,很可能会导致解决方案有缺陷和/或有限。
efibootmgr
您可能需要解析输出才能执行您想要的操作。这实际上应该不是很困难;了解 Bash 脚本中使用的几个常用命令(如grep
和cut
)将对您大有裨益。
或者,如果您的目标是恢复由于 EFI 错误而丢失的启动顺序,您可以研究一下该fallback.efi
程序。据我所知,它在 Ubuntu 中不可用,但它随 Fedora 一起提供。如果一组 NVRAM 启动变量丢失,此程序将从文件中恢复它们。它旨在放置在目录中EFI/BOOT
并从 Shim(它会自动启动)启动,以便在固件的启动条目丢失时恢复它们。这种方法有一些问题,例如用更多文件使 ESP 变得混乱,并且如果您想更改启动条目,您必须跳过新的环节,但这可能是您所需要的。