VMware 仮想マシンを Hyper-V へ移行する
これまで、Windows の開発環境で
VMware Workstation Player
(個人利用では無償バージョンを利用することができる) を使って開発用の仮想化環境 (Ubuntu Linux マシン等) を用意していましたが、
新しい PC の購入に伴い、開発環境を引っ越しすることにしました。
この引っ越しに伴って、仮想化マシンも Hyper-V へ引っ越しすることにしました。
Ubuntu OS の VMware 仮想マシンを Hyper-V へ移行するには以下の手順で行います。
- VMDK 形式の仮想ディスクを VHD/VHDX 形式への変換
- 新しい仮想マシンを作成 (変換した仮想ディスクをアタッチする)
- open-vm-tools のアンインストール
- (オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換
- (オプション) Secure Boot の有効化
- Hyper-V 統合サービスのインストール
ステップ 1: VMDK ディスクを VHD/VHDX ディスクへ変換する
VMware 仮想マシンでは仮想ディスクに VMDK 形式を利用しているため、Hyper-V 仮想マシンで利用できる仮想ディスク形式 (VHD/VHDX) とは異なります。
Hyper-V で同じ仮想ディスクを利用するためには、VMDK 形式を VHD/VHDX 形式に変換する必要があります。
仮想ディスク VMDK 形式は、マイクロソフトが 2014 年にリリースした
MVMC (Microsoft Virtual Machine Converter) 3.0
を利用して、VHDX 形式に変換することができました。
詳細な手順については、こちらの記事 を参照ください。
ステップ 2: 新しい Hyper-V 仮想マシンを作成
ほとんどの場合、VMware で作成した Ubuntu Linux の仮想マシンは BIOS ブートとなっています。
BIOS ブートとなっているかどうかを確認するには、移行前に VMware 仮想環境で以下のコマンドを実行してください。
sudo fdisk -l
コマンドの出力結果は以下の通りです。
/dev/sda
のディスクに BIOS boot のパーティションが表示されています。
Disk /dev/loop0: ... (中略)
:
Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 9DB29DC2-4F7D-4E2A-B917-31BE798E6613
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 4198399 4194304 2G Linux filesystem
/dev/sda3 4198400 67106815 62908416 30G Linux filesystem
Disk /dev/mapper/ubuntu--vg-ubuntu--lv: 15 GiB, 16101933056 bytes, 31449088 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
BIOS ブートのディスクを正しく起動するには、「第 1 世代」の
Hyper-V 仮想マシンを作成する必要がありますので、注意してください。
Hyper-V 仮想マシンの詳細な作成方法はこの記事を参照してください (ここでは割愛します)。
「既存の仮想ハード ディスクを使用する」を選択して変換した仮想ディスクを指定してください。
Hyper-V 仮想マシンを作成する際のフォルダ構成は、以下のような構成がおすすめです。
仮想マシンの名前のフォルダー
├─Virtual Machines
├─Virtual Hard Disks : ここに変換した VHD/VHDX ファイルをコピーする
└─Snapshots
ステップ 3: open-vm-tools のアンインストール
VMware 仮想マシンに Ubuntu Linux をインストールすると、自動的に open-vm-tools
パッケージがインストールされています。
このパッケージのアンインストールをします。
アンインストールの実行:
sudo apt remove open-vm-tools -y
削除されたか確認する:
sudo apt list | grep "open-vm-tools/"
以下のように residual-config
と表示されている場合、パッケージの残骸 (構成ファイルなど) が残っている状態を表しています。
open-vm-tools/jammy-updates,now 2:12.1.0-1~ubuntu0.22.04.1 amd64 [residual-config]
以下のコマンドで構成ファイルを削除します。
sudo apt purge open-vm-tools -y
以下のコマンドを実行して、open-vm-tools
に依存するパッケージで不要なパッケージを自動的に削除します。
sudo apt autoremove -y
ステップ 4: (オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換
第 2 世代 Hyper-V 仮想マシンで Ubuntu Linux を起動するには、
Ubuntu Linux の起動ディスクを BIOS ブートから EFI ブートへ変更する必要があります。
詳細な手順については、こちらの記事 を参照ください。
ステップ 5: (オプション) Secure Boot の有効化
第 2 世代 Hyper-V 仮想マシンの Ubuntu Linux でセキュアブートを有効にするには、
セキュアブートに対応したカーネルと Grub ブートローダーをインストールする必要があります。
詳細な手順については、こちらの記事 を参照ください。
ステップ 6: Hyper-V 統合サービスのインストール
以下のコマンドを実行して、Hyper-V 統合サービスをインストールします。
sudo apt update
sudo apt install linux-virtual linux-cloud-tools-virtual linux-tools-virtual -y
sudo reboot -f
再起動後、以下のコマンドを実行して、Hyper-V 統合サービスが実行しているか確認することができます。
Hyper-V 用のカーネルモジュールの確認のコマンド:
lsmod | grep hv_
出力結果:
hv_balloon 36864 0
hv_storvsc 24576 3
hv_netvsc 98304 0
scsi_transport_fc 98304 1 hv_storvsc
hv_utils 45056 3
hv_vmbus 135168 8 hv_balloon,hv_utils,hv_netvsc,hid_hyperv,hv_storvsc,hyperv_keyboard,hyperv_drm,hyperv_fb
Hyper-V 用デーモンの確認のコマンド:
compgen -c hv_
出力結果:
hv_fcopy_daemon
hv_vss_daemon
hv_set_ifconfig
hv_get_dhcp_info
hv_get_dns_info
hv_kvp_daemon
hv_fcopy_daemon
hv_vss_daemon
hv_set_ifconfig
hv_get_dhcp_info
hv_get_dns_info
hv_kvp_daemon
移行後のその他の作業
仮想化環境の変更により、仮想マシンのハードウェアの変更が発生しています。
以下の作業を行います。
ネットワークインターフェースの変更
VMware 仮想マシンでは、ネットワークインターフェースは ens33
と認識されましたが、
Hyper-V 仮想マシンでは eth0
と認識されます。
ネットワーク接続の構成ファイル (/etc/netplan/00-installer-config.yaml
) を
(例えば 以下のように) 正しく変更してください。
# This is the network config written by 'subiquity'
network:
ethernets:
eth0:
dhcp4: true
version: 2
/dev/fd0 に関するエラー
コンソール出力に以下のようなエラーが表示されたり、sudo dmesg
コマンドの実行結果に以下のエラーが表示される場合があります。
起動している Hyper-V の仮想マシンにフロッピーデバイスがないため、表示されるエラーです。
floppy0: disk absent or changed during operation
blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x80700 phys_seg 1 prio class 0
floppy0: disk absent or changed during operation
blk_update_request: I/O error, dev fd0, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0
Buffer I/O error on dev fd0, logical block 0, async page read
VMware 仮想マシンでは、仮想マシンにフロッピードライブを接続していなくても、
仮想マシンのマザーボードにフロッピードライブのインターフェースが用意されているため、
floppy カーネルモジュールが読み込まれています。
以下のコマンドで、フロッピーデバイスを無効化します。
sudo rmmod floppy
echo "blacklist floppy" | sudo tee /etc/modprobe.d/blacklist-floppy.conf
sudo dpkg-reconfigure initramfs-tools
まとめ
VMware 仮想化環境でインストールした Ubuntu Linux 仮想マシンを Hyper-V 仮想化環境に移行することができました。
最新の Ubuntu Linux インストーラーでは、第 2 世代の Hyper-V 仮想マシンでセキュアブートを有効にした仮想マシンを
自動的にインストールすることができるようになっていますが、既存の資産を活用したい場合などは、このガイドを参考に移行をしてみてください。