2016-05-27 70 views
24

爲了某些測試目的,我從客戶端收到了VmWare映像。我需要將其轉換爲Hyper-V。 我按照http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v中的步驟操作。我安裝了Microsoft Virtual Machine Converter並開始在PowerShell中轉換虛擬磁盤。但我越來越eror:將VmWare虛擬磁盤轉換爲HyperV時出錯

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 
+0

請看看這個http://sebmatthews.net/2014/06/from-the-datacenter-converting -vmware-to-hyper-v-got-even-easy-part-1-of-2/ – piyushj

+0

@piyushjaiswal實際上,博客中描述的步驟與我遵循的鏈接中的步驟相同。但有趣的是,在博客的評論中,有些人報告了類似的問題。我回答他們與我的解決方案的鏈接(但我的評論正在等待審覈,所以我認爲審覈通知以垃圾郵件結束,並且永遠不會發布:)) – eXavier

回答

45

我發現了一些adhoc解決方案 - 有點破解,但可能至少有效。

發現類似的問題發現我來到一個工具來提取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提取描述符
  • 編輯在記事本+ +的描述符文件:發表評論上述線路(如我添加了額外的單個字符(#)我也從最後刪除了一個NULL字符,以保持1024字節的文件大小(不知道是否需要這樣)
  • 使用dsfi.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt注入描述符回VMDK
  • 重複這些步驟爲其他盤(我的虛擬機有兩個.vmdk文件)
  • 補發ConvertTo-MvmcVirtualHardDisk命令

REMARK

創建後虛擬機在Hyper-V中,機器沒有啓動,它保持黑屏,快速閃爍光標(所謂的死亡黑屏)。我不知道它是由轉換引起的,還是由於VMWare中的原始磁盤是SCSI而我將它們作爲IDE連接起來的。爲了解決這個問題,我將DVD與Windows映像連接起來並從DVD啓動。我運行Rapair系統,啓動命令行並運行

bootrec.exe/fixBoot 

最後,VM啓動並運行..故事結束。

+0

非常好,謝謝! – Elad

+2

完美答案!但對於我來說,違規行是'ddb.uuid.image =「bb194edb-6cd9-416d-9241-bef35d41745f」',所以我刪除了所有的'ddb.uuid。*'條目。 (這是一個vmdk,但以前使用virtualbox創建,而不是vmware,所以可能是原因) – pHiL

+0

@pHiL我必須這樣做。我正在將Oracle VM轉換爲Hyper-V。 – johnny

8

我有一個這個問題,試圖將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數據庫線和所有那些在它下面,用文本編輯器,讓我的文件是這樣的:

# 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沒有問題。

+0

這工作。我在最後一行有一些尾部0(.... vmdk「0),但我離開它,它的工作,沒有問題。謝謝。 –

5

我試過上述解決方案,但在我的描述符中沒有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 

它不顯示進度,但它的工作,並在最後時刻拯救了我。 另外我發現它更容易使用,因爲它是一個便攜式工具。在這種特殊情況下,它也不需要修復引導加載程序,我只是將vhdx連接到新VM併成功啓動。

+0

我知道這是舊的,但只是想補充說,你可以看到進展在輸出目錄中查看日益增長的文件大小如果知道輸入文件的大小,輸出將大致相同 –

+0

我使用此工具將vmdk轉換爲vhdx該工具可以工作,但生成的vhdx不可啓動。是否有一個把它啓動的技巧? – Dan

2

如果您仍然堅持轉換,則可以作爲上述答案的補充。

在我的情況qemu-img.exe convert ...方法成功,但導致.VHD圖像失敗的Hyper-V開始:

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

使用十六進制編輯器(編輯塊0x100..0x200)或dsfi.exe上述在.VMDK文件註釋掉這些屬性/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