最近マルチブートシステムでいくつかの操作を行った後、次の方法で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.efi
USBフラッシュドライブを使用してESPからnixos-install
NixOSを取り外し、再インストールしてみました。復元されましたが、systemd-bootx64.efi
起動メニューは復元されませんでした。
この問題はまったく珍しいことではないようです。
Arch Linuxフォーラム:systemd-boot、タイムアウトなし、選択メニューなし - LoaderEntryDefault
どちらの問題も解決されたことが知られています。しかし、最初の解決策を理解していません。
編集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 を設定します。" nixpkgs
GitHubの問題、何らかの方法で設定およびオーバーライドされた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に一般的な質問をしました。