DEV Community

Shige Fukushima
Shige Fukushima

Posted on

Ubuntu VM の移行 (VMware から Hyper-V へ)

VMware 仮想マシンを Hyper-V へ移行する

これまで、Windows の開発環境で
VMware Workstation Player
(個人利用では無償バージョンを利用することができる) を使って開発用の仮想化環境 (Ubuntu Linux マシン等) を用意していましたが、
新しい PC の購入に伴い、開発環境を引っ越しすることにしました。
この引っ越しに伴って、仮想化マシンも Hyper-V へ引っ越しすることにしました。

Ubuntu OS の VMware 仮想マシンを Hyper-V へ移行するには以下の手順で行います。

  1. VMDK 形式の仮想ディスクを VHD/VHDX 形式への変換
  2. 新しい仮想マシンを作成 (変換した仮想ディスクをアタッチする)
  3. open-vm-tools のアンインストール
  4. (オプション) 第2世代 Hyper-V 仮想マシン用の仮想ディスクへ変換
  5. (オプション) Secure Boot の有効化
  6. 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 
Enter fullscreen mode Exit fullscreen mode

コマンドの出力結果は以下の通りです。
/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 
Enter fullscreen mode Exit fullscreen mode

BIOS ブートのディスクを正しく起動するには、「第 1 世代」の
Hyper-V 仮想マシンを作成する必要がありますので、注意してください。

Hyper-V 仮想マシンの詳細な作成方法はこの記事を参照してください (ここでは割愛します)。
「既存の仮想ハード ディスクを使用する」を選択して変換した仮想ディスクを指定してください。

Hyper-V 仮想マシンを作成する際のフォルダ構成は、以下のような構成がおすすめです。

仮想マシンの名前のフォルダー ├─Virtual Machines ├─Virtual Hard Disks : ここに変換した VHD/VHDX ファイルをコピーする └─Snapshots 
Enter fullscreen mode Exit fullscreen mode

ステップ 3: open-vm-tools のアンインストール

VMware 仮想マシンに Ubuntu Linux をインストールすると、自動的に open-vm-tools パッケージがインストールされています。
このパッケージのアンインストールをします。

アンインストールの実行:

sudo apt remove open-vm-tools -y 
Enter fullscreen mode Exit fullscreen mode

削除されたか確認する:

sudo apt list | grep "open-vm-tools/" 
Enter fullscreen mode Exit fullscreen mode

以下のように residual-config と表示されている場合、パッケージの残骸 (構成ファイルなど) が残っている状態を表しています。

open-vm-tools/jammy-updates,now 2:12.1.0-1~ubuntu0.22.04.1 amd64 [residual-config] 
Enter fullscreen mode Exit fullscreen mode

以下のコマンドで構成ファイルを削除します。

sudo apt purge open-vm-tools -y 
Enter fullscreen mode Exit fullscreen mode

以下のコマンドを実行して、open-vm-tools に依存するパッケージで不要なパッケージを自動的に削除します。

sudo apt autoremove -y 
Enter fullscreen mode Exit fullscreen mode

ステップ 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 
Enter fullscreen mode Exit fullscreen mode

再起動後、以下のコマンドを実行して、Hyper-V 統合サービスが実行しているか確認することができます。

Hyper-V 用のカーネルモジュールの確認のコマンド:

lsmod | grep hv_ 
Enter fullscreen mode Exit fullscreen mode

出力結果:

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 
Enter fullscreen mode Exit fullscreen mode

Hyper-V 用デーモンの確認のコマンド:

compgen -c hv_ 
Enter fullscreen mode Exit fullscreen mode

出力結果:

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 
Enter fullscreen mode Exit fullscreen mode

移行後のその他の作業

仮想化環境の変更により、仮想マシンのハードウェアの変更が発生しています。
以下の作業を行います。

ネットワークインターフェースの変更

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 
Enter fullscreen mode Exit fullscreen mode

/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 
Enter fullscreen mode Exit fullscreen mode

VMware 仮想マシンでは、仮想マシンにフロッピードライブを接続していなくても、
仮想マシンのマザーボードにフロッピードライブのインターフェースが用意されているため、
floppy カーネルモジュールが読み込まれています。

以下のコマンドで、フロッピーデバイスを無効化します。

sudo rmmod floppy echo "blacklist floppy" | sudo tee /etc/modprobe.d/blacklist-floppy.conf sudo dpkg-reconfigure initramfs-tools 
Enter fullscreen mode Exit fullscreen mode

まとめ

VMware 仮想化環境でインストールした Ubuntu Linux 仮想マシンを Hyper-V 仮想化環境に移行することができました。

最新の Ubuntu Linux インストーラーでは、第 2 世代の Hyper-V 仮想マシンでセキュアブートを有効にした仮想マシンを
自動的にインストールすることができるようになっていますが、既存の資産を活用したい場合などは、このガイドを参考に移行をしてみてください。

Top comments (0)