VirtualBox

VMs usando uma imagem base (copy-on-write)

É um desperdício ter que clonar toda uma imagem HD sempre que precisasse de uma nova instalação de uma máquina. Por que não poderia usar uma única imagem de base para cada máquina virtual e ter VirtualBox executar copy-on-write sempre que isso fez alterações? Dessa forma, apenas as mudanças na imagem base deveriam ser armazenadas separadamente para cada clone, economizando muito espaço em disco. Eu tive alguns problemas com as etapas nesse artigo, porém, então é como eu fiz isso.

Primeiro, criei uma nova Máquina Virtual e a instalei como sempre. Uma vez que a VM estava configurada, desliguei e clonou seu disco rígido:

$ VBoxManage clonehd ~/VirtualBox\ VMs/minimal.deb.local/minimal.deb.local.vdi ~/base.vdi

O binario do VboxManage no Windows fica em:




Em seguida, criei uma nova Máquina virtual:

$ VBoxManage createvm --name "clone1" --otype Debian_64 --register

A máquina virtual 'clone1' é criada e registrada.

UUID: 1becc453-f4a9-44a8-a6c8-e43b80baf04d

Arquivo de configurações: '/ home / user / VirtualBox VMs / clone1 / clone1.vbox'

$ VBoxManage modifyvm "clone1" --nic1 hostonly --hostonlyadapter1 "vboxnet0"

$ VBoxManage storagectl "clone1" --name "sata1" --add sata

$ VBoxManage storageattach "clone1" --storagectl "sata1" --port 0 --device 0 --type hdd --medium ~/base.vdi --mtype multiattach

O truque aqui reside na opção multidifusão –mtype para o comando storageattach. Ele diz ao VirtualBox que vou anexar esta imagem de disco rígido a várias máquinas virtuais diferentes. O VirtualBox automaticamente irá fazer Copy-on-Write de todas as alterações em um instantâneo em vez de na imagem base. Se eu simplesmente definir a imagem do disco rígido base.vdi como imutável, conforme instruído pelo artigo no Xaprb, não posso anexá-lo a várias VirtualMachines. O uso do "multiattach" também instrui o VirtualBox a fazer cópias constantes em cópias. Isso significa que, ao contrário do artigo Xaprb, seu instantâneo não é reiniciado ao iniciar o VirtualMachine. Assim, você não terá que alterar os instantâneos para autoreset = false.

Você pode iniciar a VM agora:

$ VBoxManage startvm "clone1"

Se você quiser criar outra VirtualMachine usando a mesma imagem base, você pode repetir as etapas acima e substituir todas as ocorrências de "clone1" por "clone2" ou algum outro nome. Então, quando você anexa o armazenamento, você não deve se referir ao arquivo VDI atual, como ele existe no disco, mas você deve simplesmente se referir ao seu nome. Então, em vez de especificar "--medium ~/base.vdi", basta digitar: "--medium base.vdi".

O comando completo se torna assim:

$ VBoxManage storageattach "clone2" --storagectl "sata1" --port 0 --device 0 --type hdd --medium base.vdi --mtype multiattach

Não podemos nos referir diretamente à imagem no disco, porque já está registrado no VirtualBox. Se você tentar fazer isso de qualquer maneira, você receberá um erro, como:

Se você criar novas VMs através da GUI e anexar o disco rígido existente "base.vdi" durante o Assistente, ele irá anexar essa imagem automaticamente no modo de ligação múltipla.

Como eu disse, todas as mudanças nas Máquinas virtuais não são escritas na imagem base.vdi, mas sim em uma foto instantânea. Os instantâneos são de tamanho mínimo:

$ ls -lh VirtualBox\ VMs/clone1/Snapshots/

total 26M

-rw ------- 1 user group 26M 2017-12-30 10:30 {8f91d6ba-71bb-4618-8c82-5d8bd13fb045}.vdi

Apenas 26 MB para uma instalação Debian completa.

Referência: