{"id":309,"date":"2026-09-05T19:15:39","date_gmt":"2026-09-05T22:15:39","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/ova2xva\/"},"modified":"2026-09-08T11:40:31","modified_gmt":"2026-09-08T14:40:31","slug":"ova2xva","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/ova2xva\/","title":{"rendered":"ova2xva: migre VMs do VMware\/VirtualBox para XCP-ng com um comando"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro convertendo um pacote OVA em XVA para importar no XCP-ng\" src=\"\/wp-content\/uploads\/2026\/09\/ova2xva-v4.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Tirar uma VM do <a href=\"\/en\/2026\/09\/a-historia-do-virtualbox\/\">VirtualBox<\/a> ou do VMware e p\u00f4r no <a href=\"\/en\/2026\/09\/a-historia-do-xcp\/\">XCP-ng<\/a> (ou no <a href=\"\/en\/2026\/09\/a-historia-do-xenserver\/\">XenServer<\/a>) costuma virar ritual: exportar OVA, converter disco na m\u00e3o, brigar com o <code data-no-translation=\"\">xe<\/code>. O <strong>ova2xva<\/strong> \u00e9 um CLI em <strong>Go<\/strong> (MIT) que faz o caminho de ida e o de volta num bin\u00e1rio s\u00f3 \u2014 converte OVA ou disco solto para XVA, valida, importa via XAPI e, se precisar, devolve um OVA port\u00e1til. Sem o bin\u00e1rio <code data-no-translation=\"\">xe<\/code> no caminho.<\/p>\n<p>O c\u00f3digo e as releases est\u00e3o em <a href=\"https:\/\/github.com\/jniltinho\/ova2xva\">github.com\/jniltinho\/ova2xva<\/a>. A vers\u00e3o atual das bin\u00e1rias oficiais \u00e9 a <strong>v0.4.0<\/strong> (1\u00ba de agosto de 2026).<\/p>\n<h2>O que ela faz<\/h2>\n<table>\n<thead>\n<tr>\n<th>Command<\/th>\n<th>Fun\u00e7\u00e3o<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code data-no-translation=\"\">convert<\/code><\/td>\n<td>OVA ou disco solto (<code data-no-translation=\"\">.vmdk<\/code>, <code data-no-translation=\"\">.qcow2<\/code>, <code data-no-translation=\"\">.vhdx<\/code>\u2026) \u2192 <code data-no-translation=\"\">.xva<\/code> (compress\u00e3o <code data-no-translation=\"\">zstd<\/code> por padr\u00e3o)<\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">to-ova<\/code><\/td>\n<td>O inverso: <code data-no-translation=\"\">.xva<\/code> ou disco \u2192 <code data-no-translation=\"\">.ova<\/code> (OVF 1.0 + VMDK stream-optimized + manifesto SHA-256). Exige <code data-no-translation=\"\">qemu-img<\/code><\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">validate<\/code><\/td>\n<td>Checa estrutura e SHA1 do <code data-no-translation=\"\">.xva<\/code><\/td>\n<\/tr>\n<tr>\n<td><code data-no-translation=\"\">import<\/code><\/td>\n<td>Sobe para o XCP-ng\/XenServer com <code data-no-translation=\"\">HTTP PUT \/import<\/code> (XAPI) \u2014 sem <code data-no-translation=\"\">xe<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>O decode de VMDK, QCOW2 e VHDX \u00e9 <strong>nativo em Go<\/strong>. O <code data-no-translation=\"\">qemu-img<\/code> entra como fallback e \u00e9 <strong>obrigat\u00f3rio<\/strong> no <code data-no-translation=\"\">to-ova<\/code> (\u00e9 ele quem gera o VMDK). VHD e VDI cl\u00e1ssicos tamb\u00e9m passam s\u00f3 pelo <code data-no-translation=\"\">qemu-img<\/code>; <code data-no-translation=\"\">.raw<\/code>\/<code data-no-translation=\"\">.img<\/code> v\u00e3o por c\u00f3pia direta.<\/p>\n<h2>Na pr\u00e1tica<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># OVA do VirtualBox\/VMware \u2192 XVA\nova2xva convert -o app.xva --name \"App Server\" app.ova\n\n# Disco solto, sem OVA\nova2xva convert -o app.xva --name \"App Server\" --memory 4096 --vcpus 2 disk.vmdk\n\n# Validar (opcional)\nova2xva validate app.xva\n\n# Importar no XCP-ng e j\u00e1 ligar a VM\nexport OVA2XVA_HOST=xcp.example.com OVA2XVA_USER=root OVA2XVA_PASSWORD='...'\nova2xva import --start app.xva\n\n# O caminho contr\u00e1rio: sair do Xen com um OVA port\u00e1til\nova2xva to-ova -o app.ova app.xva<\/code><\/pre>\n<p>Dois detalhes que o README deixa expl\u00edcitos e que poupam surpresa:<\/p>\n<ul>\n<li>a extens\u00e3o de sa\u00edda do <code data-no-translation=\"\">convert<\/code> \u00e9 <strong>sempre<\/strong> <code data-no-translation=\"\">.xva<\/code> \u2014 <code data-no-translation=\"\">-o foo.xva.zst<\/code> vira <code data-no-translation=\"\">foo.xva<\/code>;<\/li>\n<li>o disco do guest \u00e9 expandido para <strong>raw no tamanho virtual<\/strong> no diret\u00f3rio de trabalho. Um OVA de 5 GB com disco de 100 GB precisa de ~100 GB tempor\u00e1rios mais o XVA final.<\/li>\n<\/ul>\n<h2>Installing<\/h2>\n<p>Pelo bin\u00e1rio da release (Linux amd64):<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">curl -LO https:\/\/github.com\/jniltinho\/ova2xva\/releases\/download\/v0.4.0\/ova2xva_0.4.0_linux_amd64.tar.gz\ntar -xzf ova2xva_0.4.0_linux_amd64.tar.gz\nsudo install -m 755 ova2xva \/usr\/local\/bin\/ova2xva\nova2xva version<\/code><\/pre>\n<p>Ou compilando \u2014 Go 1.22+ e <code data-no-translation=\"\">qemu-utils<\/code> (o pacote Debian\/Ubuntu que traz o <code data-no-translation=\"\">qemu-img<\/code>):<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">sudo apt install golang-go qemu-utils\ngit clone https:\/\/github.com\/jniltinho\/ova2xva\ncd ova2xva &amp;&amp; make build    # \u2192 dist\/ova2xva<\/code><\/pre>\n<h2>When to use<\/h2>\n<ul>\n<li><strong>Entrar no Xen<\/strong> a partir de um OVA do VirtualBox\/VMware, ou de um disco solto, sem montar um pipeline de <code data-no-translation=\"\">qemu-img<\/code> + <code data-no-translation=\"\">xe vm-import<\/code>;<\/li>\n<li><strong>Sair do Xen<\/strong> with <code data-no-translation=\"\">to-ova<\/code> para backup port\u00e1til ou para levar a VM a outro hipervisor;<\/li>\n<li><strong>Importar de qualquer Linux<\/strong> com rede at\u00e9 o host \u2014 o <code data-no-translation=\"\">import<\/code> fala XAPI, n\u00e3o precisa do <code data-no-translation=\"\">xe<\/code> instalado na esta\u00e7\u00e3o.<\/li>\n<\/ul>\n<p>N\u00e3o \u00e9 substituto de uma ferramenta de orquestra\u00e7\u00e3o como o Xen Orchestra. \u00c9 o conversor + importador de um arquivo. A hist\u00f3ria maior do hipervisor est\u00e1 em <a href=\"\/en\/2026\/09\/a-historia-do-xen\/\">A hist\u00f3ria do Xen<\/a> e, no desktop KVM, em <a href=\"\/en\/2026\/09\/a-historia-do-proxmox\/\">A hist\u00f3ria do Proxmox<\/a>.<\/p>\n<h2>Bugs e PRs<\/h2>\n<p>O projeto \u00e9 MIT, de <a href=\"https:\/\/github.com\/jniltinho\">Nilton Oliveira<\/a>. Teste com VMs reais, abra issue com o caso de borda e, se servir, deixe uma estrela: <a href=\"https:\/\/github.com\/jniltinho\/ova2xva\">github.com\/jniltinho\/ova2xva<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Tirar uma VM do VirtualBox ou do VMware e p\u00f4r no XCP-ng (ou no XenServer) costuma virar ritual: exportar OVA, converter disco na m\u00e3o, brigar com o xe. O ova2xva \u00e9 um CLI em Go (MIT) que faz o caminho de ida e o de volta num bin\u00e1rio s\u00f3 \u2014 converte OVA ou disco solto &#8230; <a title=\"ova2xva: migre VMs do VMware\/VirtualBox para XCP-ng com um comando\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/ova2xva\/\" aria-label=\"Read more about ova2xva: migre VMs do VMware\/VirtualBox para XCP-ng com um comando\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,2,120],"tags":[8,31,140,138,139,136,137],"class_list":["post-309","post","type-post","status-publish","format-standard","hentry","category-infra","category-linux","category-servidores","tag-cli","tag-golang","tag-virtualbox","tag-virtualizacao","tag-vmware","tag-xcp-ng","tag-xenserver"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/309","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=309"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/309\/revisions"}],"predecessor-version":[{"id":1422,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/309\/revisions\/1422"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=309"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=309"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=309"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}