![使用 efibootmgr 使驱动器成为永久启动优先级,而无需重新排序整个启动顺序](https://linux22.com/image/1131724/%E4%BD%BF%E7%94%A8%20efibootmgr%20%E4%BD%BF%E9%A9%B1%E5%8A%A8%E5%99%A8%E6%88%90%E4%B8%BA%E6%B0%B8%E4%B9%85%E5%90%AF%E5%8A%A8%E4%BC%98%E5%85%88%E7%BA%A7%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E9%87%8D%E6%96%B0%E6%8E%92%E5%BA%8F%E6%95%B4%E4%B8%AA%E5%90%AF%E5%8A%A8%E9%A1%BA%E5%BA%8F.png)
我正在尝试编写一个在 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 变得混乱,并且如果您想更改启动条目,您必须跳过新的环节,但这可能是您所需要的。