vsphere - Error al convertir el disco virtual VmWare a HyperV
vmware esxi to hyper v converter (5)
Recibí la imagen VmWare de mi cliente para algunos propósitos de prueba. Necesito convertirlo a Hyper-V. Seguí los pasos en http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v . Instalé Microsoft Virtual Machine Converter y comencé a convertir discos virtuales en PowerShell. Sin embargo estoy consiguiendo 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
Encontré alguna solución adhoc, quizás un poco piratear, pero al menos funciona.
Al investigar problemas similares encontrados en google, llegué a una herramienta para extraer el descriptor de disco del archivo VMDK. El contenido del descriptor para mi VMDK era algo como esto:
# 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"
El mensaje de error junto con el contenido del descriptor extraído me llamó la atención, específicamente la línea:
ddb.toolsInstallType = "1"
ya que contiene el valor extraño de 1
de mi mensaje de error. Edité el descriptor; solo comente esa línea con #
(marca hash), la inyecté nuevamente en VMDK y listo: la conversión funciona ahora.
Créditos a este enlace https://communities.vmware.com/thread/343214?start=0&tstart=0 y, por supuesto, a las herramientas de Dariusz Stanislawek.
Solo como referencia, los pasos que he realizado:
- descargar y extraer herramientas dsfok
- use
dsfo.exe "c:/temp/disk2.vmdk" 512 1024 descriptor1.txt
para extraer el descriptor - edite el archivo descriptor en Notepad ++: comente la línea mencionada anteriormente (ya que agregué el carácter único adicional (
#
) También eliminé un carácterNULL
del final para mantener el tamaño del archivo de 1024 bytes (no estoy seguro si es necesario)). - use
dsfi.exe "c:/temp/disk2.vmdk" 512 1024 descriptor1.txt
para volver adsfi.exe "c:/temp/disk2.vmdk" 512 1024 descriptor1.txt
el descriptor en el VMDK - repita estos pasos para el otro disco (mi VM tiene dos archivos .vmdk)
-
ConvertTo-MvmcVirtualHardDisk
comandoConvertTo-MvmcVirtualHardDisk
OBSERVACIÓN
Después de crear VM en Hyper-V, la máquina no arrancó, permaneció en pantalla negra con un cursor parpadeante rápido (llamada pantalla negra de la muerte). No sé si fue causado por la conversión o por el hecho de que los discos originales en VMWare habían sido SCSI mientras los adjunté como IDE. Para solucionarlo, adjunté DVD con imagen de Windows y arranqué desde DVD. Corrí el sistema Rapair, comencé la línea de comando y corrí
bootrec.exe/fixBoot
Finalmente, la máquina virtual arranca y se ejecuta ... final de la historia.
Probé la solución anterior, pero en mi descriptor no había la propiedad toolsInstallType, por lo que no funcionó (con el mismo error).
Después de algunas investigaciones, encontré esta herramienta: https://cloudbase.it/qemu-img-windows/
El comando fue así:
qemu-img.exe convert c:/PATH_TO_FILE/disk.vmdk -O vhdx c:/PATH_TO_FILE/disk.vhdx
No muestra progreso, pero funcionó y me salvó en el último minuto. También me resultó más fácil trabajar con él, ya que es una herramienta portátil. En este caso específico, no es necesario arreglar también el gestor de arranque, simplemente conecté el vhdx a la nueva máquina virtual y se inició correctamente.
También tuve este problema al intentar convertir una imagen de VMWare a VHD. Mi solución es similar a la de eXavier, pero pude hacerlo con solo un editor de texto.
La razón por la que podía hacer una solución más sencilla era que el vmdk que obtuve de VMWare era un pequeño archivo de texto que se refería a una serie de otros archivos. Se veía así:
# 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 solución fue eliminar la línea #Disk Database y todas las que están debajo, usando un editor de texto, para que mi archivo se vea así:
# 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"
Luego se convirtió en un VHD sin problemas.
Tengo otra solución a este problema que funcionó para mí, así que pensé que la agregaría a la mezcla para futuros lectores.
Descargué la herramienta StarWindConverter desde aquí (es gratis).
https://www.starwindsoftware.com/tmplink/starwindconverter.exe
Es compatible con múltiples formatos de destino y le brinda un asistente agradable para la guía. Una vez que haya seleccionado todas sus opciones, obtendrá una pantalla de progreso como la siguiente:
El proceso de conversión de archivos .vmdk sin conexión a .vhdx fue sencillo.
Un complemento para las respuestas anteriores si todavía está atascado con la conversión.
En mi caso, el qemu-img.exe convert ...
éxito, pero la imagen .VHD del resultado no se pudo iniciar en Hyper-V:
Virtual hard disk files must be uncompressed and unencrypted and must not be sparse.
Use un editor hexadecimal (bloque de edición 0x100..0x200) o la forma dsfi.exe / dsfo.exe descrita anteriormente para comentar estos atributos en su archivo .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=""
Simplemente reemplaza ddb -> #db
.
Después de eso, la conversión de MMVC fue exitosa para mí sin falla, la imagen de salida funciona:
Import-Module "C:/Program Files/Microsoft Virtual Machine Converter/MvmcCmdlet.psd1"
ConvertTo-MVMCVirtualHardDisk -SourceLiteralPath ./win10-32-disk1.vmdk -DestinationLiteralPath . -VHDFormat Vhdx -VHDType DynamicHardDisk