Você pode criar um arquivo / arquivos contendo apenas zeros, para preencher o espaço livre do sistema de arquivos. Os blocos marcados como livres serão sobrescritos com zeros.
Depois, exclua esses arquivos.
Atualização:
Desde que esta resposta foi downvoted, decidi testar se isso é realmente verdade ou meu conhecimento está errado. Até agora parece que isso está funcionando como eu esperava.
Eu criei duas imagens com o mesmo comando que o OP, exceto que eu fiz 1G de tamanho, já que isso é para testes:
dd if=/dev/zero of=img1.im bs=1M count=1024
dd if=/dev/zero of=img2.im bs=1M count=1024
Eu então comecei a formatar os arquivos de imagem como ext4, montá-los em diretórios separados e copiar dois diretórios contendo imagens em ambas as imagens. Um diretório era 71M e o outro - 461M. Depois, apaguei o diretório 461M dos dois pontos de montagem.
Até agora todas as ações eram idênticas. Então, deixei a primeira imagem sozinha e criei um zerofile ocupando todo o espaço livre no segundo, excluindo-o depois:
dd if=/dev/zero of=img2/zerofile bs=1K count=884644
rm img2/zerofile
df
mais uma vez mostrou que os sistemas de arquivos foram preenchidos de forma idêntica (partições do sistema removidas para maior clareza):
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 999320 62248 884644 7% /home/black/temp/img/img1
/dev/loop1 999320 62248 884644 7% /home/black/temp/img/img2
Após desmontar e compactar ambas as imagens com o bzip2, a saída de ls
fala por si:
$ ls -lh
total 604M
-rw-r--r-- 1 black users 523M apr 19 11:56 fs1.im.bz2
-rw-r--r-- 1 black users 81M apr 19 11:56 fs2.im.bz2
Embora isso possa levar mais tempo para imagens maiores do que apenas zerar o espaço realmente usado para arquivos, esse método é simples, eficaz e usa apenas dd
, portanto, não são necessárias ferramentas adicionais.