いくつかのテスト目的で、クライアントから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
私はいくつかのアドホックな解決策を見つけました-少しハックするかもしれませんが、少なくとも動作します。
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によるツールへ。
参考までに、私が行った手順:
dsfo.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt
を使用して記述子を抽出します#
)を追加したため、末尾からNULL
文字を1つ削除して、ファイルサイズ1024バイト(これが必要かどうかを確認してください)。dsfi.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt
を使用して、記述子をVMDKに注入し直しますConvertTo-MvmcVirtualHardDisk
コマンドを再発行する備考
Hyper-VでVMを作成した後、マシンは起動せず、カーソルが高速で点滅する黒い画面(いわゆる死の黒い画面)のままでした。それが変換によるものなのか、それともIDEとしてアタッチしたときにVMWareの元のディスクがSCSIであったという事実なのかはわかりません。それを修正するために、WindowsのイメージでDVDを添付し、DVDから起動しました。 Rapairシステムを実行し、コマンドラインを起動して実行しました
bootrec.exe /fixBoot
最後に、VMが起動して実行されます。ストーリーの終わり。
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に変換されました。
上記の解決策を試しましたが、記述子に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に接続しただけで、正常に起動しました。
私にはこの問題に対する別の解決策があり、私にとってはうまくいったので、将来の読者のためにミックスに追加することを考えました。
ここからStarWindConverterツールをダウンロードしました(無料)。
https://www.starwindsoftware.com/tmplink/starwindconverter.exe
複数の宛先形式をサポートし、ウォークスルーするための素敵なウィザードを提供します。すべてのオプションを選択すると、次のような進行状況画面が表示されます。
オフラインの.vmdkファイルを.vhdxに変換するプロセスは簡単でした。
まだコンバージョンに行き詰まっている場合は、上記の回答を補完します。
私の場合、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