はじめに
Linux Kernel のstableで3.13系列がでるようになりましたが、自宅環境でカーネルをコンパイルして導入した際に「module scsi_wait_scan not found
」と出てしまい、Kernel Panicを起こして起動しない症状が発生していました。
色々と試行錯誤していたのですが、どうやらvirtio_blk.ko
モジュールが組み込まれていないというところまで原因を突き止めていました。
しかし、モジュール自体はコンパイルされているのに組み込まれないという不思議現象だったのですが、どうにか組み込めることがわかったので試してみることにしました。
検証環境
- CentOS 6.5 x64 on Ubuntu 13.10(KVM)
コンパイルオプション自体は、うまくいっていた3.12系列のconfigファイルを流用してコンパイルしてみました。
問題の状況
導入した直後の結果は以下のとおり。
# lsinitrd /boot/initramfs-3.13.2.img | grep virt
drwxr-xr-x 2 root root 0 Feb 8 23:13
lib/modules/3.13.2/kernel/drivers/virtio
-rw-r--r-- 1 root root 17192 Feb 8 23:13
lib/modules/3.13.2/kernel/drivers/virtio/virtio_balloon.ko
-rw-r--r-- 1 root root 13216 Feb 8 23:13
lib/modules/3.13.2/kernel/drivers/virtio/virtio.ko
-rw-r--r-- 1 root root 19944 Feb 8 23:13
lib/modules/3.13.2/kernel/drivers/virtio/virtio_pci.ko
-rw-r--r-- 1 root root 19448 Feb 8 23:13
lib/modules/3.13.2/kernel/drivers/virtio/virtio_ring.ko
見たとおり、本来組み込まれるべき /lib/modules/3.13.2/kernel/drivers/block/virtio_blk.ko
が組み込まれていないことがわかります。
モジュール自体は所定の場所に作成されているのが分かったので、後からモジュールを追加することにしました。
対応方法
# dracut -f --add-drivers virtio_blk.ko /boot/initramfs-3.13.2.img 3.13.2
--add-drivers
で追加したいモジュールを指定します。また、今回は既にインストール済みのinitramfsに組み込む関係上、上書き処理が必要になるため-f(--force)
を指定する必要があります。
で、上記を実行した結果は以下のとおり。
# lsinitrd /boot/initramfs-3.13.2.img | grep virt
-rw-r--r-- 1 root root 22744 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/block/virtio_blk.ko
-rw-r--r-- 1 root root 25536 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/scsi/virtio_scsi.ko
drwxr-xr-x 2 root root 0 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/virtio
-rw-r--r-- 1 root root 17192 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/virtio/virtio_balloon.ko
-rw-r--r-- 1 root root 13216 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/virtio/virtio.ko
-rw-r--r-- 1 root root 19944 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/virtio/virtio_pci.ko
-rw-r--r-- 1 root root 19448 Feb 8 23:18
lib/modules/3.13.2/kernel/drivers/virtio/virtio_ring.ko
先ほどまでinitramfsに組み込まれていなかった、virtio_blk.ko
と virtio_scsi.ko
が無事に組み込まれていることがわかります。
この状態で再起動をするのですが、grub.confを先に編集して起動してこないと大変なことになるので、念のためコンソールからgrubメニューで起動するKernel を今回インストールしたKernelを選択して、起動してくることを確認します。
これで問題がなければ、grub.conf
の起動順序を編集すれば良いと思います。
とりあえずKernel本体のコンパイルオプションだけではどうにもなりそうも無かったので、手作業での対処方法になってしまいました。いつ修正されるか分かりませんが、とりあえず本家が修正される?まではこの対処方法でいこうと思います。