最近,在我对多重引导系统进行了一些操作后,当我使用 引导 NixOS 时systemd-boot
,即使超时仍设置为 2 秒/loader/loader.conf
(在 ESP 上),引导菜单也不再显示:
# /loader/loader.conf on the ESP
timeout 2
default nixos-generation-380
这是我的/etc/nixos/configuration.nix
:
{ # ...
boot.loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
timeout = 2;
};
}
原来,要查看启动菜单,我必须在启动过程中按下某个键,好像超时已设置为 0(而不是 2)秒。
我尝试从 ESP 中删除并使用 USB 闪存驱动器systemd-bootx64.efi
重新安装 NixOS 。nixos-install
这恢复systemd-bootx64.efi
但没有带回引导菜单。
看来这个问题并不少见:
Reddit:systemd-boot 菜单突然消失了?
Arch Linux 论坛:systemd-boot,无超时,无选择菜单 - LoaderEntryDefault
据报道,这两个问题都已得到解决。但是,我不明白第一个解决方案:
编辑 3:已解决!重新安装 UEFI 就可以了。
“重新安装 UEFI”是什么意思?
至于第二个,它建议在启动菜单中使用t和Shift+t键(如果在启动过程中按下某个键会显示)设置不同的超时,但我不想要不同的超时,我想要systemd-boot
尊重中的设置/loader/loader.conf
。
所以,我的问题是:如何systemd-boot
再次使用设置/loader/loader.conf
?
找到解决方案后,我正在编辑这个问题,现在我将发布我的答案。
在阅读关于“systemd-boot,没有超时,没有选择菜单 - LoaderEntryDefault”的评论 #6并查看 GitHub 上的“systemd-boot 设置 efivar LoaderEntryDefault,它覆盖 /boot/loader/loader.conf 中的默认值”问题后,我我发现问题可能是由 EFI 变量引起的,这些变量以某种方式被设置并覆盖了.
nixpkgs
/loader/loader.conf
确实,有这两个变量集引起了麻烦:
和
(我在
374
这里编造了值 ' ':重要的是它与/loader/loader.conf
我检查它时的值不同。)可以在Freedesktop Wiki上的“systemd-boot UEFI Boot Manager”页面
systemd-boot
末尾找到EFI 变量列表:要删除
LoaderEntryDefault-[...]
变量,只需在启动菜单中按d两次键即可:设置和取消设置新值。要删除
LoaderConfigTimeout-[...]
变量,结果足以按下Shift+t足够的时间将超时设置为0
,再加上一次。这解决了我的问题。这是我在 Superuser.SE 上提出的一个有关安全修改 EFI 变量的相关问题。