OS起動時は当然、起動しているカーネルのバージョンと
GRUBのデフォルトカーネルのバージョンは下記の通り同一となります。
▼ GRUBのデフォルトカーネルの確認
# grubby --default-kernel /boot/vmlinuz-3.14.35-28.38.amzn1.x86_64
▼ 起動しているカーネルの確認
# uname -r 3.14.35-28.38.amzn1.x86_64
では、バージョンが異なる場合ですが、次のようにパッケージアップデートした時に
カーネルもアップデートされた場合となります。
# yum -y update ...
この時、GRUBのデフォルトカーネルはアップデートされたものに更新されてますが、
起動しているカーネルは、下記のように古いままとなります。
# grubby --default-kernel /boot/vmlinuz-3.14.42-31.38.amzn1.x86_64 # # uname -r 3.14.35-28.38.amzn1.x86_64
ということで、次のワンライナーでGRUBのデフォルトカーネルと
起動しているカーネルに差異がある時、再起動して起動しているカーネルを
GRUBのデフォルトカーネルに揃えることができます。
# grubby --default-kernel | grep `uname -r` || reboot # Broadcast message from ec2-user@ip-10-0-140-242 (/dev/pts/0) at 17:41 ... The system is going down for reboot NOW! Connection to xxx.xxx.xxx.xxx closed by remote host. Connection to xxx.xxx.xxx.xxx closed.
再起動後は下記のようにカーネルが揃っているので、同じワンライナーを実行しても
再起動することはありません。
# grubby --default-kernel /boot/vmlinuz-3.14.42-31.38.amzn1.x86_64 # # uname -r 3.14.42-31.38.amzn1.x86_64 # # grubby --default-kernel | grep `uname -r` || reboot /boot/vmlinuz-3.14.42-31.38.amzn1.x86_64
上記のことをユーザーデータに仕込んで”Amazon Linux”を起動してみました。
#!/bin/sh yum -y update grubby --default-kernel | grep `uname -r` || reboot
実際には、こんな感じで起動しています。
起動したら、パッケージをアップデートして、すぐにリブートが勝手に入りますが、
その後は下記の通り、はじめからGRUBのデフォルトカーネルと起動カーネルが
揃った状態になっています。
# grubby --default-kernel /boot/vmlinuz-3.14.42-31.38.amzn1.x86_64 # # uname -r 3.14.42-31.38.amzn1.x86_64 # # grubby --default-kernel | grep `uname -r` || reboot /boot/vmlinuz-3.14.42-31.38.amzn1.x86_64