desenv-web-rp.com

Limpar espaço não utilizado com zeros (ext3, ext4)

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

Como 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)

76
Grzegorz Wierzowiecki

Esse utilitário é zerofree.

De sua descrição:

O Zerofree localiza os blocos não alocados e não zerados em um sistema de arquivos ext2 ou ext3 e os preenche com zeros. Isso é útil se o dispositivo no qual esse sistema de arquivos reside for uma imagem de disco. Nesse caso, dependendo do tipo de imagem de disco, um utilitário secundário poderá reduzir o tamanho da imagem de disco após a execução do zerofree. O Zerofree exige que o sistema de arquivos seja desmontado ou montado como somente leitura.

A maneira usual de obter o mesmo resultado (zerar os blocos não utilizados) é executar "dd". Crie um arquivo cheio de zeros que ocupa todo o espaço livre na unidade e exclua esse arquivo. Isso tem muitas desvantagens, que o zerofree alivia:

  • está lento
  • faz com que a imagem do disco (temporariamente) cresça na sua extensão máxima
  • (temporariamente) usa todo o espaço livre no disco, portanto outras ações de gravação simultâneas podem falhar.

O Zerofree foi escrito para ser executado em sistemas GNU/Linux instalados como sistemas operacionais convidados dentro de uma máquina virtual. Se esse não for o seu caso, você quase certamente não precisará deste pacote.

ATUALIZAÇÃO # 1

A descrição do pacote .deb contém o parágrafo a seguir agora, o que implicaria que isso também funcionará bem com o ext4.

Descrição: zero blocos livres dos sistemas de arquivos ext2, ext3 e ext4 O Zerofree encontra os blocos não alocados com conteúdo de valor diferente de zero em um sistema de arquivos ext2, ext3 ou ext4 e os preenche com zeros ...

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.

82
enzotib

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

  • Se o "disco" em que seu sistema de arquivos está está com provisionamento dinâmico (por exemplo, um SSD moderno que suporta TRIM, um arquivo VM cujo formato suporta escassez etc.) e o kernel diz que o dispositivo de bloco o entende, você pode usar e2fsck -E discard src_fs Para descartar o espaço não utilizado (requer o e2fsprogs 1.42.2 ou superior).
  • Usando zerofree (por exemplo, zerofree src_fs) Para escrever explicitamente zeros em blocos não utilizados.
  • O uso de 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

  • Se o "disco" em que o seu sistema de arquivos está instalado é pouco provisionado (por exemplo, um SSD moderno que suporta TRIM, um arquivo VM cujo formato suporta escassez etc.), o seu kernel diz que o dispositivo de bloco o entende e, finalmente, o driver ext do sistema de arquivos suporta você pode usar fstrim /mnt/fs/ para solicitar ao sistema de arquivos que descarte o espaço não utilizado.
  • O uso de cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros (sfill da exclusão segura usa essa técnica). Este método é ineficiente, não recomendado por Ted Ts'o (autor do ext4), pode não zerar certas coisas e pode retardar futuros fscks.

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 usar 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 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 esparso (portanto, as execuções com zero deixam 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 virt-sparsify para executar essas etapas e mais de uma vez.

Fontes

33
Anon

sfill de exclusão segura pode fazer isso e vários outros trabalhos relacionados.

por exemplo.

sfill -l -l -z /mnt/X

ATUALIZAÇÃO # 1

Existe uma árvore de fontes que parece ser usada pelo projeto ArchLinux no github que contém a fonte de sfill, que é uma ferramenta incluída no pacote Secure-Delete.

Também está uma cópia da página de manual de sfill:

15
cas

Se você tiver o e2fsprogs 1.42.9, poderá usar e2image para criar a imagem da partição sem o espaço livre em primeiro lugar, para que você possa pular a etapa de zerar.

8
psusi

se você não quiser recorrer a ferramentas adicionais, esse método deve ser mais rápido que cat /dev/zero > /mnt/fs/zeros:

dd if=/dev/zero of="/mnt/fs/filler" bs=10485760
dd if=/dev/zero of="/mnt/fs/filler1" bs=1
rm /mnt/fs/filler
rm /mnt/fs/filler1
0
eadmaster

Você pode usar sfill . É uma solução melhor para volumes finos.

0
user64219