VMware: Por que o espaço livre ext4 com preenchimento zero é necessário para encolher * arquivos .vmdk?

3

No meu convidado VMware Linux Mint 17.2, df -h estava relatando meu uso total de disco estável em cerca de 10 GB no total. Estou usando esta máquina para desenvolvimento Ruby on Rails dentro de um host Windows executando a Workstation 12.1.1 Pro.

Os arquivos *.vmdk continuaram crescendo para aproximadamente 100 GB. Tentando diminuir com vmware-vdiskmanager -k ou vmware-toolbox-cmd disk shrinkonly não fez diferença.

Eu tenho Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize . Uma saída dumpe2fs mais completa é disponível .

A execução de e4defrag / e e2fsck -E discard não permitiu que mais espaço fosse recuperado (eliminei o encolhimento depois que os primeiros vmdks (que começaram em torno de 6 GB) não mostraram nenhum sinal de encolhimento.)

O que finalmente fez o truque foi preencher todo o espaço livre com NUL bytes:

dd if=/dev/zero of=wipefile bs=1M; sync; rm wipefile

Agora, posso reduzir para um tamanho total de *.vmdk de 15,6 GB com vmware-toolbox-cmd disk shrinkonly .

Isso significa economia de espaço de 85 GB em uma VM com dados reais de 10 GB.

Parece que ext4 não está reutilizando blocos usados anteriormente quando solicitado por um bloco não utilizado, muitas vezes preferindo distribuir blocos nunca antes usados.

Perguntas

  1. Ter dados antigos por mais tempo parece menos seguro. Por que ext4 não reutilizaria blocos usados recentemente o mais rápido possível?

  2. Existe uma maneira de forçar o ext4 a reutilizar blocos recém-usados?

  3. Existe uma maneira de evitar que os arquivos *.vmdk de um convidado do VMware cresçam continuamente sem a necessidade de 0 - preencher o espaço livre regularmente?

    • Como você segura (por exemplo, não preenchendo completamente o sistema de arquivos) automatiza isso?
por Tom Hale 22.08.2016 / 02:32

3 respostas

2

  1. Sim, do ponto de vista da segurança, seria melhor apagar imediatamente todos os blocos não utilizados. O motivo que não é feito (ignorando o chattr secure-delete flag e patches) é o desempenho. O mesmo é uma resonação para não usar nenhum bloco liberado de novo - isso levaria a fragmentações pesadas que prejudicam o desempenho.

  2. Não, na verdade não. Você pode tornar toda a sua imagem muito menor (formatá-la para dizer 15G e depois crescer somente se / quando isso for necessário). - então ela nunca crescerá mais do que 15Gb.

  3. Você pode tentar montar o sistema de arquivos com a opção discard - consulte fstab(5) , mas não tenho certeza se o seu vmware vai prestar atenção nisso

por 23.08.2016 / 12:30
1

Nenhum sistema de arquivos zera os blocos de arquivos excluídos, eles apenas marcam esses clusters como disponíveis. É por isso que as ferramentas de recuperação podem recuperar arquivos excluídos se não forem sobrescritos por outros arquivos. Se eles reutilizarem esses blocos o mais rápido possível, você não terá mais a capacidade de recuperar arquivos apagados acidentalmente e os clientes irão chorar.

Os arquivos que devem ser armazenados com segurança devem ser criptografados em vez de deixar como estão no disco. Se necessário, use ferramentas shredder como

Sobre o VMDK, você deve saber que ele armazena setores em um formato esparso , assim como VHD, VDI ou qualquer outro Formato de imagem de disco virtual da VM. Portanto, zerar os setores marca-os como não necessários para armazenamento e o compactador os deixará de fora, resultando em um arquivo menor. Quaisquer setores diferentes de zero precisam ser armazenados explicitamente porque a VM não sabe que o setor pertence a um arquivo excluído ou não

Usar dd if=/dev/zero é ruim porque

  • it is slow;
  • it makes the disk image (temporarily) grow to its maximal extent;
  • it (temporarily) uses all free space on the disk, so other concurrent write actions may fail.

como mencionado na zerofree manpage . Use uma ferramenta especificamente para zerar discos como zerofree .

Não há como impedir que uma imagem de disco virtual se expanda, porque o que você esperaria se mais dados precisassem ser gravados no disco? Mesmo nos casos em que os arquivos são excluídos, seus dados ainda estão no disco e ocupam espaço no arquivo de imagem. Se você não quiser que o arquivo cresça, a única maneira é torná-lo de tamanho fixo.

    
por 15.11.2016 / 16:36
0

Possivelmente porque escrever um monte de NULs no VMDK fez com que ele recuperasse todos os blocos excluídos e os alocasse para wipefile . No entanto, porque e4defrag não fez o mesmo é algo que eu não entendo.

    
por 23.08.2016 / 06:29

Tags