64

いくつかのテスト目的で、クライアントから 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
4

7 に答える 7

88

私はアドホックな解決策を見つけました - おそらく少しハックですが、少なくとも動作します。

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私のエラーメッセージからの奇妙な値が含まれているためです。私は記述子を編集しました - その一行を#(ハッシュマーク) でコメントアウトし、それを VMDK と出来上がりに戻してください - 変換が機能するようになりました。

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

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

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

述べる

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

bootrec.exe /fixBoot

最後に、VM が起動して実行されます.. 話の終わりです。

于 2016-05-27T11:23:51.097 に答える
19

上記の解決策を試しましたが、記述子に 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 に接続しただけで、正常に起動しました。

于 2016-12-02T14:23:55.070 に答える
16

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 に変換されました。

于 2016-11-10T10:58:28.540 に答える