Como reduzo um disco VDI em crescimento dinâmico do VirtualBox?

35

Meus discos virtuais em crescimento dinâmico (VDI) de várias instalações do Ubuntu no Virtual Box estão realmente "crescendo" de fato.

A exclusão de arquivos na máquina virtual não libera o espaço que meu arquivo VDI ocupou do espaço em disco do host.

Como reduzo esses arquivos para devolver o espaço em disco não utilizado ao host?

Takkat
fonte

Respostas:

34

Um arquivo de disco rígido virtual da Virtual Box em crescimento dinâmico é capaz de crescer sob demanda da máquina virtual até o tamanho máximo que definimos na configuração desse arquivo. No entanto, não libera o espaço dos arquivos que excluímos no sistema operacional convidado.

Caso o disco tenha crescido demais, podemos compactá-lo novamente, desde que o espaço não utilizado seja preenchido com zeros e a unidade esteja no formato VDI.

Para um sistema de arquivos ext2 a ext 4, isso pode ser feito no convidado do Ubuntu com o utilitário de linha de comando zerofree * .Instale o zerofree

zerofree /dev/sdxX

É necessário que a unidade não esteja em uso e seja desmontada . Portanto, talvez tenhamos que vinculá-lo temporariamente a outra VM que criamos para esse fim ou precisamos inicializar um ambiente ativo do Ubuntu nessa VM.

Substitua /dev/sdxXpela partição formatada ext2, ext3 ou ext4 em questão.

Em mais de uma partição, precisamos repetir zerofreepara cada partição. Lembre-se de que, ao preencher com zeros, o arquivo virtual aumentará temporariamente até o tamanho máximo.

Quando todo o espaço não utilizado da unidade estiver cheio de zeros, reduzimos a unidade com

VBoxManage modifyhd <name>.vdi --compact

Isso diminuirá consideravelmente o tamanho do arquivo VDI.

* Em um convidado do Windows, podemos substituir o espaço não utilizado pelo utilitário sdelete.

Takkat
fonte
Isso também funcionará para um sistema de arquivos criptografado no convidado?
smichak
Certo. Se você estiver usando ecryptfs, os arquivos criptografados se parecerão com arquivos normais nos utilitários de disco, e isso funcionará. Se você estiver usando criptografia de disco completo, ele não será reconhecido como um de qualquer maneira formatada-ext partição :)
chronospoon
Estou usando a partição ext4 em um dispositivo de bloco dm-crypt ... Tentei o método e não vejo o arquivo .vdi como menor após a compactação. Eu acho que os blocos zero são salvos como blocos diferentes de zero no dispositivo de bloco sob o dm-crypt.
smichak
2
@michak: esse é o ponto de criptografia. Ele criptografará toda a sua unidade para garantir que não possamos ver os limites do arquivo.
Takkat 13/01/2015
3
Se você não deseja anexar seu VDI a outra máquina, pode inicializar no modo de recuperação e montar o disco somente leitura mount -n -o remount,ro -t ext4 /dev/sda1e depois zerofree -v /dev/sda1.
Hamid Nazari
1

Aqui estão algumas maneiras alternativas de zerar o espaço livre em disco (que pode ser a parte que consome mais tempo). Depois, você ainda precisará executar VBoxManage modifyhd <disk> --compactpara compactar o arquivo de disco real.


Este comando pode zerar o disco enquanto estiver desmontado:

apt-get install zerofree
zerofree -v /dev/sdxN


Aqui está um exemplo de como fazer com que o dd imprima periodicamente a saída:

dd if=/dev/zero of=temp-file-on-disk bs=20M

# run this to get the process ID of the dd command
pgrep -l '^dd$'
# then put the process ID on the command line to "kill -USR1"
# this will tell dd to print the current status (in another terminal)
kill -USR1 $(pgrep -l '^dd$' | awk '{print $1}')


Aqui está um ddprograma semelhante que imprimirá automaticamente a saída periodicamente:

apt-get install dcfldd
dcfldd if=/dev/zero of=temp-file-on-disk bs=20M
chronospoon
fonte
1
Eu já vi zerofreeusado em um sistema de arquivos montado, mas quando foi montado somente leitura. Mesmo para FS raiz: sudo mount -o remount,ro /- mas em uma sessão da GUI, a raiz estará ocupada e, portanto, falhará. Mas é possível no nível de execução 1 ( telinit 1), portanto você não precisará inicializar a partir de um CD ao vivo para fazê-lo.
Tomasz Gandor