systemd-bootは起動メニューをスキップし、/loader/loader.confの設定を無視します。

systemd-bootは起動メニューをスキップし、/loader/loader.confの設定を無視します。

最近マルチブートシステムでいくつかの操作を行った後、次の方法でNixOSを起動すると、systemd-boot起動メニューが表示されなくなります/loader/loader.conf

# /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;
  };
}

起動メニューを表示するには、時間制限が2秒ではなく0秒に設定されているように、起動中にキーを押す必要があることがわかりました。

systemd-bootx64.efiUSBフラッシュドライブを使用してESPからnixos-installNixOSを取り外し、再インストールしてみました。復元されましたが、systemd-bootx64.efi起動メニューは復元されませんでした。

この問題はまったく珍しいことではないようです。

どちらの問題も解決されたことが知られています。しかし、最初の解決策を理解していません。

編集3:解決しました! UEFIを再インストールするだけです。

「UEFIの再インストール」とはどういう意味ですか?

2つ目は、ブートメニューでt+Shiftキーt(ブート中にキーを押すと表示されます)を使用して異なるタイムアウトを設定することを示唆していますが、他のタイムアウトだけは望ましくありません。systemd-boot尊重したいです。/loader/loader.confの設定

私の質問はこんな感じです。systemd-boot設定を再度どのように使用しますか/loader/loader.conf

解決策を見つけたら、この質問を編集して回答を投稿します。

答え1

読んだ後コメント#6存在する"systemd-boot、タイムアウトなし、選択メニューなし - LoaderEntryDefault"そして見た"systemd-boot は、/boot/loader/loader.conf のデフォルト値をオーバーライドする efivar LoaderEntryDefault を設定します。" nixpkgsGitHubの問題、何らかの方法で設定およびオーバーライドされたEFI変数が問題を引き起こす可能性があることを発見しました/loader/loader.conf

実際、次の 2 つの変数の設定が原因で問題が発生します。

§ 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私が確認したときとは異なることです。)

使用されたEFI変数のリストはsystemd-boot最後で確認できます。「systemd-boot UEFIブートマネージャ」ページから無料デスクトップウィキ:

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-[...]起動メニューでキーを2回押すだけですd。つまり、新しい値を設定または設定解除するだけです。

変数を削除するには、タイムアウトをに設定するだけに+を数回押してもう一度押すだけでLoaderConfigTimeout-[...]十分です。Shiftt0

これは私の問題を解決しました。ここに関連しています質問EFI変数を安全に修正する方法についてSuperuser.SEに一般的な質問をしました。

関連情報