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 * .
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.
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:
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.
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 :)mount -n -o remount,ro -t ext4 /dev/sda1
e depoiszerofree -v /dev/sda1
.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> --compact
para compactar o arquivo de disco real.Este comando pode zerar o disco enquanto estiver desmontado:
Aqui está um exemplo de como fazer com que o dd imprima periodicamente a saída:
Aqui está um
dd
programa semelhante que imprimirá automaticamente a saída periodicamente:fonte
zerofree
usado 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.