
Tirar uma VM do VirtualBox ou do VMware e pôr no XCP-ng (ou no XenServer) costuma virar ritual: exportar OVA, converter disco na mão, brigar com o xe. O ova2xva é um CLI em Go (MIT) que faz o caminho de ida e o de volta num binário só — converte OVA ou disco solto para XVA, valida, importa via XAPI e, se precisar, devolve um OVA portátil. Sem o binário xe no caminho.
O código e as releases estão em github.com/jniltinho/ova2xva. A versão atual das binárias oficiais é a v0.4.0 (1º de agosto de 2026).
O que ela faz
| Comando | Função |
|---|---|
convert |
OVA ou disco solto (.vmdk, .qcow2, .vhdx…) → .xva (compressão zstd por padrão) |
to-ova |
O inverso: .xva ou disco → .ova (OVF 1.0 + VMDK stream-optimized + manifesto SHA-256). Exige qemu-img |
validate |
Checa estrutura e SHA1 do .xva |
import |
Sobe para o XCP-ng/XenServer com HTTP PUT /import (XAPI) — sem xe |
O decode de VMDK, QCOW2 e VHDX é nativo em Go. O qemu-img entra como fallback e é obrigatório no to-ova (é ele quem gera o VMDK). VHD e VDI clássicos também passam só pelo qemu-img; .raw/.img vão por cópia direta.
Na prática
# 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
Dois detalhes que o README deixa explícitos e que poupam surpresa:
- a extensão de saída do
converté sempre.xva—-o foo.xva.zstvirafoo.xva; - o disco do guest é expandido para raw no tamanho virtual no diretório de trabalho. Um OVA de 5 GB com disco de 100 GB precisa de ~100 GB temporários mais o XVA final.
Instalando
Pelo binário da 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
Ou compilando — Go 1.22+ e qemu-utils (o pacote Debian/Ubuntu que traz o 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 no Xen a partir de um OVA do VirtualBox/VMware, ou de um disco solto, sem montar um pipeline de
qemu-img+xe vm-import; - Sair do Xen com
to-ovapara backup portátil ou para levar a VM a outro hipervisor; - Importar de qualquer Linux com rede até o host — o
importfala XAPI, não precisa doxeinstalado na estação.
Não é substituto de uma ferramenta de orquestração como o Xen Orchestra. É o conversor + importador de um arquivo. A história maior do hipervisor está em A história do Xen e, no desktop KVM, em A história do Proxmox.
Bugs e PRs
O projeto é MIT, de Nilton Oliveira. Teste com VMs reais, abra issue com o caso de borda e, se servir, deixe uma estrela: github.com/jniltinho/ova2xva.