Eu tenho uma VM VirtualBox que configurou um tamanho de disco rígido muito grande (maior que o host). Por engano, um programa na VM gerou muitos arquivos de log e o tamanho do arquivo VDI continua crescendo até que não haja espaço no host.
Agora eu apaguei os arquivos de log, mas o tamanho do arquivo VDI não está diminuindo depois de usar VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact
Existe uma maneira de realmente compactar o tamanho do arquivo VDI? Obrigado!
fonte
dd ...; rm /bigfile
isso minimizará o tempo com um disco cheio, caso você não esteja esperandodd
a conclusão.Estou em um host do Windows 7 com convidados do Windows. Aqui está um arquivo em lotes que escrevi para compactar todos os VDIs em uma árvore de pastas
Deixei os links nos comentários para que você possa (mais ou menos) dizer como funciona.
editar
Bem, depois de tudo isso, tentei a ferramenta CloneVDI e ela fez um bom trabalho em muito menos tempo e com apenas um clique.
fonte
Convidado Debian no host do Windows usando descarte / TRIM.
Esta não é uma resposta direta, pois estou abordando o problema, não a pergunta. Em vez de compactar periodicamente a imagem, essa solução usa o descarte para remover automaticamente blocos não utilizados na imagem de disco da VM do host.
Esta solução requer um sistema de arquivos convidado que suporte o TRIM contínuo. O wiki do Arch Linux possui uma lista de sistemas de arquivos que suportam operações TRIM .
O FDE e o cryptoroot especificamente não são cobertos, pois existem preocupações com a segurança e nenhuma das outras soluções para essa pergunta permitiria a compactação. O wiki do Arch Linux possui informações sobre dispositivos TRIM e dm-crypt .
Em teoria, isso funcionará para todos os convidados do Linux nos hosts VBox usando armazenamento VDI.
Configuração do host
Com o VBox encerrado e sem VMs em execução, adicione suporte de descarte aos discos, definindo ambos
discard
enonrotational
para cada disco no arquivo de configuração da VM. No momento,discard
não está na GUI, masnonrotational
é exposto como a caixa de seleção "Solid-state Drive". (ref: fóruns vbox, suporte para descarte )Inicialize a VM e verifique se o suporte ao TRIM está ativado:
Configuração do convidado
Se o LVM estiver em uso, altere a configuração de descarte em
/etc/lvm/lvm.conf
. (ref: wiki debian, exemplo lvm.conf )No fstab, adicione a
discard
opção aos sistemas de arquivos que você deseja descartar automaticamente (ref: debian wiki, exemplo do fstab )Remonte os sistemas de arquivos para que eles escolham suas novas opções.
Corte manualmente blocos livres agora com
fstrim
.fstrim
usa o sistema de arquivos montado, não o dispositivo de bloco que o suporta. Em vez de definir o descarte contínuofstab
, isso pode ser feito em um cron semanal. (O cron semanalmente é recomendado para SSDs físicas que podem ter suporte questionável para TRIM, mas isso não é relevante aqui desde SSDs subjacentes são tratados pelo sistema operacional hospedeiro ver:. Aviso guarnição ssd ).Nesse ponto, o tamanho dos sistemas de arquivos dentro da VM e o tamanho das imagens da VM devem ter um valor bastante próximo.
Testado com:
fonte
Para o MacOS Guest, faça o seguinte:
Anular espaço livre no sistema convidado:
(substitua / Volumes / Macintosh HD pelo nome da sua unidade)
Encerrar a VM convidada
Execute este comando para reduzir o tamanho da imagem do disco VDI
OU
fonte
Eu uso isso para minha imagem VDI montada no Debian virtual no Windows VirtualBox. Não é uma solução geral, mas deve, pelo menos, dar uma idéia do que faço.
Comandos no Debian:
Comandos no Windows:
Espero que ajude :)
fonte
Não quero habilitar o suporte TRIM no SO, porque cada exclusão de dados forçará a compactação de dados no arquivo VDI, tornando o sistema convidado inutilizável quando o arquivo VDI estiver no disco rotativo clássico. Para mim, melhor é fazer a compactação manualmente, por exemplo, uma vez por mês.
Durante a compactação normal, o conteúdo do arquivo VDI é copiado para o novo arquivo. Isso requer algum espaço livre (às vezes grande) no disco host.
Eu tenho uma solução semelhante à apontada por Andrew Domaszek. Funciona muito bem mesmo com NTFS (Windows10).
Para fazer isso:
Altere os discos baseados em VDI para ficarem visíveis como SSD com suporte a TRIM:
iniciar máquina
mount /dev/sda2 /mnt
dd if=/dev/zero of=/mnt/bigfile
rm /mnt/bigfile
fstrim -v /mnt
fonte
Um truque muito interessante para complementar a resposta aceita é que você pode fugir sem fazer nenhuma compactação depois de zerar o espaço do convidado, usando um sistema de arquivos compactado no host (por exemplo, selecionando compactar a pasta de unidades virtuais nas propriedades NTFS em um Host do Windows). Na verdade, isso tem o benefício de economizar muito mais espaço, porque os sistemas operacionais tendem a armazenar muitos arquivos repetitivos de texto ou binários (por exemplo, uma unidade de convidado de 30 GB com 15 GB de espaço zerado pode virar 4 GB na unidade host).
Advertências incluem que o acesso à unidade no hardware real pode aumentar e há um ligeiro aumento no uso da CPU.
fonte
NOTA IMPORTANTE PARA SISTEMAS OPERACIONAIS LEGADOS (~ 1997-2007)
Em geral, as técnicas nas respostas dadas anteriormente são válidas; No entanto, existe um caso especial muito importante.
Por um período de alguns anos - talvez entre 1997 e 2007 - sistemas operacionais de 32 bits ainda eram a norma, mas discos rígidos maiores que 2 GB já estavam em uso. Como resultado, ao tentar consumir todo o espaço livre escrevendo um arquivo de zeros (que sempre deve ser feito como root, para incluir o espaço livre privilegiado do root, no qual ninguém mais pode tocar), você pode ver:
Arquivo muito grande
em vez do que você espera:
Não há espaço no dispositivo.
Se isso ocorrer, é provável que você tenha atingido uma limitação de tamanho de arquivo de 2 GB. Isso era comum na época, porque muitas operações de arquivo retornavam resultados em números inteiros de 32 bits, para que valores negativos pudessem relatar códigos de erro. Isso significava efetivamente que os resultados do deslocamento eram limitados a 2 ^ 31 bytes sem medidas especiais.
A solução alternativa é simples: continue criando arquivos de zeros separados e com nomes diferentes até o disco ficar sem espaço.
Se você é um instrutor que deseja demonstrar essa situação para uma aula, uma imagem de disco de 4 GB com uma cópia antiga do Red Hat Linux 7.0 é suficiente.
fonte