systemd-boot 跳過啟動菜單並忽略 /loader/loader.conf 中的設置
最近,在我對多重引導系統進行了一些操作後,當我使用 引導 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
確實,有這兩個變數集引起了麻煩:
§ cat /sys/firmware/efi/efivars/LoaderConfigTimeout-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f 0
和
§ cat /sys/firmware/efi/efivars/LoaderEntryDefault-4a67b082-0a4c-41cf-b6c7-440b29bb8c4f nixos-generation-374
(我在
374
這裡編造了值 ’ ‘:重要的是它與/loader/loader.conf
我檢查它時的值不同。)可以在Freedesktop Wiki上的“systemd-boot UEFI Boot Manager”頁面
systemd-boot
末尾找到EFI 變數列表:LoaderEntryDefault entry identifier to select as default at bootup non-volatile LoaderConfigTimeout timeout in seconds to show the menu non-volatile LoaderEntryOneShot entry identifier to select at the next and only the next bootup non-volatile LoaderDeviceIdentifier list of identifiers of the volume the loader was started from volatile LoaderDevicePartUUID partition GPT UUID of the ESP systemd-boot was executed from volatile
要刪除
LoaderEntryDefault-[...]
變數,只需在啟動菜單中按d
兩次鍵即可:設置和取消設置新值。要刪除
LoaderConfigTimeout-[...]
變數,結果足以按下Shift
+t
足夠的時間將超時設置為0
,再加上一次。這解決了我的問題。這是我在 Superuser.SE 上提出的一個有關安全修改 EFI 變數的相關問題。