在花了几个小时调试一个问题之后,systemd-boot
我开始跳过它的启动菜单,并且通常忽略它的配置文件/loader/loader.conf
(在 EFI 分区上),我发现我可以在启动时按下某些键来调用启动菜单,而这个问题是由我无意中创建的某些 EFI 变量引起的。(我不知道这是怎么发生的,但在我在一个分区上重新安装 Ubuntu 18.04.1 后不久就出现了这个问题。)
具体来说,我发现以某种方式将变量LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
设置为0
,它会覆盖中定义的超时/loader/loader.conf
,并且我还定义了变量LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
,它会覆盖中设置的默认菜单项/loader/loader.conf
。
参见底部“systemd-boot UEFI 启动管理器”请参阅 freedesktop.org 页面上的 EFI 变量列表systemd-boot
。例如,可以使用以下方法检查它们的值
cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f
在我按下某个键显示启动菜单,然后按下d两次以设置和取消设置新的默认条目后,这删除了我的LoaderEntryDefault-...
变量。但是,我仍然被困在 中。我知道我可以通过菜单中使用( ) 键LoaderConfigTimeout-...
来更改超时,这会修改,但我想将其完全删除,以便再次使用 中的配置。t TShift-tLoaderConfigTimeout-...
/loader/loader.conf
修改和取消设置 EFI 变量的正确且安全的方法是什么,例如LoaderConfigTimeout-...
?
答案1
在 systemd-boot 中,按ShiftT或Num -足够多次以使设置达到零,再按一次以取消设置并完全删除变量。
在 Linux 上,首先使用chattr -i
/sys/… 文件来删除内核应用的保护,然后使用rm
完全删除变量。
在 UEFI Shell 中,使用dmpstore -d <name>
(可选-guid <guid>
)删除变量(请参阅UEFI Shell 规范 2.0,第 113 页)。