前提

通常の方法

Arch Wikiに載ってる通り、GRUB_DEFAULT=savedGRUB_SAVEDEFAULT=true/etc/default/grubに設定する。 しかし自分の環境では、それらを設定してもWindowsの方(os-proberで追加した)しか保存されなかった。

以前のエントリを記録する方法

/boot/grub/grubenvに保存される。

保存は/etc/grub.d/00_headerに定義されてたsave_entry/etc/grub.d/10_linuxなどで呼び出す。

tl;dr

grub.confのどこかにset blsuki_save_default=trueを書く。

UKIが原因だと気づくまで

linuxのブートエントリを復元

生成された/boot/grub/grub.cfgをみて、windowsのmenuentryはあるが、linuxのものがないことに気づく。 すると10_linuxだけ実行可能ファイルでない。 grubを再インストールすると、10_linuxが実行可能ファイルになり、grub.confにエントリが追加された。

カーネルパニック

これで起動するとカーネルパニックになった。 メッセージはroot file systemが見つからない。 これが/dev/nvme0n1p3のように指定されてた。

UUIDで指定されない原因

10_linuxを見たりしたがわからなかった。 info grubを見てると、initrdが見つかったらそこから取るとあるので、initrdが見つからないことが問題みたい。

mkinitcpio -Pしても/boot/にない。 実行ログや/etc/mkinitcpio.d/みてるとukiというのを代わりに作ってるらしい。

UKIで保存する方法の調査

GRUBからのUnified Kernel Image (UKI)の起動はukiコマンドでやってるみたい(/etc/grub.d/15_uki)。 なので普通のmenuentryではない。 これでやる方法を色々調べると、ukiコマンド自体とても新しい(2025 8月)らしい。 そのパッチで、save entryとかの文字列があって、grubのドキュメントで検索をかけてみたら、blsuki_save_defaultという環境変数があったら、保存するらしい。

grub-editenvで追加してみたが何も変わらず。 infoを読むと、setコマンドで定義できるとある。 ので、とりあえず15_ukiを編集して、set blsuki_save_default=truegrub-mkconfigしたら、期待通りに動いた。


新しい機能っぽく誰の記事もヒットしなかった。

本当はGRUB_SAVEDEFAULTを反映させるべきだと思う。