【メモを残す理由】
VMWare仮想マシンをCentOS-KVMに移設する必要がある時、VMWare環境が1ディスクで構成されている場合は特に問題ないのですが、複数ディスク(/dev/sda1 と/dev/sdb1など)で構成されている場合、そのまま変換しただけでは起動しなかったため、手間取りました。後世の役に立てば。
【問題と解決策概要】
■問題
起動時に
mounting /dev/sdb1 on /sysroot failed:No such file or directory
というエラーになってマシンが起動できない。
■理由
VMWareのイメージはscsiディスクとなっており、複数ドライブの場合、ブート時にもう一台のscsiディスクをマウントしようとします。が、KVMではscsiディスクは扱えない(IDEかvirtio)ため、2台目のディスクは見つからない、というのが原因。
■解決策
起動時のマウント動作はinitrdというファイルが担当しており、これを再作成することでブートシークエンスを期待通りにすることができます。
下記の手順では、VMWare化前の既存のinitrdを探して、それを利用することで解決しています。
【作業メモ】
# 今回の仮想マシンはsdaとsdbの2ドライブに分かれていた
<仮想マシン名>1.vmdk
<仮想マシン名>1-0.vmdk1) vmdkイメージをKVM形式に変換
qemu-img convert <仮想マシン名>1.vmdk <仮想マシン名>1.img &
qemu-img convert <仮想マシン名>1-0.vmdk <仮想マシン名>1-0.img &# kvmのimg置き場に配置
mv ./<仮想マシン名>1/*.img /var/lib/libvirt/images/2)どちらのディスクに/bootが含まれているかを確認
仮想マシンマネージャで任意のCentOS Live CDのISOイメージをマウントした
仮想マシンを用意。上記で変換した仮想ディスクイメージ(*.img)もマウントした状態で
CentOS Live CDを起動、imgの内容を確認する。
★ここで確認するのは以下の2点
・/bootがあるディスクはどちらか
・VMWare化される前のinitrdが保存されているか3)VMWare化される前のinitrdを有効にする
ここでは"/boot/initrd-2.6.18-164.el5.img.old.0"などと
リネームされて保存されていた場合の手順となります。
# VMWare版のバックアップ
mv /boot/initrd-2.6.18-164.el5.img /boot/initrd-2.6.18-164.el5.img_vmware
# VMWare化される前のinitrdを有効化
cp /boot/initrd-2.6.18-164.el5.img.old.0 /boot/initrd-2.6.18-164.el5.img上記変更を行った上で、LiveCDで起動しているLinuxはshudown。
4-1)[新しい仮想マシンを作成]で 既存のディスクイメージをインポート」 として[進む] 4-2)既存のストレージパス:<仮想マシン名>1.img(/boot以下の入っていたsdaドライブ)を指定 4-3)メモリ・CPUを環境に合わせて指定 4-4)ステップ4/4で「インストールの前に設定をカスタマイズする」を選択して[完了] 4-5)カスタマイズ画面で、左下の[ハードウェアを追加]を押下してストレージの追加を行う <仮想マシン名>1-0.imgを選択して、Disk bus:IDE/Storage format:raw で追加。 →[インストールの開始]で起動
以上。