VMware - Restaurar un WindowsImageBackup (VHDX) como VM arrancable
Convertir una copia de WindowsImageBackup de un PC fisico en una VM de VMware Workstation que arranca. El proceso encadena tres fallos distintos que conviene entender por separado, porque cada uno se manifiesta con un mensaje que apunta a otro sitio.
Síntomas
vmware-vdiskmanager: The specified virtual disk needs repairal abrir el disco convertido conqemu-img.Exception 0xc0000005 (access violation)al arrancar la VM, convmware-vmx.dmpy minidump.0xc000000e/0xc000014c(BCD missing) al intentar bootear: el arranque apunta a la firma de disco del PC original.
Causa 1: conversión interrumpida o cabecera sparse corrupta
Si el proceso qemu-img se interrumpe (o se queda leyendo y escribiendo en el mismo disco USB), los VMDK parciales quedan con la cabecera sparse marcada como sucia. Síntoma en el log:
DISKLIB-SPARSE: failed to open (14): Failed to check header
vmware-vdiskmanager -R no lo repara cuando la corrupción es del extent, no del descriptor. Hay que reconvertir desde el origen.
Comprobación y limpieza:
Get-Process qemu-img -ErrorAction SilentlyContinue | Select-Object Id, StartTime, CPU
# Si Stop-Process devuelve "Acceso denegado" por ser hijo de otro proceso:
$inst = Get-CimInstance Win32_Process -Filter "ProcessId=<PID>"
$inst | Invoke-CimMethod -MethodName TerminateCausa 2: crash 0xc0000005 por falta de slots PCIe
El access violation de VMware no es un bug del producto. En vmware.log aparece el motivo real:
[msg.pci.noslotavail] No PCIe slot available for Ethernet0. Remove Ethernet0 and try again.
E1000PCI: failed to register e1000e device.
Dos factores combinados:
- Faltan los
pcibridge*en el.vmx. Una VM convertida desde backup declara solosata0ysvga; los puentes nativos quedan ocupados y no hay hueco para la NIC. virtualDev = "e1000e"puede tumbar el proceso vmx contra puentes recien creados. Cambiar ae1000(Intel 82545EM, driver incluido en Windows 10) registra el dispositivo sin crash.
Causa 3: BCD apunta al disco original
Un WindowsImageBackup de metal desnudo no es arrancable en hardware distinto: el BCD de la partición ESP guarda la firma del disco original y el offset de la partición Windows. Al cambiar controladora (fisica a SATA virtual) y firma, winload.efi no encuentra la partición. Es esperado: siempre hay que reparar el BCD.
Procedimiento
1. Convertir VHDX a VMDK escribiendo en disco local
El error clasico es leer del USB y escribir en el mismo USB: la contención de cabezal lo hace hasta seis veces más lento. Leer del USB y escribir en NVMe.
$qemu = "<ruta>\qemu-img.exe"
$src = "D:\WindowsImageBackup\<EQUIPO>\Backup <fecha>"
$out = "C:\VMs\<VM>"
New-Item -ItemType Directory -Path $out -Force | Out-Null
& $qemu convert -p -f vhdx -O vmdk -o subformat=monolithicSparse "$src\Esp.vhdx" "$out\Esp.vmdk"
& $qemu convert -p -f vhdx -O vmdk -o subformat=monolithicSparse `
"$src\<GUID>.vhdx" "$out\<VM>.vmdk"Rendimiento medido en un caso real (288 GB): lectura USB 77 MB/s, escritura USB 77 MB/s, lectura y escritura en el mismo USB 13 MB/s, lectura USB más escritura NVMe 134 MB/s. De 3-4 horas a unos 40 minutos.
Nota: qemu-img de la versión 2.3.0 no acepta -m ni -W aunque aparezcan en --help.
2. Quitar ethernet del .vmx antes del primer arranque
El .vmx heredado trae ethernet0.pciSlotNumber en conflicto con el resto de dispositivos.
ethernet0.present = "FALSE"
# eliminar tambien: ethernet0.pciSlotNumber, ethernet0.addressType,
# ethernet0.generatedAddress, ethernet0.generatedAddressOffset
3. Reparar el BCD offline desde el host
Más rápido y fiable que pelear con “Press any key to boot from CD” dentro de la VM. Requiere PowerShell como administrador y Mount-VHD no disponible (sin Hyper-V), así que se usa diskpart.
@'
select vdisk file="D:\WindowsImageBackup\<EQUIPO>\Backup <fecha>\<GUID>.vhdx"
attach vdisk readonly
select vdisk file="D:\WindowsImageBackup\<EQUIPO>\Backup <fecha>\Esp.vhdx"
attach vdisk
exit
'@ | Out-File "$env:TEMP\dp.txt" -Encoding ASCII; diskpart /s "$env:TEMP\dp.txt"
diskpart
# DISKPART> list vol
# volumen NTFS grande = particion Windows (sin letra)
# volumen FAT32 ~96 MB = ESP (sin letra)
# DISKPART> select vol <n_esp> ; assign letter=S
# DISKPART> select vol <n_windows> ; assign letter=W
# DISKPART> exit
bcdboot W:\Windows /s S: /f UEFI
# debe responder: "Archivos de arranque creados correctamente."
Después, desmontar los dos VHDX con detach vdisk.
4. Reconverir solo el ESP
El BCD reparado está en el VHDX original; la VM usa VMDK. Basta reconvertir el ESP (unos segundos). El disco de Windows no cambia y no necesita reconversión.
& $qemu convert -p -f vhdx -O vmdk -o subformat=monolithicSparse "$src\Esp.vhdx" "$out\Esp.vmdk"5. Arrancar en frio
Remove-Item "$out\nvram" -Force -ErrorAction SilentlyContinue
& "C:\Program Files (x86)\VMware\VMware Workstation\vmrun.exe" -T ws start "$out\<VM>.vmx" guiWindows arranca, detecta hardware nuevo y llega al login.
6. Reanadir la red sin crashear
No vale con “Settings - Add Network Adapter”: VMware descarta los pcibridge anadidos a mano y vuelve a “no hot-pluggable slots”. Hay que declarar todo en el .vmx con la VM apagada y no abrir Settings después.
# Puentes PCI: sin ellos VMware no tiene donde enchufar la NIC
pcibridge0.present = "TRUE"
pcibridge4.present = "TRUE"
pcibridge4.pciSlotNumber = "18"
pcibridge5.present = "TRUE"
pcibridge5.pciSlotNumber = "19"
pcibridge6.present = "TRUE"
pcibridge6.pciSlotNumber = "32"
pcibridge7.present = "TRUE"
pcibridge7.pciSlotNumber = "33"
# Red NAT con e1000 (no e1000e)
ethernet0.present = "TRUE"
ethernet0.startConnected = "TRUE"
ethernet0.connectionType = "nat"
ethernet0.addressType = "generated"
ethernet0.virtualDev = "e1000"
ethernet0.pciSlotNumber = "35"
ethernet0.generatedAddress = "00:0c:29:xx:xx:xx"
ethernet0.generatedAddressOffset = "0"
# USB 2.0 activo desde el arranque
ehci.present = "TRUE"
ehci.pciSlotNumber = "34"
usb.present = "TRUE"Arrancar con Archivo - Abrir - seleccionar el .vmx - Power on directo, sin pasar por Settings. Windows detectara “Intel PRO/1000 MT Desktop Adapter” y tomara DHCP del rango NAT de VMware.
Mapa de slots que asigna VMware
sata0 -> 16
pciBridge0 -> 17
pciBridge4 -> 18
pciBridge5 -> 19
pciBridge6 -> 32
pciBridge7 -> 33
ehci -> 34
ethernet0 -> 35
Slots validos: 0-31 para PCIe primarios y 32 o más para los secundarios.
Verificar los discos
& "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -R "C:\VMs\<VM>\Esp.vmdk"
& "C:\Program Files (x86)\VMware\VMware Workstation\vmware-vdiskmanager.exe" -R "C:\VMs\<VM>\<VM>.vmdk"
# exit=0 significa correcto
Lecciones aplicables
vmware-vdiskmanager -Rno repara todo: si la corrupción es estructural del sparse extent, hay que reconvertir desde el origen.- Un
access violationde VMware puede ser solo síntoma. El motivo real está envmware.log([msg.pci.noslotavail]). - Nunca convertir leyendo y escribiendo en el mismo disco USB: la contención de cabezal multiplica el tiempo.
- Reparar el BCD offline con
diskpartybcdbootes más rápido y fiable que arrancar WinRE desde ISO. Mount-VHDexige Hyper-V;diskpartconattach vdiskhace lo mismo y siempre está disponible.- Tras reparar el BCD, reconvertir solo el ESP: el disco de Windows no cambia.
- Borrar
nvramcuando se altera la configuración de arranque: persiste el orden EFI anterior. - No editar el
.vmxcon VMware abierto:vmware.exeovmware-vmx.exereescriben el fichero al cerrar. - No entrar en Settings después de editar el
.vmxa mano: la interfaz reconstruye el fichero y elimina lospcibridge*que no reconoce. - Los
pcibridge*son obligatorios en.vmxconvertidos: sin ellos no hay hueco para la NIC ni hot-add. - Si
Stop-Processfalla por permisos,taskkill /F /T /PIDtermina el árbol completo. - Un adaptador WLAN USB no sustituye a la NAT: muchos chipsets no tienen driver firmado en Windows 10 y solo sirven para Wi-Fi.
e1000es más lento quevmxnet3, perovmxnet3necesita VMware Tools instaladas y en algunas builds heredadas conviene quedarse ene1000.