66 votes

Erreur lors de la conversion d'un disque virtuel VmWare en HyperV

J'ai reçu une image VmWare de mon client à des fins de test. J'ai besoin de la convertir en Hyper-V. J'ai suivi les étapes dans http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v . J'ai installé Microsoft Virtual Machine Converter et j'ai commencé à convertir des disques virtuels dans PowerShell. Cependant, j'obtiens une erreur :

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 votes

Jetez un coup d'œil à ceci sebmatthews.net/2014/06/

0 votes

@piyushjaiswal en fait les étapes décrites dans le blog sont les mêmes que dans le lien que j'ai suivi. Mais il est intéressant de noter que dans les commentaires du blog, certaines personnes ont signalé un problème similaire au mien. Je leur ai répondu avec un lien vers ma solution (mais mon commentaire est en attente de modération, donc je suppose que la notification de modération finit dans les spams et qu'il ne sera jamais publié :) )

90voto

eXavier Points 2519

J'ai trouvé une solution ad hoc - un peu bricolée peut-être mais qui fonctionne au moins.

En cherchant des problèmes similaires sur Google, j'ai trouvé un outil permettant d'extraire le descripteur de disque du fichier VMDK. Le contenu du descripteur pour mon VMDK était quelque chose comme ceci :

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

Le message d'erreur ainsi que le contenu du descripteur extrait ont attiré mon attention, notamment la ligne :

ddb.toolsInstallType = "1"

car il contient la valeur étrange de 1 de mon message d'erreur. J'ai édité le descripteur - il suffit de commenter cette ligne unique avec # (marque de hachage), l'a réinjecté dans le VMDK et voilà - la conversion fonctionne maintenant.

Crédits pour ce lien https://communities.vmware.com/thread/343214?start=0&tstart=0 et bien sûr aux outils de Dariusz Stanislawek.

Juste pour référence, les étapes que j'ai effectuées :

  • télécharger et extraire dsfok outils
  • utiliser dsfo.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt pour extraire le descripteur
  • éditer le fichier descriptif dans Notepad++ : commenter la ligne mentionnée ci-dessus (car j'ai ajouté le caractère unique supplémentaire ( # ) J'ai aussi supprimé un NULL de la fin pour maintenir la taille du fichier à 1024 octets (je ne suis pas sûr que cela soit nécessaire).
  • utiliser dsfi.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt pour réinjecter le descripteur dans le VMDK
  • répétez ces étapes pour l'autre disque (ma VM a deux fichiers .vmdk)
  • rééditer le ConvertTo-MvmcVirtualHardDisk commande

REMARK

Après avoir créé une VM dans Hyper-V, la machine n'a pas démarré, elle est restée sur un écran noir avec un curseur clignotant rapidement (appelé écran noir de la mort). Je ne sais pas si cela a été causé par la conversion ou par le fait que les disques d'origine dans VMWare étaient SCSI alors que je les ai attachés en IDE. Pour résoudre ce problème, j'ai joint un DVD avec une image de Windows et j'ai démarré à partir du DVD. J'ai exécuté le système Rapair, lancé la ligne de commande et exécuté

bootrec.exe /fixBoot

Enfin, la VM démarre et fonctionne fin de l'histoire.

4 votes

Réponse parfaite ! Cependant, pour moi, la ligne incriminée était ddb.uuid.image="bb194edb-6cd9-416d-9241-bef35d41745f" donc j'ai supprimé toutes les ddb.uuid.* entrées. (Il s'agissait d'un vmdk mais créé auparavant avec virtualbox et non vmware, ce qui pourrait être la raison).

1 votes

@pHiL J'ai dû faire la même chose. Je convertissais des Oracle VMs en Hyper-V.

0 votes

La commande ConvertTo-MvmcVirtualHardDisk a pris beaucoup de temps, mais elle a fonctionné (en utilisant la méthode ci-dessus). Il a fallu environ 12 heures pour convertir un fichier VMDK de 150 [Go]. Même s'il a atteint la taille de 150 [Go] en 1 heure environ, il a continué à écrire à la même vitesse (passes multiples ?) pendant 11 heures supplémentaires.

19voto

BornToDrink Points 208

J'ai essayé la solution ci-dessus, mais dans mon descripteur il n'y avait pas la propriété toolsInstallType donc cela n'a pas fonctionné (avec la même erreur).

Après quelques recherches, j'ai trouvé cet outil : https://cloudbase.it/qemu-img-Windows/

La commande était la suivante :

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

La documentation de cet outil se trouve ici Documentation QEMU le drapeau -p vous permet de voir la progression de la conversion.

J'ai également trouvé qu'il était plus facile de travailler avec lui, car c'est un outil portable. Dans ce cas précis, il n'est pas nécessaire de réparer le chargeur de démarrage, j'ai simplement attaché le vhdx à la nouvelle VM et elle a démarré avec succès.

0 votes

Je sais que c'est vieux, mais je voulais juste ajouter que vous pouvez voir le progrès en regardant la taille croissante du fichier dans le répertoire de sortie. Si vous connaissez la taille du fichier d'entrée, la sortie sera à peu près la même.

1 votes

J'ai utilisé cet outil pour convertir un vmdk en vhdx. L'outil a fonctionné mais le vhdx résultant n'est pas amorçable. Existe-t-il une astuce pour le rendre amorçable ?

1 votes

Dans mon expérience, j'ai rencontré le même problème : j'ai dû utiliser l'assistant Nouvelle machine virtuelle pour créer ma VM et spécifier la génération 1 au lieu d'utiliser la création rapide.

16voto

James Cox Points 111

J'ai eu le même problème en essayant de convertir une image VMWare en VHD. Ma solution est similaire à celle d'eXavier, mais j'ai pu le faire avec un simple éditeur de texte.

La raison pour laquelle j'ai pu faire une correction plus simple est que le vmdk que j'ai obtenu de VMWare était un petit fichier texte qui faisait référence à un certain nombre d'autres fichiers. Il ressemblait à ceci :

# 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 solution a consisté à supprimer la ligne #Disk Database et toutes celles qui se trouvent en dessous, en utilisant un éditeur de texte, de sorte que mon fichier ressemble à ceci :

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

Il a ensuite été converti en VHD sans problème.

0 votes

Ça marche. J'avais un petit 0 à la fin de la dernière ligne (....vmdk "0) mais je l'ai laissé et ça a marché, sans problème. Merci.

0 votes

Si simple, si agréable.

0 votes

Cela a parfaitement fonctionné pour moi. J'ai ouvert la fenêtre principale vmdk en utilisant Visual Studio Code, en supprimant tout ce qui se trouve dans # The Disk Data Base et ensuite la conversion a réussi.

13voto

adrian cooper Points 60

J'ai une autre solution à ce problème qui a fonctionné pour moi et j'ai pensé que je l'ajouterais au mélange pour les futurs lecteurs.

J'ai téléchargé l'outil StarWindConverter depuis ici (c'est gratuit).

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

Il prend en charge plusieurs formats de destination et vous propose un assistant agréable pour vous guider. Une fois que vous avez sélectionné toutes vos options, vous obtenez un écran de progression comme ci-dessous :

progress-bar

Le processus de conversion d'un fichier .vmdk hors ligne en .vhdx était simple.

2 votes

C'est tellement facile, fermez-la et prenez mon argent ! (mais le risque du logiciel malveillant ?)

2 votes

Je sais bien ! - C'est un fabuleux petit outil gratuit qui fonctionne comme un charme. De plus, Starwind Software semble être une société réputée, donc pas de malware. Je l'utilise depuis un certain temps maintenant et je ne pourrais pas être plus heureux.

2 votes

Cela a parfaitement fonctionné pour moi, sous Windows 10, en convertissant une très très vieille vmdk de Windows XP.

3voto

Rabash Points 646

Un complément de réponses ci-dessus si vous êtes toujours bloqué par la conversion.

Dans mon cas qemu-img.exe convert ... réussit, mais le résultat .VHD L'image n'a pas réussi à démarrer dans Hyper-V :

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

Utilisez un éditeur hexadécimal (modifiez le bloc 0x100..0x200) ou la méthode dsfi.exe/dsfo.exe décrite ci-dessus pour commenter ces attributs dans votre fichier de configuration. .VMDK fichier :

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

Remplacez simplement ddb -> #db .

Après cela, la conversion MMVC a réussi pour moi sans échec, l'image de sortie fonctionne :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X