De VMware a Proxmox: guía de migración paso a paso
Tras el giro de licencias de Broadcom, miles de empresas buscan salida. Cómo planificar la migración, qué herramientas de P2V/V2V usar y los errores que arruinan un proyecto.
ovftool, ni de copiar VMDK a mano, ni de qemu-img.qm import en consola. Y una regla que no aparece en el asistente: no más de cuatro discos a la vez.Hay muchas guías de migración de VMware a Proxmox y casi todas cuentan lo mismo: exporta la máquina a OVF, súbela al nodo, conviértela y cruza los dedos. Ese camino sigue existiendo, pero desde hace más de dos años ya no es el principal. Proxmox VE incorpora un asistente de importación que habla directamente con la API de ESXi, lista las máquinas del host y las trae con su configuración traducida, sin copias intermedias. Fue la novedad estrella de la versión 8.2 y en las 9.x sigue recibiendo arreglos en cada release.
Esta guía va de eso: de cómo se usa el asistente de verdad, botón a botón, qué hay que dejar hecho en VMware antes de tocarlo, qué te vas a encontrar al arrancar la máquina en Proxmox y cómo se pasa de migrar una VM a migrar cincuenta. Si lo que buscas es decidir si migrar y cómo planificar el proyecto, eso ya lo tratamos en la guía de planificación, en la cuenta real de lo que cuesta y en los casos en los que conviene esperar. Aquí damos por hecho que la decisión está tomada.
El importador está construido como un plugin de almacenamiento. Al añadir un origen de tipo ESXi, Proxmox instala un servicio (esxi-folder-fuse, del paquete pve-esxi-import-tools) que monta los datastores del host como si fueran carpetas locales. Desde ahí lee el fichero .vmx de cada máquina, traduce la configuración al modelo de Proxmox y copia los discos VMDK al almacenamiento de destino convirtiéndolos al vuelo al formato que toque, qcow2, raw o el que use tu ZFS, LVM o Ceph.
Lo que cambia respecto al método clásico es el número de copias. Con ovftool los datos salían de ESXi a un sitio intermedio y de ahí a Proxmox, con espacio de staging y dos veces el tiempo de transferencia. Con el asistente van del datastore de VMware al almacenamiento de Proxmox en un solo salto.
Lo que el asistente traduce solo y lo que no:
| Elemento de la VM en ESXi | Qué hace el asistente |
|---|---|
| Nombre, sockets, cores y memoria | Los lee del .vmx y los propone; se pueden cambiar antes de importar. |
| Tipo de sistema operativo | Lo reconoce y ajusta el tipo de OS de Proxmox (Windows o Linux, y versión). |
| Modo de arranque (BIOS o UEFI) | Lo respeta: SeaBIOS u OVMF. Las variables EFI no se importan; puede hacer falta recrear la entrada de arranque. |
| Discos | Los importa uno a uno, cada uno a un almacenamiento y formato distintos si quieres. Los NVMe virtuales pasan a SCSI. |
| Unidades de CD/DVD | Conserva la unidad, no la imagen ISO; se le asigna una nueva desde Proxmox. |
| Tarjetas de red | Modelo, bridge y MAC. Por defecto conserva la MAC original, útil para reservas DHCP. |
| Puertos serie | Se mapean a un socket. |
| Snapshots | No se importan. Además ralentizan mucho la lectura del disco. |
| Estado del vTPM | No se puede importar. Si cifra el disco (BitLocker), hay que resolverlo antes. |
Lo que más fallos da después no se arregla en Proxmox, se evita en VMware. La lista, por orden:
apt purge open-vm-tools o su equivalente.virtio-win y ejecuta el instalador virtio-win-guest-tools mientras la máquina sigue en VMware: deja los drivers de disco, red y balloon en el almacén de controladores, más el QEMU Guest Agent. Con eso hecho, bastantes máquinas arrancan en Proxmox directamente con VirtIO SCSI, pero Windows solo activa el driver de arranque de un controlador que ya ha visto, así que no lo des por hecho: pruébalo con una VM de laboratorio y ten a mano el procedimiento del disco temporal.initramfs lleva los módulos VirtIO. En Debian y Ubuntu van de serie. En la familia RHEL (Rocky, Alma, Oracle) dracut genera el initramfs solo con los drivers del hardware presente, y en VMware eso significa vmw_pvscsi y vmxnet3, no virtio_scsi. Regenéralo antes de apagar: dracut -f --add-drivers "virtio_pci virtio_blk virtio_scsi virtio_net".En la interfaz de Proxmox ve a Datacenter → Storage → Add y elige ESXi, la última opción del desplegable. Es la que ves en la captura de cabecera: el importador se comporta como un tipo de almacenamiento, al lado de NFS, Ceph o Proxmox Backup Server.

El diálogo de conexión, en nuestro laboratorio. Cuatro campos y una casilla.
esxi-lab o pruebas-cvi-esxi. Aparecerá en el árbol de recursos y en la ruta que usarás luego en consola.root vale; una cuenta dedicada con permisos de administrador, mejor.Antes de pulsar Add comprueba que el nodo Proxmox llega al puerto 443 del host ESXi; el importador va por la API HTTPS. Si hay un cortafuegos por medio, ábrelo desde la IP del nodo que va a hacer la importación.
Al añadirlo, el origen aparece en el árbol de la izquierda bajo cada nodo, con el contenido de tipo Import. Selecciónalo y verás la lista de máquinas virtuales del host, con su nombre y ruta en el datastore. Si la lista sale vacía, lo primero es mirar los permisos de la cuenta y si hay caracteres raros en el nombre del datastore: un + en el nombre puede hacer que no funcione, y la solución es renombrarlo.
Marca la máquina y pulsa Import (o doble clic). Se abre el asistente con tres pestañas.
General. Es donde se decide lo grueso:
host da el máximo rendimiento; si son distintos o vas a ampliar con otros, uno de los modelos x86-64-v2-AES o x86-64-v3, que permiten migración en vivo entre nodos.vmbrX al que se conectarán las tarjetas de red. Ambos se pueden afinar disco a disco y tarjeta a tarjeta en la pestaña siguiente.Advanced. Lo que te evita retoques después:
VirtIO SCSI single es el recomendado.e1000e está en la lista porque es habitual en invitados VMware antiguos), bridge, etiqueta VLAN y MAC.Resulting Config. La lista completa de pares clave-valor con los que se creará la máquina, tal cual acabarán en /etc/pve/qemu-server/<id>.conf. Merece un vistazo la primera vez.
Pulsa Import. Verás la tarea en el visor de abajo, con el progreso de copia de cada disco. Al terminar, la máquina aparece en el inventario, apagada (o encendida, si has elegido importación en vivo). Con qm config <id> puedes revisar el resultado desde consola.
Con Live Import marcado, Proxmox arranca la máquina inmediatamente y va trayendo los bloques que el sistema operativo pide para arrancar, mientras copia el resto del disco en segundo plano. La VM sigue apagada en ESXi, así que parada hay, pero se reduce a lo que tarda en arrancar en Proxmox, no a lo que tarda en copiarse el disco entero. Para una máquina con 2 TB de disco la diferencia es de horas.
El precio es doble. Durante la copia el rendimiento de E/S está limitado por la lectura remota a través de ESXi, así que la máquina va más lenta hasta que termina. Y lo importante, tal cual lo dice Proxmox: si la importación falla, se pierde todo lo escrito desde que empezó. La máquina en ESXi sigue en el estado en que la apagaste, pero lo que hayan hecho los usuarios o las aplicaciones en Proxmox en ese intervalo no está en ningún sitio.
Con eso, la regla práctica:
Un detalle de versiones: la 9.1 corrigió un fallo por el que la importación en vivo desde ESXi fallaba con máquinas de tipo QEMU 10, y la 9.2 volvió a tocar el importador. Si vas a usar Live Import, actualiza el nodo primero.
Lo normal es que una VM Windows importada con Prepare for VirtIO-SCSI arranque a la primera, con el disco en SATA. A partir de ahí:
virtio-win-guest-tools.exe. Instala los drivers de disco, red, balloon y el QEMU Guest Agent de una vez. Si lo hiciste ya en VMware, aquí solo comprobarás que están.vioscsi, apagar, quitar el disco temporal, desconectar el disco de sistema (queda como Unused) y volver a conectarlo como SCSI, y por último revisar el orden de arranque en Options. Si te saltas el disco temporal, pantalla azul con INACCESSIBLE_BOOT_DEVICE; se arregla volviendo a SATA y repitiendo.vmxnet3 fantasma para que no reclame la IP.\EFI\Microsoft\Boot\bootmgfw.efi; el disco EFI de la VM la guardará.Sobre el rendimiento de Windows en Proxmox y las licencias de Windows Server, tienes un artículo entero.
Linux es más agradecido porque el kernel trae los drivers VirtIO de serie. Lo que suele fallar es más tonto:
vmxnet3 solía llamarse ens192 o ens160; en Proxmox, con VirtIO en la ranura PCI que le toca, será ens18 o similar. Si /etc/network/interfaces, Netplan o NetworkManager tienen el nombre viejo escrito, la máquina arranca sin red. Corrígelo desde la consola noVNC de Proxmox.VirtIO SCSI single, tarjeta con modelo VirtIO. Si el initramfs lleva los módulos (punto 5 de la preparación), arranca sin más./etc/fstab por UUID no se entera del cambio. Si alguna entrada apunta a /dev/sdX a pelo, cámbiala a UUID o a /dev/disk/by-id.apt install qemu-guest-agent en Debian y derivados, dnf install qemu-guest-agent en la familia RHEL, y activa el servicio. Después, la casilla del agente en Options de la VM.open-vm-tools y cualquier regla de udev que fijara nombres de interfaz por la MAC antigua.Estos son los valores que Proxmox recomienda en su propia documentación de migración, y que el asistente no aplica todos porque prioriza que la máquina arranque:
| Ajuste | Valor recomendado | Por qué |
|---|---|---|
| Tipo de CPU | host si el clúster es homogéneo; x86-64-v2-AES o v3 si no | Rendimiento máximo, o migración en vivo posible entre nodos distintos. |
| Controlador SCSI | VirtIO SCSI single | Un controlador por disco y permite IO thread. |
| Disco | Bus SCSI, Discard activado, IO Thread activado | TRIM hacia el almacenamiento con thin provisioning y E/S en hilo aparte. |
| Red | Modelo VirtIO | Menor sobrecarga que cualquier tarjeta emulada. |
| Memoria | Ballooning Device activado | Aunque no vayas a usar balloon, es lo que da a Proxmox las métricas de memoria del invitado. |
| Agente | QEMU Guest Agent instalado y activado | Apagado limpio, IP visible en el panel y copias consistentes. |
Si vienes de un vSphere con vMotion, DRS y HA, la parte de clúster tiene su propia guía: alta disponibilidad en Proxmox y Ceph como almacenamiento hiperconvergente.
Con cinco máquinas el asistente gráfico es cómodo. Con cincuenta te interesa la consola. El equivalente exacto del asistente es qm import, disponible desde el mismo origen ESXi que ya tienes conectado:
# El siguiente ID libre del clúster
pvesh get /cluster/nextid
# Listar lo que ve el origen ESXi (la ruta es la que necesita qm import)
pvesm list esxi-lab
# Importar en frío al pool ZFS, con los ajustes recomendados
qm import 120 esxi-lab:ha-datacenter/datastore1/web-01/web-01.vmx \
--storage local-zfs --scsihw virtio-scsi-single --cpu x86-64-v2-AES
# Ver el comando resultante sin ejecutar nada
qm import 120 esxi-lab:ha-datacenter/datastore1/web-01/web-01.vmx \
--storage local-zfs --dryrun
# Importación en vivo desde consola
qm import 121 esxi-lab:ha-datacenter/datastore1/app-01/app-01.vmx \
--storage local-zfs --live-import 1
qm import acepta las mismas opciones que qm create (--net0, --memory, --cores, --bios, --agent…), así que puedes fijar de antemano todo lo que en el asistente tocarías a mano. La forma de la ruta es siempre <id-del-origen>:ha-datacenter/<datastore>/<carpeta-de-la-vm>/<vm>.vmx. Con esto, un bucle de Bash sobre un fichero con la lista de máquinas es una tarde de trabajo, y como corre por la API, lo mismo vale para Ansible o para un runbook en Terraform u OpenTofu que cree después lo que rodea a cada máquina.
Lo que sí hay que respetar es el ritmo, porque el cuello de botella no está en Proxmox:
esxi-folder-fuse limita por su cuenta a cuatro conexiones paralelas y reintenta con calma cuando ESXi le corta.503 Service Unavailable, en ESXi 7.0 se puede subir Config.HostAgent.vmacore.soap.maxSessionCount desde Host → Manage → System → Advanced Settings; en 6.5 y 6.7, <maxSessionCount> en /etc/vmware/hostd/config.xml y reiniciar hostd.Y el orden importa tanto como el ritmo. Agrupa las máquinas por aplicación, no por orden alfabético, para que las que se hablan entre sí crucen el mismo día y no pases semanas con tráfico saltando entre las dos plataformas. Lo desarrollamos en las fases de un proyecto que sale bien.
Hay cuatro situaciones en las que el asistente no sirve o no es la mejor opción, y cada una tiene su salida.
Discos en vSAN. El importador no puede leerlos. La solución es mover los discos de la VM a un datastore VMFS o NFS con Storage vMotion y, ya ahí, importar con normalidad.
ESXi anterior a 6.5 o una API que no responde. Queda el camino clásico: exportar con ovftool y traerlo con qm importovf:
./ovftool vi://[email protected]/web-01 /mnt/export/
qm importovf 130 /mnt/export/web-01/web-01.ovf local-zfs --format qcow2
Al terminar hay que añadir la tarjeta de red y, en Windows, dejar el disco en SATA o IDE hasta instalar VirtIO, igual que arriba.
Un NFS que ven los dos. Si el datastore de VMware está en un NAS que Proxmox también puede montar, no hace falta ni ESXi ni exportación: qm disk import 131 web-01.vmdk local-zfs desde la ruta montada convierte el disco directamente. Y hay una variante con parada mínima documentada por Proxmox: crear la VM en Proxmox con un disco vmdk sobre ese mismo NFS, sustituir el descriptor por el de VMware apuntando al -flat.vmdk original, arrancar la máquina en Proxmox leyendo del disco de VMware y mover el disco al almacenamiento definitivo con la máquina encendida. Es más manual, pero la VM solo está apagada lo que tarda en encenderse al otro lado. La única regla es sagrada: nunca la misma VM encendida en VMware y en Proxmox a la vez.
Ya tienes copias con Veeam. Desde Veeam Backup & Replication 12.2 se puede restaurar una copia de una VM de vSphere directamente como VM de Proxmox VE. Si el parque ya está en Veeam, es una forma de migrar sin tocar los hosts ESXi para nada, y de paso de comprobar que las copias restauran. Lo tratamos en nuestro servicio de backup con Veeam.
Una máquina recién importada no tiene copia en ningún sitio: la de VMware ya no vale y la de Proxmox todavía no existe. Antes de dar la migración de esa VM por cerrada, métela en un trabajo de copia hacia Proxmox Backup Server y restáurala una vez en un ID de prueba. Es el único momento del proyecto en el que tienes las dos plataformas y todo el tiempo del mundo para comprobar que la copia funciona. Si la máquina lleva una base de datos, mira además cómo conseguir copias consistentes con el agente.
Y cuando la última VM esté en Proxmox y verificada, no apagues el ESXi al día siguiente. Déjalo una o dos semanas como red de seguridad, sin máquinas encendidas, y solo entonces desmóntalo.
¿Se puede migrar de VMware a Proxmox sin exportar a OVF?
Sí. Desde Proxmox VE 8.2 (abril de 2024) el asistente de importación conecta con la API del host ESXi, lista sus máquinas y las importa con la configuración traducida y los discos convertidos al vuelo. No hace falta ovftool, ni copiar VMDK a mano, ni qemu-img. El método OVF sigue disponible para hosts antiguos o sin acceso a la API.
¿Qué versiones de ESXi soporta el asistente de importación de Proxmox? Proxmox lo tiene probado con ESXi 6.5, 6.7, 7.0 y 8.0. Se conecta al host directamente; a través de vCenter funciona, pero entre 5 y 10 veces más lento. Si vienes de vSphere 9, prueba antes con una VM de laboratorio, porque no está en la lista oficial de versiones probadas.
¿Hay que desinstalar VMware Tools antes de migrar a Proxmox?
Sí, y con la máquina todavía en ESXi. Una vez en Proxmox el desinstalador falla porque no detecta el hipervisor de VMware, y hay que limpiar drivers y servicios a mano. En Linux basta con quitar open-vm-tools.
¿Por qué mi Windows migrado a Proxmox da pantalla azul INACCESSIBLE_BOOT_DEVICE?
Porque el disco de arranque está en un bus VirtIO cuyo driver Windows no ha activado todavía. Windows solo carga el driver de un controlador de arranque cuando ha visto un disco en él. Vuelve a conectar el disco como SATA, añade un disco temporal de 1 GB en SCSI, arranca, deja que instale el driver vioscsi, apaga, quita el temporal y reconecta el disco de sistema como SCSI.
¿Qué es la importación en vivo (live import) de Proxmox? Una opción del asistente que arranca la VM en Proxmox nada más empezar, leyendo del ESXi los bloques que el sistema necesita y copiando el resto del disco en segundo plano. Reduce la parada al tiempo de arranque, pero si la importación falla se pierde todo lo escrito en la VM desde que empezó. Proxmox recomienda probarla antes y no usarla sobre redes lentas o con errores.
¿Cuántas máquinas puedo importar a la vez desde ESXi? Proxmox aconseja que no haya más de cuatro discos importándose al mismo tiempo, por el límite de conexiones de la API de ESXi (que bloquea a todos los clientes unos 30 segundos cuando se supera) y por la memoria que consume cada disco en el nodo, 1 GiB de caché de lectura adelantada. Es mejor encadenar importaciones que lanzarlas en paralelo.
¿Se pueden importar máquinas que están en vSAN? No directamente. El asistente no puede leer discos en vSAN. Hay que moverlos antes con Storage vMotion a un datastore VMFS o NFS y después importar. Lo mismo pasa con los discos cifrados por política de almacenamiento: primero se quita la política.
¿Existe un comando para importar desde ESXi sin la interfaz gráfica?
Sí, qm import <id> <origen>:ha-datacenter/<datastore>/<vm>/<vm>.vmx --storage <destino>, con las mismas opciones que qm create, y --dryrun para ver el comando resultante sin ejecutarlo. Es lo que permite automatizar una migración de decenas de máquinas.
qm, subcomando qm import y sus opciones --dryrun y --live-import.¿Tienes un vSphere que renovar y un parque de máquinas que no puede parar? Migramos de VMware a Proxmox por olas, con el asistente cuando vale y con las otras vías cuando no, y operamos el clúster después. Mira cómo hacemos las migraciones o cuéntanos tu caso.