zuntan02のはてなブログ

備忘録的なものです。時々職場の技術者ブログにも転記してますが、メインはこちらで。

仮想マシンの変換メモ(VMWare→KVM)

【メモを残す理由】
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.vmdk

1) 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)仮想マシンマネージャにて改めて仮想マシンを登録

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 で追加。
 →[インストールの開始]で起動

以上。