Como Converter Formatos de Imagem de Máquina Virtual

Introdução

Ao trabalhar com um servidor de nuvem remoto, geralmente você está trabalhando com uma máquina virtual: uma instância isolada e em sandbox de um sistema operacional inteiro que está sendo executado 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. As máquinas virtuais podem incluir uma interface de desktop completa, ou elas podem apenas executar um servidor SSH para permitir conexões de terminal. Em ambos os casos, elas são tecnicamente semelhantes e fazem suposições semelhantes. Além de quaisquer otimizações em larga escala na nuvem, a única diferença significativa entre os ambientes de virtualização é que os discos rígidos e as opções de configuração da máquina virtual são diferentes. Esses são chamados de imagens de máquina virtual e são formatados de maneira diferente entre os provedores.

Neste tutorial, você aprenderá como converter entre formatos de imagens de máquina virtual (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 máquina DigitalOcean, você deve ter pelo menos 2 CPUs e 2 GB de memória.

Você também precisará de pelo menos 10 GB de espaço livre para executar os comandos neste tutorial.

Nota: Se estiver usando o macOS com uma CPU Apple Silicon (fabricada em 2020 ou posterior), você só poderá usar o QEMU e não o VirtualBox.

QEMU

QEMU é o software de virtualização de código aberto mais poderoso e amplamente suportado. Ele é executado 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), permitindo que o QEMU atinja o desempenho total por meio da virtualização. Se você estiver usando o QEMU para combinar arquiteturas, como executar Linux ou Windows x86 (como sistema operacional “host” ou “convidado”) com as arquiteturas ARM do macOS ou Android, o QEMU usará automaticamente a emulação para traduzir as arquiteturas.

Em comparação com a virtualização, a emulação geralmente não é usada em ambientes de produção devido à penalidade significativa de desempenho que ela adiciona. No entanto, o tratamento quase equivalente de virtualização e emulação pelo QEMU oferece vantagens significativas 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 possui uma curva de aprendizado acentuada 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 ser usado opcionalmente com interfaces gráficas do 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, utilize o 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

Nota: 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

VirtualBox é um software de virtualização de código aberto fornecido pela Oracle. Ele suporta todos os sistemas operacionais x86 (Windows, Linux e macOS) fabricados antes de 2020. Não suporta emulação ou arquiteturas não x86, tornando-o principalmente útil para executar 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 muitas vezes é combinado com software de orquestração dedicado como o Vagrant para automatizar e reproduzir configurações de máquinas virtuais. No entanto, 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, porque 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 sob WSL2), primeiro use apt update para atualizar suas fontes de pacote, então 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ê irá 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áquina virtual, 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 qcow2 do QEMU:

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

Neste ponto, você terá criado uma imagem de máquina virtual vazia. Mesmo que você 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 terá o tamanho de 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 menor espaço possível no seu disco, enquanto refletem 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 que tem disponível, e o tamanho máximo que a imagem da máquina virtual irá escalar 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.

Converter uma imagem do 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 de VM original, 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, porque ainda não tem nenhum 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 pela VMware, e vhd, usado principalmente pelo Hyper-V da Microsoft. Você também pode criar uma imagem “raw” se o seu software exigir, seguindo o próximo passo.

Converter Outros Formatos de Máquinas Virtuais para QEMU

Se você tiver uma imagem no formato vdi, 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 estiver tentando criar cópias transitórias. Você pode ter que remover manualmente quaisquer novas entradas da interface do VirtualBox se registrar duplicatas inadvertidamente.

As imagens de máquina virtual brutas não são comprimidas, então este comando realmente criará um arquivo completo de 10GB, ao contrário do que acontecia antes. Você pode convertê-lo de volta para o formato qcow2 para uso com o QEMU revertendo a sintaxe do último passo:

  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

Por fim, você pode usar os comandos qemu-img check e qemu-img info para exibir alguns metadados de suas imagens de máquina virtual:

  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 mais informações sobre a conversão de imagens com o qemu-img, consulte a página do manual do qemu-img ou sua documentação oficial .

Nota: Você também pode enviar essas imagens de máquina virtual para a DigitalOcean para usar como imagens de servidor em nuvem, seguindo a documentação de Imagem Personalizada da DigitalOcean

Conclusão

No tutorial, foram utilizadas as ferramentas de linha de comando do QEMU e do VirtualBox para criar, converter e exportar imagens de máquinas virtuais. Foram revisados alguns exemplos comuns de formatos de imagens de máquinas virtuais, assim como algumas suposições padrão úteis para trabalhar com máquinas virtuais. É sempre útil compreender as tecnologias subjacentes a conceitos comuns como virtualização, especialmente se precisar migrar arquiteturas ou provedores de nuvem.

Em seguida, você pode revisar nosso guia para dimensionar máquinas virtuais conforme suas necessidades.

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