monoの開発ブログ

次回起動時に使うカーネルをあらかじめ選択しておく

カーネルを変更するために再起動したものの、よそ見している間にGRUBのメニューが勝手に選択されてしまい、再起動し直す羽目になった、なんて経験はないでしょうか。私は頻繁にやらかします。自動で選択されないようにするという手もあるのですが、それはそれで面倒なので避けたいところですよね。

とはいえ、急いでいる時の数分のロスは精神的にくるものがあります。そこで、GRUBのデフォルト値を簡単に切り替えられるようにして、再起動前に指定しておくという対策を考えました。

GRUB2であれば、以下のようなコマンドを実行することで、デフォルトのカーネルを簡単に切り替えられます (0のところは環境に合わせて指定してください)。そして、このまま再起動をかければ、デフォルトのカーネルとして今指定したものが選ばれるというわけです。

sudo sh -c "sed -i -e 's/^GRUB_DEFAULT=.\\+$/GRUB_DEFAULT=0/' /etc/default/grub && grub-mkconfig -o /boot/grub/grub.cfg"

かなり強引なやり方ではありますが、とにかく便利です。選択ミスを防止するという用途以外に、リモートでsshを使っていてGRUBのメニューを選択できない状況でカーネルを切り替えたい、なんて場合にも適していそうですね。

2014-05-27 追記

eltickさんから、grub-reboot (grub2-reboot) またはgrub-set-default (grub2-set-default) を使うとよいと教えていただきました。ありがとうございます!

grub-rebootは、次回起動時に選択する項目を指定するコマンドです。この設定は、次回起動時の一度だけ有効です。以下のように使います。

sudo grub-reboot 0

名前にrebootが入っていますが、実際にrebootするところまでやってくれるわけではありません。何も起きなくて一瞬焦るかもしれませんが、落ち着いてrebootを叩きましょう。

grub-set-defaultは、前回選択した項目の情報を強制的に上書きするコマンドです。/etc/default/grubGRUB_DEFAULT=savedと記述すると、前回選択した項目をデフォルトとすることができるので、結果的にデフォルトの項目を指定するコマンドとして機能します。

sudo grub-set-default 0