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

実際には、こんな感じで起動しています。

2015-06-18_03-09-23

起動したら、パッケージをアップデートして、すぐにリブートが勝手に入りますが、
その後は下記の通り、はじめから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

元記事はこちら

“Amazon Linux”で”yum update”でしてカーネルがアップデートしてたらリブートさせる