Ale*_*xey 7 boot uefi nixos systemd-boot
最近,在我对我的多重引导系统做了一些事情之后,当我用 引导 NixOS 时systemd-boot
,引导菜单不再显示,即使超时仍然设置为 2 秒/loader/loader.conf
(在 ESP 上):
# /loader/loader.conf on the ESP
timeout 2
default nixos-generation-380
Run Code Online (Sandbox Code Playgroud)
这是我的/etc/nixos/configuration.nix
:
{ # ...
boot.loader = {
efi.canTouchEfiVariables = true;
systemd-boot.enable = true;
timeout = 2;
};
}
Run Code Online (Sandbox Code Playgroud)
事实证明,要查看启动菜单,我必须在启动过程中按下某个键,就好像超时已设置为 0(而不是 2)秒。
我尝试systemd-bootx64.efi
从 ESP 中删除并nixos-install
从 USB 闪存驱动器重新安装 NixOS 。这恢复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
事实上,这两个变量设置造成了麻烦:
\n\n\xc2\xa7 cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f\n0\n
Run Code Online (Sandbox Code Playgroud)\n\n和
\n\n\xc2\xa7 cat /sys/firmware/efi/efivars/LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f\nnixos-generation-374\n
Run Code Online (Sandbox Code Playgroud)\n\n(我在这里编造了这个值374
:重要的是它与/loader/loader.conf
我检查时的值不同。)
使用的 EFI 变量列表可以在Freedesktop Wiki上的“systemd-boot UEFI Boot Manager”页面systemd-boot
的末尾找到:
LoaderEntryDefault entry identifier to select as default at bootup non-volatile\nLoaderConfigTimeout timeout in seconds to show the menu non-volatile\nLoaderEntryOneShot entry identifier to select at the next and only the next bootup non-volatile\nLoaderDeviceIdentifier list of identifiers of the volume the loader was started from volatile\nLoaderDevicePartUUID partition GPT UUID of the ESP systemd-boot was executed from volatile\n
Run Code Online (Sandbox Code Playgroud)\n\n要删除LoaderEntryDefault-[...]
变量,只需按d在启动菜单中按两次键即可:设置和取消设置新值。
要删除LoaderConfigTimeout-[...]
变量,结果足以按Shift+t足够多次将超时设置为0
,再加上一次。
这解决了我的问题。这是我在 Superuser.SE 上提出的一个有关安全修改 EFI 变量的相关问题。
\n