Como Converter Formatos de Imagem de Máquina Virtual

Introdução

Ao trabalhar com um servidor remoto na nuvem, você geralmente está lidando com uma máquina virtual: uma instância isolada e controlada de um sistema operacional inteiro que está em execução dentro de um cluster de servidores maior. Você também pode trabalhar com máquinas virtuais localmente em seu desktop, usando software como QEMU ou VirtualBox. Máquinas virtuais podem incluir uma interface de desktop completa ou apenas executar um servidor SSH para permitir conexões via terminal. Em ambos os casos, são tecnicamente semelhantes e fazem suposições semelhantes. Além de otimizações em larga escala na nuvem, a única diferença significativa entre os ambientes de virtualização está nos discos rígidos e opções de configuração da máquina virtual. Esses são chamados de imagens de máquinas virtuais e têm formatações diferentes entre os provedores.

Neste tutorial, você aprenderá como converter entre formatos de imagens de máquinas virtuais (incluindo qcow2, vdi, vhd e vmdk), para que você possa levar seus ambientes virtuais do seu desktop para a nuvem e vice-versa conforme necessário.

Pré-requisitos

Os comandos neste tutorial podem ser executados no Windows, macOS ou Linux, desde que você possa instalar o QEMU e o VirtualBox juntamente com suas ferramentas de linha de comando. Este tutorial fornece instruções de instalação usando o gerenciador de pacotes Homebrew. Você pode instalar o Homebrew no macOS, no Linux, ou no Windows sob WSL2.

Se estiver executando em uma instância DigitalOcean, você deve ter pelo menos 2 CPUs e 2GB de memória.

Também será necessário ter pelo menos 10GB de espaço livre para executar os comandos neste tutorial.

Observação: Se estiver usando macOS com um CPU Apple Silicon (fabricado em 2020 e posteriormente), você só poderá usar o QEMU e não o VirtualBox.

QEMU

O QEMU é o software de virtualização de código aberto mais poderoso e amplamente suportado. Ele roda em todas as principais plataformas (incluindo Windows, macOS, Linux e outros sistemas operacionais como Android) e é capaz tanto de virtualização quanto de emulação conforme necessário. Por exemplo, se você estiver executando uma imagem de servidor Linux em um desktop Windows (um caso de uso comum), ambas as plataformas compartilham uma arquitetura subjacente comum (Intel/AMD x86), então o QEMU pode alcançar desempenho total por meio da virtualização. Se você estiver usando o QEMU para misturar e combinar arquiteturas, por exemplo, executando Linux ou Windows x86 (como sistema operacional “host” ou “convidado”) com as arquiteturas ARM de macOS ou Android, o QEMU usará automaticamente a emulação para traduzir arquiteturas.

Comparado com a virtualização, a emulação geralmente não é usada em ambientes de produção porque adiciona uma penalidade significativa de desempenho. No entanto, o tratamento do QEMU da virtualização e emulação como praticamente equivalentes oferece importantes vantagens de compatibilidade, pois significa que os mesmos formatos de imagem e as mesmas ferramentas podem ser usados em todos os cenários.

O QEMU é um software de linha de comando e tem uma curva de aprendizado alta em comparação com software de virtualização de desktop como VMware ou VirtualBox devido ao grande número de opções com as quais as máquinas virtuais podem ser configuradas. Ele pode opcionalmente ser usado com interfaces gráficas de usuário como QtEmu no Windows ou Linux e UTM no macOS. Este tutorial fornecerá instruções de linha de comando para trabalhar com o QEMU.

Instalando o QEMU

Para instalar o QEMU, use o comando brew install do Homebrew:

  1. brew install qemu

Isso fornecerá toda a suíte de ferramentas e comandos do QEMU, incluindo o qemu-img, que é usado para converter imagens de máquinas virtuais na linha de comando. Verifique se você tem acesso ao comando qemu-img executando which qemu-img:

  1. which qemu-img
Output
/usr/local/bin/qemu-img

Observação: Você também pode instalar o QEMU no Windows usando seu instalador nativo, se preferir trabalhar no Windows sem o WSL2.

O QEMU fornece a maior parte da funcionalidade que você precisará neste tutorial. Você também pode instalar o VirtualBox, outro pacote de virtualização popular.

VirtualBox

O VirtualBox é um software de virtualização de código aberto fornecido pela Oracle. Ele suporta todos os sistemas operacionais x86 (Windows, Linux e macOS em computadores fabricados antes de 2020). Ele não suporta emulação ou arquiteturas não x86, tornando-o principalmente útil para executar o Linux no Windows e vice-versa. No entanto, também é mais fácil de usar do que o QEMU, fornece configurações padrão amplamente compatíveis e inclui uma interface de desktop por padrão.

Não fornece tanta funcionalidade de linha de comando quanto o QEMU, então geralmente é combinado com software de orquestração dedicado como o Vagrant para automatizar e reproduzir configurações de máquinas virtuais. No entanto, ele inclui a ferramenta de linha de comando VBoxManage, que pode ser usada para manipular algumas imagens de máquinas virtuais.

Instalando o VirtualBox

Para instalar o VirtualBox no macOS, use brew install com a flag --cask, pois o VirtualBox é distribuído como um pacote de aplicativo completo, que o Homebrew chama de cask:

  1. brew install --cask virtualbox

Para instalar o VirtualBox no Ubuntu ou distribuições Linux derivadas do Debian (incluindo WSL2), primeiro use apt update para atualizar suas fontes de pacotes, depois apt install:

  1. sudo apt update
  2. sudo apt install virtualbox

Para instalar o VirtualBox no Windows sem WSL2, consulte sua página de download.

Após instalar o VirtualBox, verifique se você tem acesso ao comando vboxmanage executando which vboxmanage:

  1. which vboxmanage
Output
​​/usr/local/bin/vboxmanage

Existem alternativas disponíveis ao QEMU e ao VirtualBox para virtualização. No entanto, a maioria delas é específica para plataformas (como o Hyper-V no Windows) ou projetada para uso em empresas de grande escala (como o VMware). Elas não serão abordadas diretamente neste tutorial, mas você converterá seus formatos de imagem nos seguintes passos.

Criando uma Imagem de Máquina Virtual usando o QEMU

Para demonstrar a conversão de imagens de máquinas virtuais, você pode começar criando uma imagem com o QEMU. Você pode pular esta seção se já tiver uma imagem para converter.

Use o comando qemu-img create com a flag -f qcow2 para criar uma imagem no formato padrão do QEMU, qcow2:

  1. qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G

Neste ponto, você terá criado uma imagem vazia de máquina virtual. Mesmo que a tenha nomeado como ubuntu-desktop-22.04.qcow2 e fornecido uma capacidade de 10G, neste momento ela não terá o Ubuntu 22.04 instalado nem será grande o suficiente para ocupar 10GB.

Output
Formatting 'ubuntu-desktop-22.04.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

As imagens do QEMU sempre ocuparão o mínimo possível de espaço em seu disco, refletindo ao mesmo tempo sua capacidade máxima declarada para qualquer software em execução dentro da máquina virtual. Neste caso, 10GB seria a capacidade que sua máquina virtual pensa ter disponível e o tamanho máximo para o qual a imagem da máquina virtual se expandirá automaticamente.

A typical next step would be to install Ubuntu 22.04 onto the virtual machine, using a Ubuntu 22.04 ISO. However, you can skip this step for this tutorial, as you won’t actually be working directly with this virtual machine. An ISO is another type of disk image that is usually read-only, and was historically written onto CD and DVD installation media, rather than an image of a writable hard disk. Other software exists for manipulating ISO images, such as mkisofs and dd. To learn more about installing Linux using QEMU, refer to the QEMU documentation.

Convertendo uma Imagem QEMU para Outro Formato

Depois de criar uma imagem de VM, você pode usar qemu-img convert para convertê-la para outros formatos. vdi é o formato de imagem padrão do VirtualBox. Por padrão, isso não apagará a imagem original da VM, apenas criará uma nova:

  1. qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi

A bandeira -f é usada para especificar o formato de entrada e o nome do arquivo de entrada. A bandeira -O é usada para especificar o formato de saída e o nome do arquivo de saída. Você também pode incluir a bandeira -p para mostrar uma barra de progresso, o que é útil ao converter imagens muito grandes. A imagem que você criou na última etapa será convertida instantaneamente, pois ainda não possui conteúdo. Você pode confirmar que criou ubuntu-desktop-22.04.vdi usando ls:

  1. ls ubuntu-desktop-22.04.vdi
Output
ubuntu-desktop-22.04.vdi

Outros formatos comuns incluem vmdk, usado principalmente pelo VMware, e vhd, usado principalmente pelo Hyper-V da Microsoft. Você também pode criar uma imagem “raw” se o seu software exigir, seguindo a próxima etapa.

Convertendo Outros Formatos de Máquina Virtual para QEMU

Se você tiver uma imagem no formato vdi, você pode usar o comando vboxmanage fornecido pelo VirtualBox para convertê-la:

  1. vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78

Observe que isso registrará automaticamente a imagem criada na configuração local do VirtualBox, o que pode ser inconveniente se você estiver tentando criar cópias transitórias. Talvez seja necessário remover manualmente quaisquer entradas novas da interface do VirtualBox se você registrar duplicatas inadvertidamente.

As imagens brutas de máquinas virtuais não são compactadas, então esse comando realmente criará um arquivo completo de 10GB, ao contrário do que ocorria anteriormente. Você pode convertê-lo de volta para o formato qcow2 para uso com o QEMU, invertendo a sintaxe da última etapa:

  1. qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2

Agora você pode excluir a imagem bruta para recuperar espaço em disco:

  1. rm ubuntu-desktop-22.04.img

Finalmente, você pode usar os comandos qemu-img check e qemu-img info para obter metadados das suas imagens de máquinas virtuais:

  1. qemu-img check ubuntu-desktop-22.04.qcow2
Output
No errors were found on the image. Image end offset: 262144
  1. qemu-img info ubuntu-desktop-22.04.qcow2
Output
image: ubuntu-desktop-22.04.qcow2 file format: qcow2 virtual size: 10 GiB (10737418240 bytes) disk size: 196 KiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false

Para obter mais informações sobre a conversão de imagens com o qemu-img, consulte a página do manual do qemu-img ou a documentação oficial.

Observação: Você também pode fazer upload dessas imagens de Máquinas Virtuais para a DigitalOcean para usar como imagens de servidor na nuvem, seguindo a documentação de Imagens Personalizadas da DigitalOcean

Conclusão

Neste tutorial, você utilizou as ferramentas de linha de comando do QEMU e do VirtualBox para criar, converter e exportar imagens de máquinas virtuais. Você revisou alguns exemplos comuns de formatos de imagens de máquinas virtuais, bem como algumas suposições padrão úteis para trabalhar com máquinas virtuais. É sempre útil entender as tecnologias subjacentes a conceitos comuns como virtualização, especialmente se você precisar migrar arquiteturas ou provedores de nuvem.

Em seguida, você pode querer revisar nosso guia para dimensionar máquinas virtuais de acordo com suas necessidades.

Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-virtual-machine-image-formats