CentOS6からアップグレードしたCentOS7でカーネルパニック

preupgコマンド等でCentOS6から更新したCentOS7にて、yum update等でカーネルを更新するとカーネルパニックが発生するようです。

 

1 ルートファイルシステムのマウントが失敗してカーネルパニック

私の環境の場合では、ルートファイルシステムのマウントが失敗してカーネルパニックが発生しました。マシンの構成次第でもっと前段階で発生する場合があるかもしれません(後述のinitramfsに含まれるドライバがない為)。

本問題についてはCentOSのフォーラムに記載されております。

モニターにカーネルパニックのログが収まらない場合は、カーネル起動パラメータにvga=askとかを付けて確認すると良いかもしれません。

 

2 GRUB1の更新内容が含まれていない

CentOS7からGRUB2を使うようになってるようで、カーネルを更新する際にGRUB1を更新する設定が含まれていないようです。

# diff -uprN /boot/grub/grub.conf.org /boot/grub/grub.conf
--- /boot/grub/grub.conf.org    2015-04-27 16:43:50.000000000 +0900
+++ /boot/grub/grub.conf        2015-04-27 16:44:38.000000000 +0900
@@ -14,6 +14,7 @@ hiddenmenu
 title CentOS Linux (3.10.0-229.1.2.el7.x86_64) 7 (Core)
        root (hd0,0)
        kernel /vmlinuz-3.10.0-229.1.2.el7.x86_64 ro
        root=/dev/mapper/vg_acer-lv_root rd_NO_LUKS rd_NO_MD
        rd_LVM_LV=vg_acer/lv_root  KEYBOARDTYPE=pc KEYTABLE=jp106
        rd_LVM_LV=vg_acer/lv_swap LANG=ja_JP.UTF-8 rd_NO_DM rhgb
        quiet crashkernel=auto
+       initrd /initramfs-3.10.0-229.1.2.el7.x86_64.img
 title CentOS Linux (3.10.0-123.20.1.el7.x86_64) 7 (Core)
        root (hd0,0)
        kernel /vmlinuz-3.10.0-123.20.1.el7.x86_64 ro
        root=/dev/mapper/vg_acer-lv_root rd_NO_LUKS rd_NO_MD
        rd_LVM_LV=vg_acer/lv_root  KEYBOARDTYPE=pc KEYTABLE=jp106
        rd_LVM_LV=vg_acer/lv_swap LANG=ja_JP.UTF-8 rd_NO_DM rhgb
        quiet crashkernel=auto

その結果、読み込まれるべきinitramfsがない状態でカーネルが起動し、ルートファイルシステムをマウントするのに必要なドライバが読み込まれず、カーネルパニックへと繋がります。

 

3 GRUB1のgrub.confにinitrdのエントリを追加

上記の差分ファイルのように、grub.confにinitrdのエントリを追加します。ただし、今後も同様の対策が必要になるかもしれません。

 

4 GRUB2のインストール

根本的に解決するにはGRUB2をインストールするのが良いのですが、起動しなくなると面倒なので、LiveDVD等でGRUB1をインストールし直せるようにしておくと良いと思います。

gentooのwikiに記載されているように、以下のコマンドでMBRにGRUB2をインストールして、無事に起動できました。

# grub2-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.1.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.1.2.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.13.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.13.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.6.3.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.6.3.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-123.4.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-123.4.2.el7.x86_64.img
Found linux image:
/boot/vmlinuz-0-rescue-c3a9eb9e9e7c47c60c3a36ba0000002f
Found initrd image:
/boot/initramfs-0-rescue-c3a9eb9e9e7c47c60c3a36ba0000002f.img
done