0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Posted at

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

コマンドの出力結果は以下の通りです。
/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 仮想マシンでセキュアブートを有効にした仮想マシンを
自動的にインストールすることができるようになっていますが、既存の資産を活用したい場合などは、このガイドを参考に移行をしてみてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?