DEV Community

Shige Fukushima
Shige Fukushima

Posted on

仮想ディスクの変換 (VMDK 形式から VHD/VHDX 形式への変換)

はじめに

この記事では、記事: Ubuntu VM の移行 (VMware から Hyper-V へ)
で説明した以下の移行手順の ステップ 1 について説明します。

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

VMDK ディスクを VHD/VHDX ディスクへ変換する

VMware 仮想マシンでは仮想ディスクに VMDK 形式を利用しているため、Hyper-V 仮想マシンで利用できる仮想ディスク形式 (VHD/VHDX) とは異なります。
Hyper-V で同じ仮想ディスクを利用するためには、VMDK 形式を VHD/VHDX 形式に変換する必要があります。

MVMC (Microsoft Virtual Machine Converter) のインストール

仮想ディスク VMDK 形式は、マイクロソフトが 2014 年にリリースした
MVMC (Microsoft Virtual Machine Converter) 3.0
を利用して、VHDX 形式に変換することができました。

2023-03-16 現在、リリース記事内のリンクは無効となっていてダウンロードすることはできませんが、
以下のマイクロソフトのダウンロード URL からダウンロードすることができます。

http://download.microsoft.com/download/9/1/E/91E9F42C-3F1F-4AD9-92B7-8DD65DA3B0C2/mvmc_setup.msi

インストーラー ファイルのハッシュ値は以下の通りです。

SHA256 = 520B0D08E0B9D2D95206369E56461D3873FB208F507FBCCC28651D43ABA37F33
SHA-1 = F67812339083376507F51A0B28853C38A3488CF7
Enter fullscreen mode Exit fullscreen mode

仮想ディスク変換ツールの実行

MSMC 変換ツールには、GUI 変換ツールも付属しますが、
この記事では PowerShell コマンドを使って仮想ディスクの変換を行います。

以下のコマンドを実行して、
Import-Module コマンドで MVMC PowerShell コマンドレットをロードし、
ConvertTo-MvmcVirtualHardDisk コマンドで VMDK 形式の仮想ディスクファイルを VHDX 形式に変換します。

以下の例では、VMDK 形式のファイルは Ubuntu_OsDisk.vmdk という名前で、OsDisk.vhdx という名前の VHDX 形式(ダイナミック)に変換します。

Import-Module 'C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1'
Enter fullscreen mode Exit fullscreen mode
ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath Ubuntu_OsDisk.vmdk -VhdType DynamicHardDisk -VhdFormat Vhdx -DestinationLiteralPath OsDisk.vhdx
Enter fullscreen mode Exit fullscreen mode
オプション 説明
-SourceLiteralPath 変換元の VMDK ファイルのパス
-VhdType VHD のタイプ (FixedHardDisk または DynamicHardDisk)
-VhdFormat VHD の形式 (Vhd または Vhdx)
-DestinationLiteralPath 変換先の VHD/VHDX ファイルのパス

コマンドレットの詳細な説明については
MVMC_cmdlets.doc
ファイルを参照してください。

ConvertTo-MvmcVirtualHardDisk コマンドは管理者権限が必要となるため、
管理者権限に昇格していない PowerShell コマンドラインで実行すると以下のエラーが表示されます。
管理者権限で昇格済みの PowerShell コマンドラインで実行してください。

ConvertTo-MvmcVirtualHardDisk: Local administrator privileges are required.
ConvertTo-MvmcVirtualHardDisk: One or more errors occurred. (Local administrator privileges are required.)
Enter fullscreen mode Exit fullscreen mode

Disk Database Entry に関する変換エラーが出る場合

現在 MVMC 変換ツールのメンテナンスが行われていないため、ConvertTo-MvmcVirtualHardDisk コマンドの実行で以下のエラーが出る場合があります。

手持ちの仮想ディスクの変換を実行した際にも、最近作成した VMware 仮想ディスクでエラーが出ました。

ConvertTo-MvmcVirtualHardDisk: The entry 4 is not a supported disk database entry for the descriptor.
ConvertTo-MvmcVirtualHardDisk: One or more errors occurred. (The entry 4 is not a supported disk database entry for the descriptor.)
Enter fullscreen mode Exit fullscreen mode

このエラーは、MVMCツールがサポートしていない DDB (Disk Database) エントリ情報が VMDK に設定されている場合に発生します。
サポートしていないエントリーを無効にするために、VMDK ファイルを編集します。

  1. VMDK ファイルが分割されている場合
    • VMDK DDB エントリは、マスターファイル (*-sXXX.vmdk という名前規則でない *.vmdk ファイルでテキスト形式となっている) に格納されているため、テキストエディタで直接編集します。
  2. VMDK ファイルが単一ファイルの場合

    • VMDK DDB エントリは、VMDK ファイル (バイナリ形式) に埋め込まれています。このエントリ情報の書き換えについては、DSFOK ツール を利用して行います。
    • DSFOK ツールの詳細については、こちらの記事 (英語)を参照しました。
    • 以下のコマンドを利用して、DDB エントリ情報 (ファイルの先頭から 512 バイトの位置から 1024 バイト) を取り出します。
    dsfo.exe Ubuntu_OsDisk.vmdk 512 1024 descriptor.txt
    
* 取り出した DDB エントリ情報 (`descriptor.txt`) をテキストエディタで編集したら、
以下のコマンドを利用して、DDB エントリ情報 (ファイルの先頭から 512 バイトの位置から 1024 バイト) を書き出します。
Enter fullscreen mode Exit fullscreen mode
```cmd
dsfi.exe Ubuntu_OsDisk.vmdk 512 1024 descriptor.txt
```
Enter fullscreen mode Exit fullscreen mode

DDB エントリ情報は以下のような内容になります。

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=a48f63c4
parentCID=ffffffff
createType="monolithicSparse"

# Extent description
RW 134217728 SPARSE "Ubuntu-LTS-x64.vmdk"

# The Disk Data Base
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "8354"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "3bf70afaa672951de3328531a48f63c4"
ddb.toolsInstallType = "4"
ddb.toolsVersion = "12320"
ddb.uuid = "60 00 C2 97 7a d0 13 78-1f e0 18 0f 03 1f 8f ff"
ddb.virtualHWVersion = "19"
Enter fullscreen mode Exit fullscreen mode

上記のエラーの場合、該当部分を以下のようにコメントアウトする (# を追加する) ことで、
変換コマンドのエラーを回避することができました。

変換前:

ddb.toolsInstallType = "4"
Enter fullscreen mode Exit fullscreen mode

変換後:

#ddb.toolsInstallType = "4"
Enter fullscreen mode Exit fullscreen mode

コマンド実行のスクリーンショット

VMDK DDB エントリ情報を編集後にコマンドを実行すると、正常に変換が開始します。変換が完了すると以下の結果のメッセージが表示されます。

Destination                     Source
-----------                     ------
Z:\shigeyf\VMs\work\OsDisk.vhdx .\Ubuntu-LTS-x64.vmdk
Enter fullscreen mode Exit fullscreen mode

最後に

この手順ガイドは、VMware 仮想マシンを Hyper-V に変換するときに得た経験と、Google 検索で得られた記事等に基づいて作成しました。

この記事に記載されている情報に基づいて行った結果についての損失や損害について責任を負いません。
仮想ディスクの変換を行う際には、十分な容量を確保した環境で、必ず仮想ディスクファイルのバックアップを必ず行ってから、自身の責任の元で実行してください。

Do your career a big favor. Join DEV. (The website you're on right now)

It takes one minute, it's free, and is worth it for your career.

Get started

Community matters

Top comments (0)

👋 Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay