起動時にkernel panicが発生する場合の対処法

USBメモリから起動した場合にディスクコントローラなどのドライバの関係でkernel panicを引き起こして起動しない場合があります。
その場合は次の手順でinitrdを再構築することで起動可能になります。


・LiveCDなどで立ち上げUSBメモリを認識出来る状態にします。

今回はCentOSを例に説明します。
まずインストールCDから起動します。お持ちでない方はこの辺などから入手可能です。
http://rsync.atworks.co.jp/centos/5/isos/i386/CentOS-5.6-i386-bin-1of7.iso
CentOSインストーラディスクで起動時にboot:と出ているところで「linux rescue」と押すとレスキューモードで起動出来ます。
CentOS Boot

表示言語を選択します。

キーボードを選択します。

ネットワーク設定を有効にするためにYesを選択します。

Yesでeth0の設定をします。

Enable IPv4 supportを選択します。

DHCPを選択します。

Continueを押して完了します。

パーテーションを検出すると/mnt/sysimageに既存パーテーションがマウントされた旨の表示されます。

・再構築作業

・ USBメモリの内容が/mnt/sysimageにマウントされます。

sh-3.2# df
Filesystem            Size  Used Avail Use% Mounted on
/dev                  1.6G     0  1.6G   0% /dev
/tmp/loop0            108M  108M     0 100% /mnt/runtime
/dev/sda2             7.1G  2.8G  4.0G  42% /mnt/sysimage
/dev/sda1             251M   27M  212M  12% /mnt/sysimage/boot
/dev                  1.6G     0  1.6G   0% /mnt/sysimage/dev

dfコマンドで次のパーテーションのマウントが確認出来ます。
/dev/sda2 7.1G 2.8G 4.0G 42% /mnt/sysimage
/dev/sda1 251M 27M 212M 12% /mnt/sysimage/boot
マウントされてない場合はmountコマンドで手動マウントします。

・ マウント場所を変更します。

chroot /mnt/sysimage
いままで/mnt/sysimageにマウントされていた起動ディスクが/に変更されます。。

・ /bootに移動します。

cd /boot

・ バージョンナンバーを調べます

ls -lhtr vmlinuz*
で表示されるvmlinuz-2.6.18-238.9.1.el5PAEこの部分の数字をメモします。el5はE十五ではなくEL五です。

vmlinuzが複数出てきたら一番下の行のものを選択します。

・同じバージョンナンバーの既存のinitrdのファイル名称を変更します。 例の場合.oldと名前を変えました。

mv initrd-2.6.18-238.9.1.el5PAE.img initrd-2.6.18-238.9.1.el5PAE.img.old

・initrdを再構築します。mkinitrdコマンドに続けて、前項で名前を変えた元のinitrdファイル名と、先ほど調べたバージョンナンバーを指定します。

mkinitrd initrd-2.6.18-238.9.1.el5PAE.img 2.6.18-238.9.1.el5PAE

・再起動します。光学ドライブから起動しないようにして下さい。

reboot