
仮想マシンの仮想基盤 KVM へ移行を試してみました
みなさん、こんにちは。わっくぼです。
今年は3月になって寒くなる事が多く、また、急に暑くなって体調の管理が難しい日々です。
さて、今回は VMware社のESXi が2月で提供終了との事で、Linux の検証用途に ESXi を利用していましたが、次の仮想基盤に何を採用すべきか悩ましいところがあります。
所属しているウイングアーク1stでは、Microsoft社 Windows サーバーの機能である、Hyper-Vを主に利用しています。
前回の note にも公開をしていますが、GPU のパススルーを利用するケースになると、Linux の KVM などを利用するケースが稀にあります。
今回は、KVM の移行について書きたいと思います。
仮想マシンを OS から再構築すれば安定した環境になりますが、移行する時間が掛かるため、V2V (仮想環境から仮想環境)で行います。
移行元は、VMware、Hyper-Vの Linux 仮想マシンを KVM 環境に移行してみたいと思います。
Hyper-V の vhdx 形式
第2世代マシン(UEFI起動)にて、Rocky Linux 8 を移行します。
この仮想マシンの仮想ハードディスクは RockyLinux.vhdx で構築されています。

1.移行する仮想マシンを停止した状態にて、vhdx ファイルを取得します。
2.KVM が稼働している環境に vhdx ファイルを転送します。
3.以下のコマンドを実行し KVM 用の仮想ハードディスクファイル(qcow2ファイル)に変換します。
# qemu-img convert -f vhdx -O qcow2 RockyLinux.vhdx RockyLinux.qcow2
4.仮想マシンのインポートコマンド(virt-install --import)を使用して、移行した仮想ハードディスクを使用した仮想マシンを作成します。
# virt-install --import \
--name RockyLinux \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/RockyLinux.qcow2 \
--network bridge=br0 \
--os-variant rocky8-unknown \
--graphics vnc \
--machine q35 \
--boot uefi \
--autoconsole none
5.Linux の起動が出来たら、仮想ネットワークカードが変わるためネットワークの設定を変更します。
Linux の起動が出来なかった場合は、その他の情報を確認してみてください。

以上で完了です。
VMware の vmdk 形式
BIOS 起動の ubuntu server 22.04 を移行します。
この仮想マシンの仮想ハードディスクは ubuntu.vmdk で構築されています。

※1つの仮想ハードディスクが複数のファイルで構成されている場合は、全てのファイルを取得および移行先に転送する必要があります。
1.移行する仮想マシンを停止した状態にて、vmdk ファイルを取得します。
2.KVM が稼働している環境に vmdk ファイルを転送します。
3.以下のコマンドを実行し KVM 用の仮想ハードディスクファイル(qcow2ファイル)に変換します。
# qemu-img convert -f vmdk -O qcow2 ubuntu.vmdk ubuntu.qcow2
4.仮想マシンのインポートコマンド(virt-install --import)を使用して、移行した仮想ハードディスクを使用した仮想マシンを作成します。
# virt-install --import \
--name ubuntu \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu.qcow2 \
--network bridge=br0 \
--os-variant ubuntu22.04 \
--graphics vnc \
--autoconsole none
5.Linux の起動が出来たら、ネットワークカードが変わるためネットワークの設定を変更します。
Linux の起動が出来なかった場合は、その他の情報を確認してみてください。

以上で完了です。
最後に
今回は、Linux 環境の仮想環境を移行してみました。
仮想マシンの環境に準仮想化のドライバーが導入されている場合は、移行は一筋縄ではいかないようです。
仮想基盤の移行は、事前の確認が必要になりますので余裕を持ったスケジュールにて作業を進めて頂く事をお勧めします。
その他の情報
仮想ディスクが使用する接続パスが virtio に変わるため、起動時にディスクに接続が出来ず、dracut 緊急シェルモードになることがあります。

レスキューモードで Linux を起動し、initramfs のバックアップを取得後に、initramfs を作り直す手順になります。
Make backup
# cp /boot/initramfs-<kernelVersion>.img /boot/initramfs-<kernelVersion>.img.bak
Build Initramfs
# dracut -f /boot/initramfs-<kernelVersion>.img <kernelVersion>
ストレージのインターフェースを sata に変更すると起動する可能性がありますが、パフォーマンス面では initramfs の再構築がお勧めになります。