That's Done!

thatsdone's (mostly technical) memorandum

[ja] How to manage GRUB default kernel


最近、かなり久しぶりにvanilla kernelをビルドする機会があり、 kernelを切り替えて使いたい場合のGRUBの設定で気づいたことがあったのでメモ。

最近...といっても、20.04くらいからだろうか。submenu というものが導入され、昔のノウハウが効かなくなっている模様。

2024/10/14時点での情報。

Ubuntu 24.04 LTS時点での答

以下の手順でdefaultでbootに使われるkernelを切り替え可能。

  1. /etc/default/grub の GRUB_DEFAULT に saved を設定する
    • GRUB_DEFAULT=0GRUB_DEFAULT=saved
    • Ubuntuだと普通は0になっているので、ここの修正が必要ということ
    • なお、記事によっては、/etc/default/grub に GRUB_SAVEDEFAULT=true を設定するべしという説明がある。これを入れると、私の場合は、後述の grub-reboot コマンドによる一時的な切り替えが効かなくなった。
  2. grub-set-default で、'SUBMENU_ID>MENUENTRY_ID' の形式で指定する
    • SUBMENU_ID は sudo grep submenu /boot/grub/grub.cfg で調べる
    • MENUENTRY_ID は sudo grep menuentry /boot/grub/grub.cfg で調べる
    • 例: # sudo grub-set-default 'gnulinux-advanced-69cecedb-4058-4b83-8507-cca6498f4099>gnulinux-6.8.0-45-generic-advanced-69cecedb-4058-4b83-8507-cca6498f4099'
  3. # update-grub する
  4. # reboot する

これで指定したkernelがdefaultに切り替わる。

一時的に次にbootするkernelを切り替える場合

kernelそのものをいじっている場合など、次のboot時のみ一時的に切り替えたい等の場合は、grub-reboot コマンドが使える。

  1. /etc/default/grub の GRUB_DEFAULT が saved になっていることを確認する
  2. # grub-reboot 'SUBMENU_ID>MENUENTRY_ID'
  3. # update-grub する
  4. # reboot する

もう一度rebootすると、元のdefault kernelで起動される。

サンプル /boot/grub/grub.cfg

以下は私の、Ubuntu 22.04 から 24.04へ do-release-upgrade した環境の /boot/grub/grub.cfg の例。

162行目の $menuentry_id_option の後ろの gnulinux-advanced-32227d3a-e56d-453c-b030-d3c44576fa3f' が上記のSUBMENU_IDの例。

この環境では、そのままだと 163行目の 'Ubuntu, with Linux 6.8.0-45-generic' が使われるのだが、 190行目の 'gnulinux-5.15.0-122-generic-advanced-32227d3a-e56d-453c-b030-d3c44576fa3f' を使って # grub-set-default 'SUBMENU_ID>MENUENTRY_ID' すればよい。

ポイントは、私の場合は以下の2点だった。

  1. SUBMENU_ID と MENUENTRY_IDの間は > でスペースを空けずにつなぐ
  2. ' でquoteするのが安全
162 submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-32227d3a-e56d-453c-b030-d3c44576fa3f' {
163         menuentry 'Ubuntu, with Linux 6.8.0-45-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-6.8.0-45-    generic-advanced-32227d3a-e56d-453c-b030-d3c44576fa3f' {
164                 recordfail
165                 load_video
166                 gfxmode $linux_gfx_mode
167                 insmod gzio
168                 if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzop    io; fi
169                 insmod part_msdos
170                 insmod ext2
171                 search --no-floppy --fs-uuid --set=root 32227d3a-e56d-453c-b    030-d3c44576fa3f
172                 echo    'Loading Linux 6.8.0-45-generic ...'
173                 linux   /boot/vmlinuz-6.8.0-45-generic root=UUID=32227d3a-e5    6d-453c-b030-d3c44576fa3f ro
174                 echo    'Loading initial ramdisk ...'
175                 initrd  /boot/initrd.img-6.8.0-45-generic
176         }

(snip)

190         menuentry 'Ubuntu, with Linux 5.15.0-122-generic' --class ubuntu --c    lass gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-    122-generic-advanced-32227d3a-e56d-453c-b030-d3c44576fa3f' {
191                 recordfail
192                 load_video
193                 gfxmode $linux_gfx_mode
194                 insmod gzio
195                 if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzop    io; fi
196                 insmod part_msdos
197                 insmod ext2
198                 search --no-floppy --fs-uuid --set=root 32227d3a-e56d-453c-b    030-d3c44576fa3f
199                 echo    'Loading Linux 5.15.0-122-generic ...'
200                 linux   /boot/vmlinuz-5.15.0-122-generic root=UUID=32227d3a-    e56d-453c-b030-d3c44576fa3f ro
201                 echo    'Loading initial ramdisk ...'
202                 initrd  /boot/initrd.img-5.15.0-122-generic
203         }

References

  • Grubで前に起動したシステムを記憶する
    • https://www.terakin.com/ja/blog/archives/129
    • /etc/default/grub に GRUB_SAVEDEFAULT=true が必要という説明がある。Windowsとのdual boot環境で、Linuxが普段使いだがWindows Updateでrebootを繰り返す...といった場合はこの記事に従うのがよいようだ。
  • How to get grub2 to remember last choice?
    • https://askubuntu.com/questions/148662/how-to-get-grub2-to-remember-last-choice
  • Setting the desired kernel in GRUB menu
    • https://askubuntu.com/questions/1526087/setting-the-desired-kernel-in-grub-menu
    • /etc/grub.d/40_custom/ にファイルを作るやりかた
    • Windows等とdual以上のboot環境にしたい場合に使うみたいだ
  • How do you change and set the default Kernel in Ubuntu Machine?
    • https://mnzel.medium.com/how-do-you-change-and-set-the-default-kernel-in-ubuntu-machine-7ad1107e1b6f
    • 自分としてはコレがアタリだった