vmdk形式をHyper-Vへインポートしたい
vmwareのファイル形式であるvmdkをHyper-Vのファイル形式であるvhdxへコンバートしたい。
エクスポートされたvmdkが分割されている場合
vmdkファイルが1ファイルにまとまっているのであれば、この手順は不要だが、もし複数のファイルに分割されているのであれば、結合しないといけない。
vmware-vdiskmanager.exeを使う
VMWare Workstation (2022/12月現在 Version 17.0)をインストールすると、一緒にインストールされる。(Playerのほうには入っていなかった。)
インストールフォルダのvmware.exeと同じ場所にある、vmware-vdiskmanager.exeを使う。有志が開発したラッパーGUIもあるようだが、PowerShellで十分実行できた。
vmware-vdiskmanager.exe -r Target-File-1.vmdk -t 0 Target-File.vmdk
Target-File-1.vmdk:分割されたvmdkファイルの先頭のファイルを指す。
Target-File.vmdk:結合後のファイル名を指す。
vmdkファイル形式をvhdxファイル形式へ変換
Microsoft Virtual Machine Converterを使う
既にMicrosoftの公式サイトからは入手できない?(2022/12月現在)
因みにインストーラのファイル名はmvmc_setup.msiだった。
インストールしたらGUIが起動できるが、GUIからはコンバート元のvmware等に接続することが求められるため、PowerShellで実行する。
まずは必要なモジュールをインポート
Import-Module "D:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"
次に変換するコマンドを実行。パスの指定はフルパス推奨。
ConvertTo-MvmcVhd -SourceLiteralPath 変換元.vmdk -DestinationLiteralPath 出力先.vhdx -VhdType DynamicHardDisk -VhdFormat Vhdx
このコマンドで
ConvertTo-MvmcVhd : The entry xx is not supported disk database entry for the descriptor.
とエラー表示が出た場合、次のツールで修正が必要となった。
dsfokを使う
dsfokをDLし、入っているdsfo.exeをまず使う。
dsfo.exe 対象となる変換元.vmdk 512 1024 tmp.txt
そうすると、tmp.txtにvmdkの情報が出力されるので、エラーの「entry xx is」の「xx」に該当する行がないか探して、その行をコメントアウトする。
そして、そのtmp.exeを対象となるvmdkに再度埋め込むため、今度はdsfi.exeを使う。
dsfi.exe 対象となる変換元.vmdk 512 1024 tmp.txt
そして、ConvertTo-MvmcVhdコマンドを再度実行する。(エラーが出ればその度にtmp.txtの編集->dsfi.exeを繰り返す)
Hyper-Vへインポート
これで無事にvhdx形式のファイルに変換できたら、Hyper-Vで新規マシンを作成し、ディスクを新規作成ではなく、変換したvhdxファイルを指定することで起動できる。