Como limpar o espaço não utilizado com zeros? (ext3, ext4)
Estou procurando por algo mais inteligente do que
cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero
O FSArchiver está procurando "espaço usado" e ignora o site não utilizado, mas oposto.
Objetivo: eu gostaria de compactar imagens de partição, portanto, é altamente recomendável preencher o espaço não utilizado com zeros.
Btw. Para btrfs: limpe o espaço não utilizado com zeros (btrfs)
filesystems
partition
backup
storage
compression
Grzegorz Wierzowiecki
fonte
fonte
Respostas:
Tal utilidade é
zerofree
.De sua descrição:
ATUALIZAÇÃO # 1
A descrição do pacote .deb contém o parágrafo a seguir agora, o que implica que isso também funcionará bem com o ext4.
Outros usos
Outro aplicativo desse utilitário é compactar imagens de disco que são um backup de um disco real. Um exemplo típico disso é o despejo do cartão SD em um BeagleBone ou Raspberry Pi. Depois de zerados os espaços vazios, as imagens de backup podem ser compactadas com mais eficiência.
fonte
dd
método bruto da pergunta original, pois não funciona em sistemas de arquivos montados.zerofree
Astralinux (baseado no Debian) ...Resumo dos métodos (mencionados nesta pergunta e em outros lugares) para limpar o espaço não utilizado em ext2 / ext3 / ext4:
Zerando o espaço não utilizado
O sistema de arquivos não está montado
e2fsck -E discard src_fs
para descartar o espaço não utilizado (requer e2fsprogs 1.42.2 ou superior).zerofree src_fs
) para escrever explicitamente zeros sobre blocos não utilizados.e2image -rap src_fs dest_fs
para copiar apenas blocos em uso (o novo sistema de arquivos deve estar em um "disco" zerado, requer o e2fsprogs 1.42.9 ou superior).O sistema de arquivos está montado
fstrim /mnt/fs/
para solicitar ao sistema de arquivos que descarte o espaço não utilizado.cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros
(sfill
de exclusão segura usa esta técnica). Este método é ineficiente, não recomendado por Ted Ts'o (autor do ext4), pode não zerar certas coisas e pode atrasarfsck
s futuros .Desmontar o sistema de arquivos fornecerá melhores resultados do que montá-lo. O descarte tende a ser o método mais rápido quando muito espaço usado anteriormente precisa ser zerado, mas o uso
zerofree
após o processo de descarte às vezes pode zerar um pouco mais (dependendo de como o descarte é implementado no "disco").Diminuindo o arquivo de imagem
A imagem está em um formato VM dedicado
Você precisará usar uma ferramenta de imagem de disco apropriada (como
qemu-img convert src_image dst_image
) para permitir que o espaço zerado seja recuperado e para permitir que o arquivo que representa a imagem fique menor.A imagem é um arquivo bruto
Uma das seguintes técnicas pode ser usada para tornar o arquivo escasso (as execuções com zero param de ocupar espaço):
cp --sparse=always src_image dst_image
.fallocate -d src_image
(requer util-linux v2.25 ou superior).Atualmente, pode ser mais fácil usar uma ferramenta como o virt-sparsify para executar essas etapas e mais de uma vez.
Fontes
zerofree
fonte
sfill
da exclusão segura pode fazer isso e vários outros trabalhos relacionados.por exemplo
ATUALIZAÇÃO # 1
Existe uma árvore de código-fonte que parece ser usada pelo projeto ArchLinux no github que contém o código-fonte para o
sfill
qual é uma ferramenta incluída no pacote Secure-Delete.Também
sfill
está aqui uma cópia da página de manual:fonte
Se você tiver o e2fsprogs 1.42.9, poderá
e2image
criar a imagem da partição sem o espaço livre em primeiro lugar, para poder pular a etapa de zerar.fonte
e2image -ar /dev/foo1 | gzip > fs.img.gz
, ou alguma variação disso. Inclua-f
para usá-lo em um fs montado.Você pode usar
sfill
. É uma solução melhor para volumes finos.fonte
se você não quiser recorrer a ferramentas adicionais, esse método deve ser mais rápido que
cat /dev/zero > /mnt/fs/zeros
:fonte
cat
? (Não, o argumento tamanho do blocodd
não ajuda)dd
mais rápido. De fato, provavelmente tornacat
mais rápido. O tamanho do bloco é importante apenas para minimizar a sobrecarga das chamadas do sistema e otimizar o uso do cache da CPU. Com a sobrecarga do syscall, você entra na área de retornos decrescentes. O cache começa a doer acima, digamos, de 1MiB. E ao operar em discos reais, você está vinculado à E / S de qualquer maneira e o ponto é discutível. Tente compará-lo você mesmo.