web-dev-qa-db-ja.com

VmWare仮想ディスクをHyperVに変換する際のエラー

いくつかのテスト目的で、クライアントからVmWareイメージを受け取りました。 Hyper-Vに変換する必要があります。 http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v の手順に従いました。 Microsoft Virtual Machine Converterをインストールし、PowerShellで仮想ディスクの変換を開始しました。しかし、私は間違っています:

C:\Windows\system32> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk" -DestinationLiteralPath "c:\data\HyperV\PH\" -VhdType DynamicHardDisk -VhdFormat Vhdx

ConvertTo-MvmcVirtualHardDisk : The entry 1 is not a supported disk database entry for the descriptor.
At line:1 char:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVirtualHardDisk], VmdkDescriptorParseException
    + FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskCommand

ConvertTo-MvmcVirtualHardDisk : One or more errors occurred.
At line:1 char:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVirtualHardDisk], AggregateException
    + FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskCommand
50
eXavier

私はいくつかのアドホックな解決策を見つけました-少しハックするかもしれませんが、少なくとも動作します。

Googleで見つかった同様の問題を掘り下げて、VMDKファイルからディスク記述子を抽出するツールに来ました。 VMDKの記述子の内容は次のようなものでした。

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=5379bf0f
parentCID=ffffffff
isNativeSnapshot="no"
createType="monolithicSparse"

# Extent description
RW 209715200 SPARSE "00054_C8PHS1096_151216-disk2.vmdk"

# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.biosCylinders = "13054"
ddb.geometry.biosHeads = "255"
ddb.geometry.biosSectors = "63"
ddb.geometry.cylinders = "13054"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "64d4e008b7227bcce8aa54995379bf0f"
ddb.toolsInstallType = "1"
ddb.toolsVersion = "10241"
ddb.uuid = "60 00 C2 96 f7 70 f2 fd-b5 02 9e 46 6c df 00 2e"
ddb.virtualHWVersion = "10"

エラーメッセージと抽出された記述子の内容、特に次の行に注目しました。

ddb.toolsInstallType = "1"

エラーメッセージの1の奇妙な値が含まれているためです。記述子を編集しました-#(ハッシュマーク)を使用してその1行をコメントアウトし、VMDKに注入し直しました-変換は動作します。

このリンクへのクレジット https://communities.vmware.com/thread/343214?start=0&tstart= そしてもちろんDariusz Stanislawekによるツールへ。

参考までに、私が行った手順:

  • ダウンロードして抽出 dsfok tools
  • dsfo.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txtを使用して記述子を抽出します
  • notepad ++で記述子ファイルを編集します。上記の行にコメントを追加します(余分な単一文字(#)を追加したため、末尾からNULL文字を1つ削除して、ファイルサイズ1024バイト(これが必要かどうかを確認してください)。
  • dsfi.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txtを使用して、記述子をVMDKに注入し直します
  • 他のディスクに対してこれらの手順を繰り返します(私のVMには2つの.vmdkファイルがあります)
  • ConvertTo-MvmcVirtualHardDiskコマンドを再発行する

備考

Hyper-VでVMを作成した後、マシンは起動せず、カーソルが高速で点滅する黒い画面(いわゆる死の黒い画面)のままでした。それが変換によるものなのか、それともIDEとしてアタッチしたときにVMWareの元のディスクがSCSIであったという事実なのかはわかりません。それを修正するために、WindowsのイメージでDVDを添付し、DVDから起動しました。 Rapairシステムを実行し、コマンドラインを起動して実行しました

bootrec.exe /fixBoot

最後に、VMが起動して実行されます。ストーリーの終わり。

76
eXavier

VMWareイメージをVHDに変換しようとしても、この問題が発生しました。私のソリューションはeXavierのソリューションに似ていますが、テキストエディターでそれを行うことができました。

より簡単な修正を行うことができた理由は、VMWareから取得したvmdkが、他の多くのファイルを参照する小さなテキストファイルであったためです。このように見えた:

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=4bd4d907
parentCID=ffffffff
isNativeSnapshot="no"
createType="twoGbMaxExtentSparse"

# Extent description
RW 8323072 SPARSE "Windows Server 2012-s001.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s002.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s003.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s004.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s005.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s006.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s007.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s008.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s009.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s010.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s011.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s012.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s013.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s014.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s015.vmdk"
RW 983040 SPARSE "Windows Server 2012-s016.vmdk"

# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "7832"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "439d288830654baf53d1f9594bd4d907"
ddb.toolsInstallType = "1"
ddb.toolsVersion = "10240"
ddb.uuid = "60 00 C2 97 21 a0 4e af-fc 21 68 15 2f 12 7f 22"
ddb.virtualHWVersion = "12"

修正は、テキストエディターを使用して#Disk Database行とその下の行をすべて削除し、ファイルが次のようになるようにすることでした。

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=4bd4d907
parentCID=ffffffff
isNativeSnapshot="no"
createType="twoGbMaxExtentSparse"

# Extent description
RW 8323072 SPARSE "Windows Server 2012-s001.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s002.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s003.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s004.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s005.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s006.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s007.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s008.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s009.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s010.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s011.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s012.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s013.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s014.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s015.vmdk"
RW 983040 SPARSE "Windows Server 2012-s016.vmdk"

その後、問題なくVHDに変換されました。

15
James Cox

上記の解決策を試しましたが、記述子にtoolsInstallTypeプロパティがなかったため、機能しませんでした(同じエラーが発生しました)。

いくつかの調査の後、このツールを見つけました: https://cloudbase.it/qemu-img-windows/

コマンドは次のようなものでした:

qemu-img.exe convert c:\PATH_TO_FILE\disk.vmdk -O vhdx c:\PATH_TO_FILE\disk.vhdx -p

このツールのドキュメントはこちら QEMU Documentation -pフラグを使用すると、変換の進行状況を確認できます。

また、ポータブルツールであるため、作業しやすいことがわかりました。この特定のケースでは、ブートローダーを修正する必要もありません。vhdxを新しいVMに接続しただけで、正常に起動しました。

12
BornToDrink

私にはこの問題に対する別の解決策があり、私にとってはうまくいったので、将来の読者のためにミックスに追加することを考えました。

ここからStarWindConverterツールをダウンロードしました(無料)。

https://www.starwindsoftware.com/tmplink/starwindconverter.exe

複数の宛先形式をサポートし、ウォークスルーするための素敵なウィザードを提供します。すべてのオプションを選択すると、次のような進行状況画面が表示されます。

progress-bar

オフラインの.vmdkファイルを.vhdxに変換するプロセスは簡単でした。

6
Ocean Airdrop

まだコンバージョンに行き詰まっている場合は、上記の回答を補完します。

私の場合、qemu-img.exe convert ...メソッドは成功しますが、結果。VHDイメージはHyper-Vで開始できませんでした:

Virtual hard disk files must be uncompressed and unencrypted and must not be sparse.

。VMDKファイルのこれらの属性をコメントアウトするには、16進エディター(編集ブロック0x100..0x200)または上記のdsfi.exe/dsfo.exeの方法を使用します。

ddb.uuid.image="... Some guid here ..."
ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
ddb.uuid.modification="00000000-0000-0000-0000-000000000000"
ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"
ddb.comment=""

ddb -> #dbを置き換えるだけです。

その後、MMVC変換は失敗せずに成功し、出力イメージは機能します。

Import-Module "C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"
ConvertTo-MVMCVirtualHardDisk -SourceLiteralPath .\win10-32-disk1.vmdk -DestinationLiteralPath . -VHDFormat Vhdx -VHDType DynamicHardDisk
3
Rabash