GRUB2でデフォルト起動するカーネルバージョンを変更する

久しぶりのブログになってしまいました…。

先日、開発用マシン(Fedora17)にVMware Player 5をインストールしたのですが、Playerは起動するも、仮想マシンを起動しようとするとすぐに落ちる、という問題が起きました。
調べてみると、kernel 3.5系では、こういう問題もあるらしいので、カーネルのバージョンを古いものにしてみたらうまく行きました。

GRUB2の設定を変更して、再起動時に古いバージョンのカーネルで起動するようにしたのでそのときのメモ。
環境は以下です。

OS
Fedora17(x86_64)
GRUB2
Ver2.0 0.38.beta6.fc17

っていうか、GRUB2は設定の変更方法が直感的じゃないような…なんとかならんのかこれ…

GRUB2メニューの構造を調べる

まずは、以下のようなコマンドを実行して、起動時のGRUB2のメニュー構造を調べます。

# grep "menuentry" /boot/grub2/grub.cfg 
if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'Fedora' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-60960b2d-1b31-4c62-9ee5-518dbc83c470' {
submenu 'Advanced options for Fedora' $menuentry_id_option 'gnulinux-advanced-60960b2d-1b31-4c62-9ee5-518dbc83c470' {
	menuentry 'Fedora, with Linux 3.6.3-1.fc17.x86_64' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.6.3-1.fc17.x86_64-advanced-60960b2d-1b31-4c62-9ee5-518dbc83c470' {
	menuentry 'Fedora, with Linux 3.6.3-1.fc17.x86_64 (recovery mode)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.6.3-1.fc17.x86_64-recovery-60960b2d-1b31-4c62-9ee5-518dbc83c470' {
	menuentry 'Fedora, with Linux 3.4.4-3.fc17.x86_64' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.4.4-3.fc17.x86_64-advanced-60960b2d-1b31-4c62-9ee5-518dbc83c470' {
	menuentry 'Fedora, with Linux 3.4.4-3.fc17.x86_64 (recovery mode)' --class fedora --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.4.4-3.fc17.x86_64-recovery-60960b2d-1b31-4c62-9ee5-518dbc83c470' {

この実行結果から、メニュー構造が以下のようになっていると推測できます(再起動してみて実際に確認してもよいと思います)。

Fedora
Advanced options for Fedora Linux
├ Fedora, with Linux 3.6.3-1.fc17.x86_64
├ Fedora, with Linux 3.6.3-1.fc17.x86_64 (recovery mode)
├ Fedora Linux, with Linux 3.4.4-3.fc17.x86_64
└ Fedora Linux, with Linux 3.4.4-3.fc17.x86_64 (recovery mode)

ここでは、kernel 3.4.4-3(Advanced optionsの3番目)をデフォルトにすることとします。

GRUB2の設定を変更

GRUB2の設定は以下の2種類のファイルで変更できます。

/etc/defaults/grub
/etc/grub2.d/ 配下のファイル群

/etc/grub2.d/ 配下のファイル群はシェルスクリプトになっていて、これらのファイルをいじると細かな設定ができるらしいです。
今回は、 /etc/defaults/grub の方に変更を加えます。
自分の環境では以下のようになっていました。

# cat /etc/default/grub 
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Fedora"
GRUB_DEFAULT=saved
GRUB_CMDLINE_LINUX="SYSFONT=False rd.lvm.lv=vg_jewelbox/lv_root rd.dm=0 rd.md=0 rd.luks=0 LANG=ja_JP.UTF-8  KEYTABLE=us-acentos rd.lvm.lv=vg_jewelbox/lv_swap rhgb quiet"
#GRUB_THEME="/boot/grub2/themes/system/theme.txt"

なんとなく分かると思いますが、「GRUB_DEFAULT」を変更して、デフォルトの環境を変更します。
まぁここまでは普通というか、イメージできるんだけど、ここからが謎…。

このGRUB_DEFAULTに指定する値ですが、最初に調べたメニュー構造を基にして指定します。
kernel 3.4.4-3はトップメニューの2番目、サブメニューの3番目にあるので、以下のように指定します。

GRUB_DEFAULT="1>3"

で、この後、grub.cfgを更新します。
grub.cfgは /etc/defaults/grub や、 /etc/grub.d 配下のシェルスクリプト群から生成しているようなので、これらのファイルを変更しただけでは設定は反映されません。

# grub2-mkconfig -o /boot/grub2/grub.cfg

これで起動すればOK。
分かりづらい。トップメニューの方は0から始まって、サブメニューの方は1から始まってるのも気に食わない。

またベータバージョンみたいだし、仕方ないんですかね。