如何安全地设置、更改、删​​除 EFI 变量的值

如何安全地设置、更改、删​​除 EFI 变量的值

在花了几个小时调试一个问题之后,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 中,按ShiftTNum -足够多次以使设置达到零,再按一次以取消设置并完全删除变量。

在 Linux 上,首先使用chattr -i/sys/… 文件来删除内核应用的保护,然后使用rm完全删除变量。

在 UEFI Shell 中,使用dmpstore -d <name>(可选-guid <guid>)删除变量(请参阅UEFI Shell 规范 2.0,第 113 页)。

相关内容