web-dev-qa-db-fra.com

Erreur lors de la conversion du disque virtuel VmWare en HyperV

J'ai reçu une image VmWare de mon client à des fins de test. J'ai besoin de le 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 commencé à convertir des disques virtuels dans PowerShell. Cependant je suis en train de devenir eror:

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
50
eXavier

J'ai trouvé une solution ad hoc - un peu bidouillé peut-être mais ça marche au moins.

En fouillant dans des problèmes similaires trouvés sur Google, je suis arrivé à un outil permettant d'extraire le descripteur de disque du fichier VMDK. Le contenu du descripteur de mon VMDK ressemblait à 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 été portés à mon attention, en particulier 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 avec # (Marque de hachage), de l'injecter dans VMDK et le tour est joué - la conversion fonctionne maintenant.

Crédits à ce lien https://communities.vmware.com/thread/343214?start=0&tstart= 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
  • utilisez dsfo.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt pour extraire le descripteur
  • éditez le fichier descripteur dans Notepad ++: commentez la ligne mentionnée ci-dessus (comme j'ai ajouté le caractère simple supplémentaire (#), j'ai également supprimé un caractère NULL de la fin pour conserver la taille du fichier de 1024 octets. (pas sûr si cela est nécessaire).
  • utilisez 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)
  • relancez la commande ConvertTo-MvmcVirtualHardDisk

[~ # ~] remarque [~ # ~]

Après avoir créé VM dans Hyper-V, la machine n’a pas démarré, elle est restée sur l’écran noir avec le curseur clignotant rapidement (dit "écran noir de la mort"). Je ne sais pas si cela a été provoqué par la conversion ou par le fait que les disques originaux dans VMWare étaient au format SCSI alors que je les attachais en tant qu'IDE. Pour y remédier, j'ai joint un DVD avec une image de Windows et démarré à partir d'un DVD. J'ai utilisé le système Rapair, lancé la ligne de commande et exécuté

bootrec.exe /fixBoot

Enfin, VM démarre et exécute .. fin du récit.

76
eXavier

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

La raison pour laquelle j'ai pu faire un correctif plus simple était que vmdk que j'avais obtenu de VMWare était un petit fichier texte qui faisait référence à un certain nombre d'autres fichiers. Cela 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"

Le correctif consistait à supprimer la ligne #Disk Database et tous ceux situés en dessous, à l'aide d'un éditeur de texte, afin 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 converti en un disque dur virtuel sans aucun problème.

15
James Cox

J'ai essayé la solution ci-dessus, mais dans mon descripteur, il n'y avait pas de 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 comme ceci:

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

La documentation de cet outil est ici Documentation QEM L’indicateur -p vous permet de voir la progression de la conversion.

J'ai aussi trouvé qu'il était plus facile de travailler car c'est un outil portable. Dans ce cas spécifique, il ne nécessite pas également de réparer le chargeur de démarrage, je viens de joindre le vhdx au nouveau VM) et le démarrage a été réussi.

12
BornToDrink

J'ai une autre solution à ce problème qui a fonctionné pour moi alors j'ai pensé l'ajouter au mélange pour tous les lecteurs futurs.

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

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

Il prend en charge plusieurs formats de destination et vous offre un assistant de configuration pas à pas. 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 connexion en .vhdx était simple.

6
Ocean Airdrop

Un complément pour les réponses ci-dessus si vous êtes toujours coincé avec la conversion.

Dans mon cas qemu-img.exe convert ... La méthode a abouti, mais le résultat . VHD l’image n'a pas pu démarrer avec Hyper-V:

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

Utilisez un éditeur hexadécimal (bloc d'édition 0x100..0x200) ou la méthode dsfi.exe/dsfo.exe décrite ci-dessus pour mettre en commentaire ces attributs dans votre fichier . 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=""

Il suffit de remplacer 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
3
Rabash