使用 efibootmgr 使驱动器成为永久启动优先级,而无需重新排序整个启动顺序

使用 efibootmgr 使驱动器成为永久启动优先级,而无需重新排序整个启动顺序

我正在尝试编写一个在 initramfs 上运行的脚本,该脚本使用 efibootmgr 永久设置最高启动优先级,而无需重新分配启动顺序。

efibootmgr -n 000A例如,非常适合这种情况,因为它将驱动器设置000A为启动优先级,但仅限于下次启动。 efibootmgr -o要求我们列出所有驱动器并重新分配它们的顺序,这使脚本变得复杂,因为我必须获取这些值并将它们解析回命令efibootmgr以重新排序。

有没有办法改变启动优先级,我只需要引用我想优先考虑的驱动器,而不是重写层次结构?

答案1

简短回答:不。

长答案:首先,要明白 EFI 不会启动“驱动器”,除非在某些有限的意义上或在有限的情况下。显示的最常用的启动条目efibootmgr是 EFI 引导加载程序,它们作为普通文件存储在 ESP 上。这似乎是一个微妙的区别,但如果不理解它就试图解决问题,很可能会导致解决方案有缺陷和/或有限。

efibootmgr您可能需要解析输出才能执行您想要的操作。这实际上应该不是很困难;了解 Bash 脚本中使用的几个常用命令(如grepcut)将对您大有裨益。

或者,如果您的目标是恢复由于 EFI 错误而丢失的启动顺序,您可以研究一下该fallback.efi程序。据我所知,它在 Ubuntu 中不可用,但它随 Fedora 一起提供。如果一组 NVRAM 启动变量丢失,此程序将从文件中恢复它们。它旨在放置在目录中EFI/BOOT并从 Shim(它会自动启动)启动,以便在固件的启动条目丢失时恢复它们。这种方法有一些问题,例如用更多文件使 ESP 变得混乱,并且如果您想更改启动条目,您必须跳过新的环节,但这可能是您所需要的。

相关内容