
Sacar una VM de VirtualBox o de VMware y ponerla en XCP-ng (o en XenServer) suele convertirse en un ritual: exportar OVA, convertir el disco a mano, pelearse con el xe. El ova2xva es un CLI en Go (MIT) que hace el camino de ida y el de vuelta en un único binario: convierte OVA o disco suelto a XVA, valida, importa mediante XAPI y, si hace falta, devuelve un OVA portátil. Sin el binario xe en el camino.
El código y las releases están en github.com/jniltinho/ova2xva. La versión actual de los binarios oficiales es la v0.4.0 (1 de agosto de 2026).
Qué hace
| Comando | Función |
|---|---|
convert |
OVA o disco suelto (.vmdk, .qcow2, .vhdx…) → .xva (compresión zstd por defecto) |
to-ova |
El inverso: .xva o disco → .ova (OVF 1.0 + VMDK stream-optimized + manifiesto SHA-256). Requiere qemu-img |
validate |
Comprueba estructura y SHA1 del .xva |
import |
Sube a XCP-ng/XenServer con HTTP PUT /import (XAPI) — sin xe |
La decodificación de VMDK, QCOW2 y VHDX es nativa en Go. El qemu-img entra como fallback y es obligatorio no to-ova (es el que genera el VMDK). VHD y VDI clásicos también pasan solo por qemu-img; .raw/.img van por copia directa.
En la práctica
# OVA do VirtualBox/VMware → XVA
ova2xva convert -o app.xva --name "App Server" app.ova
# Disco solto, sem OVA
ova2xva convert -o app.xva --name "App Server" --memory 4096 --vcpus 2 disk.vmdk
# Validar (opcional)
ova2xva validate app.xva
# Importar no XCP-ng e já ligar a VM
export OVA2XVA_HOST=xcp.example.com OVA2XVA_USER=root OVA2XVA_PASSWORD='...'
ova2xva import --start app.xva
# O caminho contrário: sair do Xen com um OVA portátil
ova2xva to-ova -o app.ova app.xva
Dos detalles que el README deja explícitos y que ahorran sorpresas:
- la extensión de salida de
convertes siempre.xva—-o foo.xva.zstse convierte enfoo.xva; - el disco del guest se expande a raw en el tamaño virtual en el directorio de trabajo. Un OVA de 5 GB con disco de 100 GB necesita ~100 GB temporales más el XVA final.
Instalación
Por el binario de la release (Linux amd64):
curl -LO https://github.com/jniltinho/ova2xva/releases/download/v0.4.0/ova2xva_0.4.0_linux_amd64.tar.gz
tar -xzf ova2xva_0.4.0_linux_amd64.tar.gz
sudo install -m 755 ova2xva /usr/local/bin/ova2xva
ova2xva version
O compilando — Go 1.22+ y qemu-utils (el paquete Debian/Ubuntu que trae el qemu-img):
sudo apt install golang-go qemu-utils
git clone https://github.com/jniltinho/ova2xva
cd ova2xva && make build # → dist/ova2xva
Cuándo usar
- Entrar en Xen a partir de un OVA de VirtualBox/VMware, o de un disco suelto, sin montar un pipeline de
qemu-img+xe vm-import; - Salir de Xen con
to-ovapara copia de seguridad portátil o para llevar la VM a otro hipervisor; - Importar desde cualquier Linux con red hasta el host — el
importhabla XAPI, no necesita elxeinstalado en la estación.
No sustituye a una herramienta de orquestación como Xen Orchestra. Es el conversor + importador de un archivo. La historia más amplia del hipervisor está en La historia de Xen y, en el escritorio KVM, en La historia de Proxmox.
Bugs y PRs
El proyecto es MIT, de Nilton Oliveira. Prueba con VMs reales, abre una incidencia con el caso límite y, si te sirve, deja una estrella: github.com/jniltinho/ova2xva.