VHDをVMDKに変換する方法:ステップバイステップガイド
VMware vSphere と Microsoft Hyper-V は、最も普及している仮想化プラットフォームの 2 つです。それぞれのソリューションでは、仮想マシン用に異なる仮想ディスクファイル形式が使用されています。つまり、VMware と Hyper-V の間で仮想マシンを移動する際には、仮想ディスクファイルを変換する必要があります。たとえば、テストのためにハイパーバイザー間で仮想マシンを移行する必要がある場合があります。また、仮想マシンの作成時に誤った形式を選択してしまった場合など、形式を変更する必要が生じることもあります。
Hyper-V は仮想マシンに VHD および VHDX を使用するのに対し、VMware は VMDK を使用します。この記事では、VHD ファイルを VMDK に変換して、Hyper-V から VMware 環境へ仮想マシンを移行する方法について解説します。
仮想ディスク形式
VHD は、Connectix Virtual PCで仮想マシン用の仮想ディスク形式として導入されたディスクイメージ形式です。その後、MicrosoftがVirtual PCを買収し、この仮想化製品の開発を継続しました。続いて、MicrosoftはMicrosoft Virtual PCの代替としてHyper-Vを発表しました。VHDの主な機能は次のとおりです:
- VHDファイルでサポートされる最大サイズは2 TB(2^32*512バイト)です。ここで、32ビットは数量を表し、512バイトはセクターサイズを表します。
- VirtualBoxは、Microsoft Azureクラウドでも現在使用されているVHD形式の仮想ディスクもサポートしています。
- 第1世代のHyper-V仮想マシンでは、VHD形式の仮想ディスクのみを使用できます。
VHDX は、Microsoftが提供する新しいバージョンの仮想ディスク形式であり、VHD形式の後継です。VHDX形式は幅広く使用されており、Hyper-V仮想マシン用の仮想ディスクやMicrosoft Cluster Shared Volumesなどに利用されています。VHDXは準オープン形式のファイル形式です。Microsoftのウェブサイトからファイル形式の仕様をダウンロードすると、VHDXファイルを扱う独自のアプリケーションを作成できます。VHDXの主な機能は次のとおりです:
- 最大ディスク容量は64 TBで、VHDの上限である2 TBを上回ります。
- 4 KBセクターをサポートしています。
- VHDディスクと比べて、停電による障害からの保護が強化されています。
第2世代VMは、VHDXとVHDの両方の仮想ディスクをサポートしています。ただし、Azure仮想マシンではVHD形式の仮想ディスクのみを使用できます。VHDX仮想ディスクは、Windows 10およびWindows Server 2016の[ディスクの管理]ウィンドウで作成できます。また、最新バージョンのWindowsでは、組み込みのVHDXドライバーにより、VHDXイメージをディスクドライブとしてマウント(接続)し、Windowsエクスプローラー(マイ コンピューター)に表示できます。
VMDK は、VMwareハイパーバイザー、VirtualBox、QEMUなどで使用されるオープン形式の仮想ディスクイメージであり、Hyper-Vではサポートされていません。VMDKイメージファイルは、物理ハードディスクと同様にデータを保存するコンテナと見なすことができ、さまざまな仮想化ソフトウェアとの高い互換性があります。VMDK仮想ディスクの最大サイズは、2 TBから62 TBに拡大されています。
VMDK仮想ディスクは、モノリシック、分割、スパース、フラットのほか、シンプロビジョニングおよびシックプロビジョニングなど、次の種類とバリエーションに分けられます。VMのスナップショットを取得すると、差分VMDKディスクが作成されます。 VMware Workstationのインストール済み環境では、VMDKファイルをホストマシン上の指定したマウントポイントにマッピング(マウント)できます。高い信頼性を実現します。最新バージョンのVMware製品に搭載のVMFS6(Virtual Machine File System 6)に対応するVMDK仮想ディスクでは、4 KBのネイティブセクターをサポートしています。
VHDをVMDKに変換する前にVHDの内容を確認する
この手順は省略可能です。変換元のVHDまたはVHDX仮想ディスクの状態を確認し、その中のファイルを表示できます。この方法により、誤った仮想ディスクを変換して時間を無駄にすることを防げます。VHDイメージからファイルを抽出するだけの場合は、このセクションをご覧ください。VHDファイルはLinux上のディレクトリにマウントでき、Windowsでは指定したドライブ文字にマッピングできます。
LinuxでVHDXを開く方法
Linuxでは、コンソールで libguestfsツール を使用して、VHDファイルとVHDXファイルを指定したディレクトリ(マウントポイント)にマウントできます。そのため、VHDをVMDKに変換する前に、LinuxでVHDファイルとVHDXファイルの内容を確認できます。ここでは、LinuxでVHDおよびVHDX仮想ディスクイメージの内容を表示する方法を説明します。
必要なパッケージをインストールします:
sudo apt-get install libguestfs-tools
VHDまたはVHDXイメージのマウント先ディレクトリを作成します。例:/mnt/vhd/:
sudo mkdir /mnt/vhd/
VHDディスクイメージを指定したディレクトリにマウントするコマンドを実行します。必要なVHDファイルの保存先ディレクトリに移動し、rootとしてコマンドを実行します:
guestmount --add test-disk.vhd --ro /mnt/vhd/ -m /dev/sda1
各項目の意味は次のとおりです:
-add – 仮想ディスクを開きます。
--ro – 仮想ディスクを読み取り専用モードでマウントします。
/mnt/vhd/は、マウント対象のVHDファイルのパスです。
-m /dev/sda1/は、VHD仮想ディスク上のパーティション名です。この例で使用するVHD仮想ディスクには、NTFSパーティションが1つあります。
guestmount --help
を実行すると、使用可能なすべてのコマンドを確認できます。
注意:別のディレクトリでコマンドを実行する場合は、VHDファイルのフルパスを指定します。例:guestmount --add /media/user1/data/test-disk.vhd --ro /mnt/vhd/ -m /dev/sda1
マウント済みのVHDイメージの内容を確認します:
ls -al /mnt/vhd/

仮想ディスクをアンマウントするには、次のコマンドを使用します:
guestunmount /mnt/vhd/
同様に、VHDXファイルを先ほど作成済みの/mnt/vhd/ディレクトリにマウントし、マウント済みの仮想ディスクから内容をコピーできます:
guestmount --add /media/user1/data/WinServer2016.vhdx --ro /mnt/vhd -m /dev/sda2
各項目の意味は次のとおりです: /dev/sda2 は、/dev/sda1/ が Windows インストーラーによって既定で作成されるサービス パーティションであるため使用されています。
VHDX 仮想ディスクの Windows システム パーティション(ディスク C:)の内容は、Linux コンソールで確認できます(下のスクリーンショットを参照してください)。

Windows で VHD を開く方法
- コンピューターの管理 ウィンドウを開きます( マイ コンピューター を右クリックし、コンテキスト メニューから 管理 を選択します)。

- Computer Management ウィンドウで、 ディスクの管理 を選択し、次に 操作 > 仮想ハード ディスクの接続 をクリックします。

- ポップアップ ウィンドウで、VHD または VHDX ファイルへのパスを指定します。仮想ディスクにデータを書き込まない場合は、 読み取り専用 チェックボックスをオンにします。このオプションを使用すると、仮想ディスクに保存されているデータを誤って破損することも防止できます。

- ディスクがマウントされ、 ディスクの管理 ウィンドウと Windows エクスプローラーに表示されます(この場合、ドライブは X: です)。
注: Windows で判別できるのは、サポートされているファイル システム(NTFS、FAT32、exFAT、ReFS)のパーティションのみです。仮想ディスクに ext3、ext4 などのファイル システムを使用する Linux パーティションが含まれている場合、サードパーティ製ツールを使用しない限り、Windows システムにマウントした VHD または VHDX ファイルの内容を表示できません。
Windows システムから VHD または VHDX 仮想ディスクをアンマウントするには、Windows エクスプローラーを開き、仮想ディスクに割り当てられたドライブ文字を右クリックして、コンテキスト メニューから 取り出し をクリックします。

VHD(VHDX)仮想ディスクの内容を確認し、それが正しいディスクであることを確認したら、VMDK への変換に進むことができます。VHD を VMDK に変換する手頃な方法は、 qemu-img を使用する方法と、 VBoxManage を使用する方法の 2 つです。どちらの方法も無料で使用でき、以下で説明します。
qemu-img を使用して VHD を VMDK に変換する方法
QEMU は、オープンソースのマシン エミュレーションおよび仮想化プラットフォームです。 Qemu-img は QEMU ソフトウェア キットのユーティリティで、仮想ディスクをある形式から別の形式に変換するために使用できます。 Qemu-img は VHD を VMDK に変換するために使用でき、このユーティリティを使用する方法を最初に説明します。 Qemu-img は、Windows と Linux の両方のオペレーティングシステムで実行できます。
Linux での qemu-img の使用
この例では、Ubuntu Linux を使用して qemu-img を実行します。
- まず、オンラインソフトウェアリポジトリから qemu-img をインストールします。
sudo apt-get install qemu-utils - 仮想ディスクイメージが保存されているディレクトリに移動します(この例では、VHD および VHDX 仮想ディスクファイルは /media/user1/data/ に保存されています)。
cd /media/user1/data/
VHDX ファイルの確認
- sudo su を実行して root 権限を取得した後、VHD イメージの情報を表示します。
qemu-img info test-disk.vhd

同様に、VHDX 仮想ディスクの情報も確認できます。
qemu-img info /media/user1/data/WinServer2016.vhdx

Linux で VHD を VMDK に変換する方法
- Linux で qemu-img を使用して VHD を VMDK に変換するには、root として次のコマンドを実行します。
qemu-img convert /media/user1/data/WinServer2016.vhdx -O vmdk /media/user1/data/WinServer2016qemu.vmdk -p各項目の意味は次のとおりです。
-O– 出力ファイルの形式を指定します。-p– 進行状況バーを表示します。変換処理が完了するまで待ちます。
Windows での qemu-img の使用
- 公式ウェブサイトから qemu-img をダウンロードします(32 ビット版と 64 ビット版のインストーラーをダウンロードできます)。この例では、 qemu-img-win-x64-2_3_0 を使用します。
- ダウンロードしたアーカイブからファイルを展開します。たとえば、 C:Programsqemu-img に展開します。
- Windows のコマンドライン(CMD)を起動します。" Run "ボックスを開くには、 Windows+R を押します。ボックスに" cmd "と入力し、Ctrl+Shift+Enter を押して、 コマンド を 管理者 として 実行 します。
cd C:Programsqemu-imgLinux と Windows での qemu-img のコマンドは同じです。
Windows で VHD を VMDK に変換する方法
CMD を管理者として実行し、 qemu-img がインストールされているディレクトリに移動します。
- 仮想ディスクの情報を表示します。
qemu-img.exe info c:VirtualHyper-Vtest-disk.vhd - VHD ディスクイメージを VMDK 形式に変換します。
qemu-img.exe convert -p c:VirtualHyper-Vtest-disk.vhd -O vmdk c:VirtualHyper-Vtest-disk.vmdk各項目の意味は次のとおりです。
-p– 進行状況を表示します。-O– 出力ファイルを指定します。変換処理が完了するまで待ちます。

VBoxManage を使用して VHD を VMDK に変換する方法
VBoxManage は、VirtualBox ハイパーバイザーと仮想マシンを管理するためのコマンドラインインターフェース(CLI)です。 VBoxManage はマルチプラットフォーム対応のツールで、VirtualBox をインストールする とインストールされます(ご存じのとおり、VirtualBoxはマルチプラットフォーム対応の仮想化ソリューションです)。 VBoxManage の特に魅力的な機能の一つは、複数の仮想ディスク形式を変換できることです。 VBoxManage を使用すると、VHDをVMDKに変換できます。
ホストOSとしてWindowsを使用している場合は、コマンドプロンプトを管理者として実行し、VirtualBoxのインストールディレクトリに移動して、 VBoxManage を実行してください。ここでは、VirtualBoxが既定のディレクトリにインストールされているものとします。
cd C:Program FilesOracleVirtualBox
VBoxManage を実行するたびに手動でVirtualBoxのインストールディレクトリに移動する必要がないように、VirtualBoxのインストールパスを環境変数 Path に追加できます。
Hyper-VのVHDをVMwareのVMDKに変換するには、次のコマンドを実行します。
VBoxManage clonehd --format vmdk C:virtualHyper-VWinServer2016.vhdx С:virtualHyper-VWinServer2016vbox.vmdk
構文は簡単です。変換先の仮想ディスク形式(VMDK)を指定し、変換元の VHDX ファイルと変換先の VMDK ファイルの名前を指定します。
変換処理が完了するまでお待ちください。

VirtualBoxをインストールしたマシンでLinuxを使用している場合も、同じコマンドを使用してください(ただし、Linuxのパーティションおよびディレクトリの構造にご注意ください)。
変換した仮想ディスクを使用してVMware仮想マシンを作成する
VHDをVMDKに変換すると、Hyper-V仮想マシンをVMware仮想マシンに変換できます。この処理を完了するには、変換した仮想ディスクを手動で作成したVMware仮想マシンにインポートする必要があります。この方法は、VMware WorkstationおよびVMware ESXiで実行する仮想マシンに使用できます。このセクションでは、Hyper-VからVMwareへの変換に関する残りの詳細を説明します。
VMware Workstation
VMware WorkstationでVHD(VHDX)形式からVMDK形式に変換した仮想ディスクを使用して仮想マシンを作成する場合は、新しい仮想マシンを作成するか(変換した仮想ディスクを追加の仮想ディスクとして追加する場合は、既存の仮想マシンを開きます)、既存の仮想ディスクを使用するオプションを選択してください。
VMware Workstationで新しい仮想マシンを作成しましょう。" File > New virtual machine "をクリックしてください。
VMware Workstationで新しい仮想マシンを作成する方法の詳しい説明については、VMware ホームラボに関するブログ記事をご覧ください。 本日のブログ記事のこのセクションでは、変換済みの VHD 仮想ディスクを VMware Workstation VM にインポートするために必要な手順に重点を置いています。そのため、次の手順に特に注意します:
- " オペレーティング システムを後でインストールする"を選択します。仮想ディスクの変換元である Hyper-V VM にインストールされているゲスト OS(オペレーティング システム)のバージョン(この例では Windows Server 2016 )を選択します。古いバージョンの VMware Workstation を使用している場合は、ゲスト OS のバージョンとして Windows 10 を選択します。

この例での VM 名は Win2016converted です。新しい VM のファイルは C:VirtualWin2016converted に保存されます。
- ディスクの選択 の手順で" 既存の仮想ディスクを使用する "を選択します。

- 既存の VMDK ファイルへのパスを指定します。または、ファイルを参照して選択します。この例での VMDK ファイルへのパスは次のとおりです:
C:VirtualHyper-VWinServer2016qemu2.vmdk

- ダイアログ ウィンドウが表示され、既存の仮想ディスクを新しい形式に変換するよう提案されている場合は、どちらを選択するかは任意です。古いバージョンの VM(古い仮想ハードウェアを使用する VM)でこの仮想ディスクを使用する予定がない場合は、仮想ディスクを新しい形式に変換することをお勧めします。
- 元の Hyper-V VM が BIOS を使用するように構成されている場合は、VM オプションでファームウェアの種類として BIOS を選択します。そうしないと、Hyper-V 形式から VMware 形式に変換した仮想ディスクを接続した VMware VM が起動しません。VM の作成後、 VM > 設定 に移動します。次に、 オプション タブ > 詳細 を選択すると、この設定を確認できます。

これで VM は正しく起動する見込みです。ゲスト OS の起動後、VMware Tools をインストールします。

VMware ESXi
VHDをVMDKに変換し、変換した仮想ディスクをESXiホスト上で実行中のVMware VMにインポートすることもできます。ただし、VMware WorkstationとVMware ESXiで使用されるVMware仮想ディスク形式は異なります。VMware Workstation形式の仮想ディスクでは、ディスク記述子が1つのVMDKファイルに組み込まれています。ESXi形式の仮想ディスクは、データファイル(.vmdk )とディスク記述子ファイル(-flat.vmdk )の2つのファイルで構成されています。 qemu-img またはVBoxManageを使用してHyper-V形式から変換した仮想ディスクを、ESXi上で実行中のVMに使用するには、その仮想ディスクをWorkstation形式からESXi形式に変換する必要があります。そうしないと、" サポートされていない、または無効なディスクタイプ 2 "というエラーが発生します。

VHD形式から変換した仮想ディスクを、ESXi上で実行中のVMに使用する方法を見ていきましょう。
VMDKをESXi形式に変換する
- 変換したVMDKファイルを、ESXiホストに接続されたデータストアにアップロードしてください。SCP/SFTPクライアント、VMware Host ClientのWebインターフェース、またはVMware vSphere Clientを使用して、変換した仮想ディスクの vmdk ファイルをESXiデータストアにアップロードしてください。
例では、 WinServer2016qemu.vmdk ファイルを、IPアドレス10.10.10.74のESXiホストに接続された SSD1 データストアにアップロードしています。

- ESXiホストでSSHアクセスが有効になっていることを確認してください( Manage > Services > TSM-SSH )。

- PuTTYなどのSSHクライアントを使用して、SSH経由でESXiホストに接続してください。
- Hyper-V VHD形式から変換したVMDK仮想ディスクファイルが保存されているディレクトリに移動してください(この例では、 vmdk ファイルは/vmfs/volumes/SSD1/converted/に保存されています)。
cd /vmfs/volumes/SSD1/converted/ - vmkfstools を使用して、Workstation形式の仮想ディスクをESXi形式の仮想ディスクに変換してください。この例では、シンプロビジョニング ESXi形式の仮想ディスクが変換先の仮想ディスク形式です。rootとしてコマンドを実行してください。
vmkfstools -i WinServer2016qemu.vmdk WinServer2016thin.vmdk -d thin
スクリーンショットに示すように、 vmkfstools を使用した VMDK のワークステーション形式から ESXi 形式への変換は正常に完了し、2つの新しいファイルが作成されています:
WinServer2016thin-flat.vmdk
WinServer2016thin.vmdk

ESXi 上の VM への VMDK ディスクのインポート
VMware Host Client を開きます(vCenter が導入されている場合は VMware vSphere Client を使用するのが最適ですが、ESXi 無料版 を使用するシナリオを含め、ほぼすべてのケースで VMware Host Client を使用できます)。同じ手順は VMware vSphere/ESXi バージョン 6.5~9.0 に適用されます。
VMware Host Client の Web インターフェイスで、 仮想マシン を選択し、 VM の作成/登録 をクリックします。

新しい仮想マシン ウィザードが開きます。
- 作成タイプ を選択します。" 新しい仮想マシンを作成 "をクリックします。続行するには、各手順で" 次へ "をクリックします。

- 名前とゲスト OS を選択します。 VM のバージョン、ゲスト OS ファミリ、ゲスト OS バージョンを選択します。この例では、VM 名は Win2016converted です。この VM は ESXi 6.5 以降と互換性があります。ゲスト OS ファミリは Windows で、ゲスト OS バージョンは Microsoft Windows 2016(64 ビット)です。

- ストレージを選択します。 VM ファイルを保存するデータストアを選択します。この例で使用するデータストアの名前は SSD2 です。

- 設定をカスタマイズします。 今回のケースでは、この手順が最も重要です。新しい VM とともにデフォルトで作成された仮想ディスクを削除します。その後、 ハードディスクの追加 > 既存のハードディスク をクリックします。

データストア ブラウザーで、VHD から VMDK に変換し、さらに VMware Workstation 形式から VMware ESXi 形式(シン プロビジョニング)に変換した仮想ディスクを選択します。ご存じのように、変換された仮想ディスクは2つのファイル(.vmdk と -flat.vmdk )で構成されていますが、データストア ブラウザーには vmdk ファイルが1つだけ表示されます。ご安心ください。これは VMware Host Client の機能です。ESXi データストアにコピーされた両方のファイルが存在しています。ESXi コンソールで確認するか、SSH 経由で接続して確認できます。 現在の例では、仮想ディスクの現在のサイズが9.11 GBである一方、このディスクの最大プロビジョニングサイズが30 GBであることを確認できます。

変換済みのVMDK仮想ディスクを追加すると、30 GBの仮想ディスクのサイズ(現在のサイズ)である9 GBが表示された、無効なフィールドを確認できます。

- 完了する準備が整いました。 この手順では、設定を確認できます。すべて正しい場合は、 完了 をクリックして、新しいVMを作成します。

これで、VMの電源をオンにできます(VM名を右クリックし、コンテキストメニューから 電源 > 電源オン を選択します)。

変換済みの仮想ディスクを搭載したVMが正常に起動し、ネットワークも正常に機能しています。これで、ゲストOSにVMware Toolsをインストールできます。

まとめ
Hyper-V仮想マシンをVMwareに変換するには、VHDをVMDKに変換してから、変換済みのVMDK仮想ディスクを新しいVMware VMに接続します。 Qemu-img はVHDからVMDKへの変換ツールとして使用でき、 VBoxManage は代替ツールとして使用できます。どちらのソリューションも無料で、複数のプラットフォームに対応しているため、さまざまなオペレーティングシステムでHyper-V VHDをVMware VMDKに変換できます。 qemu-img または VBoxManage で変換した仮想ディスクをESXi VMで使用する場合は、ESXiのコマンドラインで vmkfstools を使用して、VMDK仮想ディスクをWorkstation形式からESXi形式に変換する必要がありますのでご注意ください。
Hyper-V VM全体をVMware VMに変換するために、半自動または全自動のツールを使用する場合は、無料のVMware vCenter Converter Standaloneを使用できます。使用するハイパーバイザーにかかわらず、データ保護は不可欠です。NAKIVO Backup & Replicationはクロスプラットフォーム復旧機能を提供しており、VMバックアップからVHDディスクをVMDKディスクに変換し、Hyper-V VMをVMwareハイパーバイザーに復元できます。