Boot

systemd-boot 跳過啟動菜單並忽略 /loader/loader.conf 中的設置

  • August 4, 2018

最近,在我對多重引導系統進行了一些操作後,當我使用 引導 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但沒有帶回引導菜單。

看來這個問題並不少見:

據報導,這兩個問題都已得到解決。但是,我不明白第一個解決方案:

編輯 3:已解決!重新安裝 UEFI 就可以了。

“重新安裝 UEFI”是什麼意思?

至於第二個,它建議在啟動菜單中使用tShift+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 變數的相關問題。

引用自:https://unix.stackexchange.com/questions/459389