CentOS7になってブートローダーがGRUB2になりました。
kernelのセキュリティアップデートなどで新しいkernelを入れた後リブートすると
新しいkernelで起動していると思ったら古いままだったいう事はありませんか?
本来 期待するところは、最新のkernelが起動してくることかと思います。
ところが下記のようにmenuentryが登録された場合、
OS起動時にデフォルトで起動してくるのは、1番上のkernel(=1番古いkernel)になります。
# grep ^menuentry /boot/grub2/grub.cfg | awk -F' '{ print $2 }'
CentOS Linux, with Linux 3.10.0-123.el7.x86_64 ## 古い!
CentOS Linux, with Linux 3.10.0-123.20.1.el7.x86_64 ## 新しい!
CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64 ## ちょっと古い!
CentOS Linux, with Linux 0-rescue-dfed4baf487a4b7684a419db9a770c4d
menuentryが新しい順に並んでくれなかった場合に、
デフォルトで起動するkernelを任意のものにする方法を教えてもらったのでご紹介します。
デフォルトで起動するkernelを任意に指定する
以下の手順で設定をしていきましょう!
menuentryの順番を確認する
/etc/grub2.confで先頭がmenuentryから始まる行を確認します。
# grep ^menuentry /boot/grub2/grub.cfg | awk -F' '{ print $2 }'
CentOS Linux, with Linux 3.10.0-123.el7.x86_64 # 0番目
CentOS Linux, with Linux 3.10.0-123.20.1.el7.x86_64 # 1番目
CentOS Linux, with Linux 3.10.0-123.6.3.el7.x86_64 # 2番目
CentOS Linux, with Linux 0-rescue-dfed4baf487a4b7684a419db9a770c4d
起動するkernelを番号で指定する。
/etc/default/grubのGRUB_DEFAULTに起動するkernelの番号を指定します。
# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=1 ## 0から1へ変更する
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="vconsole.keymap=jp106 crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb quiet ipv6.disable=1 net.ifnames=0"
GRUB_DISABLE_RECOVERY="true"
ここで注意すべきなのが、最初のmenuentryを0として上から順に扱われているということです。
上記でgrepしたmenuentryの例では、最新のkernelを起動するならGRUB_DEFAULT=1
と指定する必要があります。
/boot/grub2/grub.cfgを再生成する
/etc/default/grub の編集が完了したら、grub.cfgを生成し直す必要があります。
以下のようにコマンドを実行してください。
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-123.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.20.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.20.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.6.3.el7.x86_64
Found initrd image: /boot/initrd-3.10.0-123.6.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dfed4baf487a4b7684a419db9a770c4d
Found initrd image: /boot/initramfs-0-rescue-dfed4baf487a4b7684a419db9a770c4d.img
done
次回起動するkernelを確認します。
# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-123.20.1.el7.x86_64) 7 (Core)
ちなみに、現在のkernelは以下のとおりです。
# uname -a
Linux XXXXX.com 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
ここまで完了したらサーバーを再起動します。
再起動後、kernelのバージョンを確認します。
# uname -a
Linux XXXXX.com 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
新しいバージョンのkernelを使用していることが確認できました!
まとめ
### /etc/grub2.confなりで先頭がmenuentryから始まる行を確認する
# grep ^menuentry /boot/grub2/grub.cfg | awk -F' '{ print $2 }'
最初のmenuentryを0として扱い、/etc/default/grub の"GRUB_DEFAULT=”に使いたいkernelの番号を指定する。
編集が完了したら、以下のコマンドでgrub.cfgを生成し直す
# grub2-mkconfig -o /boot/grub2/grub.cfg
以下のコマンドで次に起動するkernelのバージョンを確認し、問題なければ再起動をする
# grub2-editenv list