{
"meta": {
"title": "Importar VM desde OVA / OVF | ProxMenux Documentation",
"description": "Importa una VM de VMware ESXi / Workstation / Fusion / VirtualBox / ProxMenux en Proxmox VE. Extrae OVA automáticamente, parsea los metadatos OVF, crea la VM e importa cada disco al formato nativo del almacenamiento (qcow2 / raw).",
"ogTitle": "Importar VM desde OVA / OVF | ProxMenux Documentation",
"ogDescription": "Trae VMs de exportaciones de VMware, VirtualBox o ProxMenux a Proxmox. Los discos se convierten automáticamente al formato nativo del almacenamiento."
},
"header": {
"title": "Importar VM desde OVA / OVF",
"description": "Importa un paquete OVA / OVF en Proxmox VE: extrae archivos OVA, parsea el descriptor OVF en busca de vCPU / memoria / recuento de NICs y referencias a discos, después crea la VM e importa cada disco vía qm importdisk al almacenamiento elegido. Compatible con exportaciones de VMware (ESXi / Workstation / Fusion), VirtualBox y del propio ProxMenux.",
"section": "Utilidades"
},
"intro": {
"title": "Qué hace",
"body": "Coloca una VM completa en Proxmox desde un paquete portable. Tras la importación, la VM está lista para arrancar — pero se recomiendan unos retoques post-importación (modelo de NIC, firmware, validación del tipo de SO) por rendimiento y compatibilidad."
},
"picker": {
"heading": "Selector de archivo",
"intro": "Al arrancar, el script ofrece dos directorios preset o una ruta manual:",
"items": [
"/var/lib/vz/dump — el directorio por defecto de backups vzdump de Proxmox.",
"/var/lib/vz/template/iso — útil si subiste el OVA por sftp ahí.",
"Ruta manual — para archivos OVA / OVF en cualquier otro sitio del host."
],
"outro": "Después lista todos los archivos .ova y .ovf en el directorio elegido.",
"imageAlt": "Diálogo selector de archivo para importar VM"
},
"flow": {
"heading": "Cómo funciona la importación",
"nodes": [
{
"label": "OVA / OVF de entrada",
"detail": ".ova → tar xf a\n /tmp/.proxmenux-import-*\n.ovf → uso en sitio",
"variant": "source"
},
{
"label": "Parseo + diálogos",
"detail": "AWK lee OVF\n(nombre, vCPU, RAM, NICs,\ndiscos). El usuario elige\nVMID / almacenamiento / bridge",
"variant": "bridge"
},
{
"label": "qm create + importdisk",
"detail": "qm create $VMID\nqm importdisk\n(VMDK → qcow2)\nqm set --scsiN",
"variant": "target"
}
]
},
"ovf": {
"heading": "Parseo de OVF",
"intro": "Un parser gawk lee el descriptor OVF y extrae los metadatos de la VM. El parser usa la forma de 3 argumentos de match(), específica de gawk (mawk — el awk por defecto en Debian / Proxmox — no la soporta). En la primera importación, el script instala automáticamente gawk vía el par canónico ensure_repositories + install_single_package si falta; las importaciones siguientes arrancan al instante. Campos extraídos:",
"headerField": "Campo",
"headerSource": "Origen en OVF",
"headerDefault": "Valor por defecto si falta",
"rows": [
{
"field": "Nombre de VM",
"source": " (primera coincidencia)",
"default": "imported-vm"
},
{
"field": "Número de vCPUs",
"source": "RASD ResourceType 3 → VirtualQuantity",
"default": "1"
},
{
"field": "Memoria (MiB)",
"source": "RASD ResourceType 4 → VirtualQuantity",
"default": "1024"
},
{
"field": "Número de NICs",
"source": "recuento de ResourceType 10",
"default": "1"
},
{
"field": "Tipo de SO",
"source": "/Linux/ o /Windows/ en la descripción",
"default": "other"
},
{
"field": "Referencias a discos",
"source": "atributos href acabados en .vmdk / .qcow2 / .img / .raw",
"default": "ninguno (la importación se aborta)"
}
]
},
"memWarn": {
"title": "Ambigüedad de unidad de memoria",
"body": "El parser asume MiB. Si el OVF declara la memoria en GB (p. ej. algunas exportaciones de VMware lo hacen), la VM importada tendrá 1/1024 de la RAM prevista. Tras la importación, contrasta qm config $VMID | grep memory contra la RAM documentada de la VM origen y ajusta con qm set $VMID --memory <MiB> si está desviada por un factor de 1024 o 1024²."
},
"dialog": {
"heading": "Flujo de diálogos de importación",
"items": [
"VMID — por defecto el siguiente disponible (pvesh get /cluster/nextid).",
"Nombre de VM — por defecto el nombre parseado del OVF; puedes sobrescribirlo.",
"Almacenamiento de destino — menú con todos los almacenamientos con contenido images (de pvesm status -content images).",
"Bridge de red — menú de bridges (de ip link show type bridge); autoselecciona si solo hay uno; por defecto vmbr0.",
"Confirmación — diálogo de resumen con VMID, nombre, vCPU, memoria, NICs, almacenamiento, bridge y la lista de discos a importar. Cancelar aquí = no cambia nada."
]
},
"create": {
"heading": "Creación de la VM",
"intro": "Tras la confirmación, el script ejecuta:",
"code": "qm create $VMID \\\n --name \"$NAME\" \\\n --memory $MEMORY \\\n --cores $VCPU \\\n --ostype $OSTYPE \\\n --scsihw lsi \\\n --net0 e1000,bridge=$BRIDGE\n\n# For each additional NIC:\nqm set $VMID --netN e1000,bridge=$BRIDGE",
"outro": "El controlador SCSI por defecto es lsi (LSI Logic) por compatibilidad con VMDK. Las NICs por defecto son e1000 (compatibilidad universal) en el bridge elegido."
},
"diskLoop": {
"heading": "Bucle de importación de discos",
"intro": "Para cada referencia de disco en el OVF:",
"items": [
"qm importdisk $VMID $disk_path $STORAGE — convierte el VMDK al formato nativo del almacenamiento (p. ej. qcow2 en local-lvm, raw en ZFS) y crea una entrada unusedN: en la configuración de la VM.",
"El script busca con grep en la configuración la referencia unusedN recién creada.",
"qm set $VMID --scsiN $unused_disk — asocia el disco como scsi0, scsi1, …",
"qm set $VMID --delete unusedN — elimina el marcador unused ya redundante."
],
"outro": "El arranque se fija en el primer disco SCSI: qm set $VMID --boot c --bootdisk scsi0."
},
"postImport": {
"heading": "Retoques recomendados tras la importación",
"intro": "La importación usa deliberadamente ajustes de mínimo común denominador para maximizar la probabilidad de que la VM arranque a la primera. Una vez confirmes que arranca, pasa a valores por defecto mejores vía la UI de Proxmox o CLI:",
"headerSetting": "Ajuste",
"headerDefault": "Por defecto tras importar",
"headerRecommended": "Recomendado (si el guest lo soporta)",
"rows": [
{
"setting": "Modelo de NIC",
"default": "e1000",
"recommended": "VirtIO (mucho más rápido, requiere driver en el guest)"
},
{
"setting": "Controlador SCSI",
"default": "LSI",
"recommended": "VirtIO SCSI single (Linux moderno + Windows con drivers VirtIO)"
},
{
"setting": "Firmware (BIOS / UEFI)",
"default": "Por defecto de Proxmox (BIOS)",
"recommended": "Igualar al firmware de la VM origen (desigualados = no arranca)"
},
{
"setting": "QEMU guest agent",
"default": "Off",
"recommendedRich": "On + instalar qemu-guest-agent en el guest (mejores backups, reporte de IP)"
},
{
"setting": "Tipo de SO",
"default": "l26 / win10 / other (heurística)",
"recommended": "Verificar contra el SO real del guest"
},
{
"setting": "Display",
"default": "Default",
"recommended": "VirtIO-GPU o SPICE (mejor rendimiento de consola)"
}
]
},
"fwWarn": {
"title": "Desigualdad de firmware = no arranca",
"body": "Si la VM origen era UEFI pero Proxmox la crea como BIOS (o viceversa), el guest no encontrará un disco arrancable. Comprueba el OVF o los ajustes de la VM original buscando FirmwareType / firmware y configura lo mismo en Proxmox: qm set $VMID --bios ovmf para UEFI; por defecto es seabios para BIOS."
},
"notImported": {
"heading": "Qué NO se importa",
"items": [
"Bridges específicos de NIC — solo el recuento. Todas las NICs aterrizan en el bridge que elegiste al importar.",
"Modelo de NIC — por defecto e1000.",
"Tipo de firmware BIOS / UEFI — por defecto el de Proxmox (BIOS).",
"Configuración de passthrough PCI.",
"TPM (vTPM).",
"Drives de cloud-init.",
"Snapshots — solo el estado actual.",
"Dispositivos USB / serie / paralelo declarados en el OVF.",
"Tags de VM / notas / arranque al inicio."
]
},
"troubleshoot": {
"heading": "Solución de problemas",
"orphanTitle": "La VM se creó pero la importación de discos falló — VM huérfana en el sistema",
"orphanIntro": "Limitación conocida. El script no limpia automáticamente una importación parcial. Destruye la huérfana con:",
"orphanCode": "qm destroy $VMID --destroy-unreferenced-disks 1",
"orphanOutro": "Después corrige la causa raíz (probablemente espacio en disco en el almacenamiento de destino) y vuelve a importar.",
"memTitle": "La VM importada tiene 8 MB de RAM (o 8 TB)",
"memIntro": "Ambigüedad de unidad de memoria en el parser de OVF. Desviado por un factor de 1024 → el OVF usó GB en lugar de MiB. Arreglo:",
"memCode": "qm set $VMID --memory 8192 # 8 GiB",
"bootTitle": "La VM importada no arranca — \"No bootable device\"",
"bootIntro": "Causa más común: desigualdad BIOS / UEFI. La VM era UEFI pero Proxmox la creó como BIOS. Configura el firmware coincidente:",
"bootCode": "qm set $VMID --bios ovmf # UEFI\n# also add an EFI disk for the EFI vars:\nqm set $VMID --efidisk0 $STORAGE:1,format=qcow2,efitype=4m,pre-enrolled-keys=1",
"bootOutro": "Segunda más común: el orden de arranque apunta a scsi0 pero el disco real del SO es scsi1. Edita el orden de arranque en la pestaña VM Options.",
"bsodTitle": "Una VM Windows exportada desde VMware se importa pero hace BSOD al primer arranque",
"bsodBody": "Windows es sensible a cambios de controlador de disco. Bien: (a) instala los drivers VirtIO antes de exportar desde VMware, o (b) mantén el controlador SCSI como lsi (el valor por defecto) y solo cambia a VirtIO SCSI tras que el guest arranque y puedas instalar los drivers VirtIO en Windows.",
"zeroTitle": "El parser de OVF reporta 0 discos",
"zeroBody": "El descriptor OVF usa un estilo inusual de referencia a disco. Abre el .ovf en un editor de texto y confirma que cada disco tiene una entrada <File ovf:href=\"...vmdk\" ...>. Si la extensión del archivo es inusual (p. ej. solo .dat), renómbralo a .vmdk y actualiza la referencia en el OVF, después vuelve a ejecutar.",
"awkTitle": "awk: syntax error at or near , — el parser falla en cada OVA / OVF",
"awkIntro": "El parser de OVF usa sintaxis específica de gawk (match() con 3 argumentos) que mawk — el awk por defecto en Debian / Proxmox — no soporta. Versiones recientes del script instalan automáticamente gawk en el primer uso vía el par canónico ensure_repositories + install_single_package; si estás ejecutando una copia más antigua, instálalo manualmente:",
"awkCode": "apt-get install -y gawk",
"awkOutro": "Después vuelve a ejecutar la importación.",
"netTitle": "La red no funciona tras el primer arranque",
"netBody": "El modelo de NIC en Proxmox (e1000) puede no coincidir con el que tiene drivers el SO guest, o el bridge que elegiste no es el correcto. Desde la pestaña Hardware de la VM en la UI de Proxmox: cambia Network Device → Model. Comprueba también ip a dentro del guest — a veces la interfaz aparece con un nombre distinto (eth0 vs ens18) y la configuración de red del guest sigue referenciando la antigua."
},
"files": {
"heading": "Archivos implicados",
"code": "scripts/utilities/import_vm_ova_ovf.sh # this script\n/tmp/.proxmenux-import-*/ # temp extraction dir for OVA\n/etc/pve/nodes//qemu-server/.conf # created by qm create\n//-disk-. # disk images, format depends on storage"
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/utils/export-vm",
"label": "Exportar VM a OVA / OVF",
"tail": " — el compañero del viaje de ida y vuelta."
},
{
"href": "/docs/utils",
"label": "Resumen de Utilidades",
"tail": " — volver al resumen de la sección."
}
]
}
}