Compactação de disco virtual

Sou um grande utilizador, profissional e pessoalmente,  de tecnologia de virtualização. Mas, um dos problemas que rapidamente se instalam, é a multiplicidade de cópias e backups, e dos problemas associados. À medida que vamos avançando na utilização de uma máquina virtual (guest), o seu disco vai aumentando, a fragmentação também, e quando se dá por ela, a dimensão do ficheiro pode ser muito elevada.

No meu caso utilizo o VirtualBox. As indicações abaixo são genéricas, pelo que deverão ser adaptadas a outras realidades. São igualmente genéricas, para serem executadas por quem conhece a tecnologia. Em particular, nunca se esqueça de fazer um backup antes destes procedimentos, acto muito simples em ambiente virtuais, pois basta copiar normalmente apenas um ficheiro.

Otimizar um guest Windows normalmente resume-se à desfragmentação do guest, à utilização de uma ferramenta que “zere” (encha de zeros) o resto do disco (eg. sdelete) e finalmente à utilização da ferramenta VBoxManage.

Otimizar um guest Linux é particularmente mais difícil. Em particular no meu caso, dado que utilizo muito o reiserfs, sendo que ferramentas desenvolvidas para ext[234] não são compatíveis.

O problema do Linux tem a ver com a forma como os vários tipos de filesystems tentam evitar a fragmentação. De uma forma geral deixam intervalos entre os ficheiros, e como o VirtualBox aloca pedaços de 1MB cada vez que se escreve numa parte do disco que ainda não está escrita, rapidamente o disco do host (computador onde o guest executa) ocupa muito mais espaço que o espaço ocupado no guest.

A solução neste caso passa por concentrar o disco do guest Linux. A técnica que utilizo passa pela utilização do GParted LiveCD, que permite entre outras coisas redimensionar partições. Depois de saber quanto é que o guest ocupa, redimensiono a partição para um valor apenas ligeiramente superior. Isto liberta o restante espaço do disco para uma partição vazia, eg. /dev/sda… a qual depois pode ser “zerada” com um comando do género ‘dd if=/dev/zero of=/dev/…’ No final, só é necessário voltar a juntar as duas partições separadas.

Antes ou depois deste processo, convém sempre “zerar” a partição de swap. O processo é bastante simples, sendo necessário desactivar o swap, “zerá-lo”, e voltar a criar uma partição de swap no final.

No final, é necessário executar a ferramenta VBoxManage, tal e qual como no caso do Windows.

A utilização desta combinação de procedimentos tem-me permitido compactar muito mais as minhas máquinas virtuais, que qualquer outra combinação normalmente divulgada na Internet. Na elaboração deste artigo, testei-a com uma máquina virtual de 11 GB, mas com apenas 2.9 GB ocupados no Guest. No final deste processo, consigo um ficheiro com 3.2 GB, e só não tem 2.9 GB, porque no processo de junção das duas partições no GParted, ele cresce dos tais 2.9 GB para 3.2 GB… Nas técnicas alternativas, não consegui baixar dos 4 GB.

Tags:

{ Comments are closed! }