ova2xva: migre VMs do VMware/VirtualBox para XCP-ng com um comando

Mascote do LinuxPro convertendo um pacote OVA em XVA para importar no XCP-ng

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.zst vira foo.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 con to-ova para backup portátil ou para levar a VM a outro hipervisor;
  • Importar de qualquer Linux com rede até o host — o import fala XAPI, não precisa do xe instalado 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.