2016-05-27 37 views
24

Ho ricevuto l'immagine VmWare dal mio client per alcuni scopi di test. Devo convertirlo in Hyper-V. Ho seguito i passaggi in http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v. Ho installato Microsoft Virtual Machine Converter e ho iniziato a convertire i dischi virtuali in PowerShell. Comunque sto ricevendo eror:Errore durante la conversione del disco virtuale VmWare in 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

prega di dare un'occhiata a questo http://sebmatthews.net/2014/06/from-the-datacenter-converting -vmware-to-hyper-v-got-even-easy-part-1-of-2/ – piyushj

+0

@piyushjaiswal in realtà i passaggi descritti nel blog sono gli stessi del link che ho seguito. Ma interessantemente nei commenti del blog alcune persone hanno riportato un problema simile a quello che avevo io. Ho risposto loro con un link alla mia soluzione (ma il mio commento è in attesa di moderazione, quindi suppongo che la notifica di moderazione finisca nello spam e non sarà mai pubblicata :)) – eXavier

risposta

45

Ho trovato qualche soluzione ad hoc - un po 'di hacking forse ma funziona almeno.

Scavando in problemi simili, ho trovato uno strumento per estrarre il descrittore del disco dal file VMDK. Il contenuto del descrittore per il mio VMDK è stato qualcosa di simile:

# 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" 

Il messaggio di errore insieme con il contenuto del descrittore estratto è venuto alla mia attenzione, in particolare la linea:

ddb.toolsInstallType = "1" 

in quanto contiene lo strano valore di 1 dal mio messaggio di errore. Ho modificato il descrittore - basta commentare quella singola riga con # (cancelletto), reimmetterla in VMDK e voilà - la conversione funziona ora.

Crediti a questo link https://communities.vmware.com/thread/343214?start=0&tstart=0 e naturalmente agli strumenti di Dariusz Stanislawek.

Solo per riferimento, le fasi fatto:

  • scaricare ed estrarre dsfok strumenti
  • uso dsfo.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt per estrarre il descrittore
  • modificare il file di descrizione in Notepad ++: commento alla linea di cui sopra (come ho aggiunto il carattere singolo extra (#) Ho eliminato anche un carattere NULL dalla fine per mantenere la dimensione del file di 1024 byte (non sono sicuro se necessario)
  • uso dsfi.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt per iniettare il descrittore di nuovo nella ripetizione VMDK
  • questi passaggi per l'altro disco (il mio VM ha due file .vmdk)
  • nuovamente il comando ConvertTo-MvmcVirtualHardDisk

NOTA

Dopo aver creato VM in Hyper-V, la macchina non si avviava, rimaneva sullo schermo nero con il cursore lampeggiante veloce (il cosiddetto schermo nero della morte). Non so se è stato causato dalla conversione o dal fatto che i dischi originali in VMWare erano stati SCSI mentre li ho allegati come IDE. Per risolvere il problema, ho allegato il DVD con l'immagine di Windows e avviato da DVD. Ho fatto funzionare il sistema Rapair, iniziato la riga di comando e corsi

bootrec.exe/fixBoot 

Infine, gli stivali VM e corre .. fine della storia.

+0

eccellente, grazie! – Elad

+2

risposta perfetta! Comunque per me la riga incriminata era 'ddb.uuid.image =" bb194edb-6cd9-416d-9241-bef35d41745f "', quindi ho rimosso tutte le voci 'ddb.uuid. *'. (Era un vmdk ma precedentemente creato con virtualbox e non vmware, quindi quello poteva essere il motivo) – pHiL

+0

@pHiL Ho dovuto fare lo stesso. Stavo convertendo Oracle VM in Hyper-V. – johnny

8

Ho avuto anche questo problema nel tentativo di convertire un'immagine VMWare in VHD. La mia soluzione è simile a quella di eXavier, ma sono riuscito a farlo solo con un editor di testo.

Il motivo per cui ho potuto eseguire una correzione più semplice era che il vmdk ottenuto da VMWare era un piccolo file di testo che si riferiva a un numero di altri file.Si presentava così:

# 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" 

La correzione è stato quello di rimuovere la linea di database #Disk e tutti quelli al di sotto di esso, utilizzando un editor di testo, in modo che il mio file si presentava così:

# 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" 

E poi convertito in un VHD senza problemi.

+0

Questo funziona. Ho avuto un po 'di coda 0 nell'ultima riga (.... vmdk "0) ma l'ho lasciato e ha funzionato, nessun problema Grazie, –

5

Ho provato la soluzione di cui sopra, ma nel mio descrittore non c'era la proprietà toolsInstallType, quindi non ha funzionato (con lo stesso errore).

Dopo alcune ricerche ho trovato questo strumento: https://cloudbase.it/qemu-img-windows/

Il comando era così:

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

Non mostra il progresso, ma ha funzionato e mi ha salvato negli ultimi minuti. Inoltre ho trovato più facile lavorare con lo strumento portatile. In questo caso specifico non richiede anche la correzione del bootloader, ho solo collegato il vhdx alla nuova VM e ha iniziato con successo.

+0

So che questo è vecchio, ma volevo solo aggiungere che puoi vedere i progressi di Guardando la dimensione del file in crescita nella directory di output.Se si conosce la dimensione del file di input, l'output sarà circa lo stesso –

+0

Ho usato questo strumento per convertire un vmdk in vhdx. Lo strumento ha funzionato ma il vhdx risultante non è avviabile. C'è un trucco per renderlo avviabile? – Dan

2

Un complemento per le risposte sopra se sei ancora bloccato con la conversione.

Nel mio metodo dei casi qemu-img.exe convert ... riescono, ma produce immagini VHD non è stato avviato in Hyper-V:

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

utilizzare un editor esadecimale (Modifica blocco 0x100..0x200) o dsfi.exe modo /dsfo.exe descritta in precedenza per commentare questi attributi nel file .VMDK:

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="" 

Basta sostituire ddb -> #db.

Dopo di che, la conversione MMVC successo per me senza il fallimento, l'immagine in uscita funziona:

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