nkjmkzk.net

powered by Kazuki Nakajima

RHEL4.xまたはOEL4.xのゲストOSで/dev/sd*が認識できない問題

RHEL4.xまたはOEL4.xのゲストOSに対して、/dev/sd*のような形で仮想ディスクを認識させたい場合、つまり、

disk = [
'file:/OVS/running_pool/OEL4U7i386/system.img,xvda,w',
'file:/OVS/running_pool/OEL4U7i386/vd1.img,sda,w',
]

な形でディスクを認識させようとしても、起動後にls /devしてみるとsdaはどこにも見あたりません。/var/log/messegesを見てみるとこんなメッセージが出ているはずです。

Dec 19 10:30:53 localhost kernel: register_blkdev: cannot get major 8 for sd
Dec 19 10:30:53 localhost kernel: xen_blk: can't get major 8 with name sd

これは本来使わなくていいはずのscsiカーネルモジュールをロードしてしまっているのが原因です。これを回避するためにはscsiモジュールを取り除いた形でinitrdをリビルドします。まず現状のinitrdにscsiモジュールが含まれてしまっていることを確認するには以下のようにコマンドを実行します。

[root@~]# zcat /boot/initrd-2.6.9-67.0.15.0.1.ELxenU.img | cpio -it | grep ko | grep -i scsi
lib/scsi_mod.ko

scsiモジュールが入っています。これを取り除いた形で新しいinitrdを生成します。

[root@~]# cd /boot/
mkinitrd --omit-scsi-modules --with=xennet --with=xenblk /boot/initrd-2.6.9-78.0.0.0.1.ELxenU.img.scsifix 2.6.9-78.0.0.0.1.ELxenU

[root@~]# ls | grep initrd
initrd-2.6.9-78.0.0.0.1.ELxenU.img
initrd-2.6.9-78.0.0.0.1.ELxenU.img.scsifix

下が新しく作ったinitrdです。scsiモジュールが取り除かれているか確認します。

[root@~]# zcat /boot/initrd-2.6.9-67.0.15.0.1.ELxenU.img.scsifix | cpio -it | grep ko | grep -i scsi
(scsi_mod.koが表示されなければOK

ブートローダの設定ファイルを編集してこの新しいinitrdを使ってブートするようにします。

[root@~]# vi /boot/grub/menu.lst

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
#          initrd /initrd-version.img
#boot=/dev/xvda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Enterprise (2.6.9-78.0.0.0.1.ELxenU)
    root (hd0,0)
    kernel /vmlinuz-2.6.9-78.0.0.0.1.ELxenU ro root=/dev/VolGroup00/LogVol00 console=xvc0 rhgb quiet
    initrd /initrd-2.6.9-78.0.0.0.1.ELxenU.img.scsifix

これで完了です。リブートすれば/dev/sd*も認識できるようになっているはずです。

追記

このscsiモジュール無しのinitrdで起動している場合、VBDを/dev/sd*と認識することはできますが、そのかわりにiSCSIで直接ストレージに接続することができなくなっちゃいます。VBDの場合はxenblkドライバを使えばいいものの、iSCSI直接続の場合は本来のscsiドライバが必要になるからですね。まぁ、併用しなければいけないというような要件はなさげだしいいか。

without comments

Written by 中嶋 一樹

12月 19th, 2008 at 2:45 pm

Posted in Uncategorized

Tagged with

Leave a Reply