Cancella spazio inutilizzato con zeri (ext3, ext4)


73

Come cancellare lo spazio inutilizzato con zeri? (Ext3, ext4)

Sto cercando qualcosa di più intelligente di

cat /dev/zero > /mnt/X/big_zero ; sync; rm /mnt/X/big_zero

Come FSArchiver è alla ricerca di "spazio utilizzato" e ignora il sito inutilizzato, ma opposto.

Scopo: vorrei comprimere le immagini delle partizioni, quindi è altamente raccomandato riempire lo spazio inutilizzato di zeri.

Btw. Per btrfs: cancella lo spazio inutilizzato con zeri (btrfs)


4
Mat

1
Sono possibili due diversi tipi di risposta. Cosa stai cercando di ottenere? O 1) sicurezza, vietando a qualcuno di leggere quei dati, o 2) ottimizzando la compressione dell'intera partizione o [prestazioni SSD] ( en.wikipedia.org/wiki/Trim_(computing) ?
Totor

Risposte:


77

Tale utilità è zerofree.

Dalla sua descrizione:

Zerofree trova i blocchi non allocati e non azzerati in un file system ext2 o ext3 e li riempie di zero. Ciò è utile se il dispositivo su cui risiede questo file system è un'immagine del disco. In questo caso, a seconda del tipo di immagine del disco, un'utilità secondaria potrebbe essere in grado di ridurre la dimensione dell'immagine del disco dopo l'esecuzione di zerofree. Zerofree richiede che il file system sia smontato o montato in sola lettura.

Il solito modo per ottenere lo stesso risultato (azzerando i blocchi non utilizzati) è eseguire "dd" per creare un file pieno di zero che occupi l'intero spazio libero sull'unità e quindi eliminare questo file. Ciò ha molti svantaggi, che zerofree allevia:

  • è lento
  • fa crescere (temporaneamente) l'immagine del disco nella sua massima estensione
  • utilizza (temporaneamente) tutto lo spazio libero sul disco, quindi altre azioni di scrittura simultanee potrebbero non riuscire.

Zerofree è stato scritto per essere eseguito da sistemi GNU / Linux installati come SO guest all'interno di una macchina virtuale. Se questo non è il tuo caso, quasi certamente non hai bisogno di questo pacchetto.

AGGIORNAMENTO N. 1

La descrizione del pacchetto .deb contiene ora il seguente paragrafo che implicherebbe che funzionerà bene anche con ext4.

Descrizione: zero blocchi liberi dai file system ext2, ext3 ed ext4 Zerofree trova i blocchi non allocati con contenuto di valore diverso da zero in un file system ext2, ext3 o ext4 e li riempie di zero ...

Altri usi

Un'altra applicazione questa utility è quella di comprimere le immagini del disco che sono un backup di un disco reale. Un tipico esempio di ciò è il dump della scheda SD in un BeagleBone o un Raspberry Pi. Una volta azzerati gli spazi vuoti, le immagini di backup possono essere compresse in modo più efficiente.


1
È la pagina ufficiale dello strumento intgat.tigress.co.uk/rmy/uml/index.html ? Pensi che sia sicuro usare con ext4?
Grzegorz Wierzowiecki,

2
@GrzegorzWierzowiecki: sì, questa è la pagina, ma per debian e gli amici è già nei repository. Ho usato su una partizione ext4 su un disco virtuale per ridurre successivamente l'immagine del file del disco e non ho avuto problemi.
enzotib,

1
Questo non equivale al ddmetodo grezzo nella domanda originale, poiché non funziona sui file system montati.
jlh

La pagina zerofree parla di una patch che consente di fare "il filesystem è montato con l'opzione zerofree" in modo che azzeri sempre i file eliminati continuamente. questo richiede quindi la ricompilazione del kernel? c'è un modo più semplice per ottenere la stessa cosa?
endolith

2
Attenzione: ho perso il filesystem ext4 usando zerofreesu Astralinux (basato su Debian) ...
Hubbitus,

33

Riepilogo dei metodi (come menzionato in questa domanda e altrove) per cancellare lo spazio inutilizzato su ext2 / ext3 / ext4:

Azzeramento dello spazio inutilizzato

Il file system non è montato

  • Se il "disco" su cui si trova il tuo filesystem è sottoposto a thin provisioning (ad esempio un SSD moderno che supporta TRIM, un file VM il cui formato supporta la scarsità, ecc.) E il tuo kernel dice che il dispositivo a blocchi lo capisce, puoi usare e2fsck -E discard src_fsper scartare lo spazio inutilizzato (richiede e2fsprogs 1,42,2 o superiore).
  • Utilizzo di zerofree (ad es. zerofree src_fs) Per scrivere esplicitamente zeri su blocchi inutilizzati.
  • Usare e2image -rap src_fs dest_fsper copiare solo i blocchi in uso (il nuovo filesystem dovrebbe essere su un "disco" altrimenti azzerato, richiede e2fsprogs 1.42.9 o successivo).

Il file system è montato

  • Se il "disco" su cui si trova il tuo filesystem è sottoposto a thin provisioning (ad esempio un SSD moderno che supporta TRIM, un file VM il cui formato supporta la scarsità, ecc.), Il tuo kernel dice che il dispositivo a blocchi lo capisce e infine il driver del filesystem ext lo supporta che puoi usare fstrim /mnt/fs/per chiedere al filesystem di scartare lo spazio inutilizzato.
  • Utilizzo cat /dev/zero > /mnt/fs/zeros; sync; rm /mnt/fs/zeros( sfillda secure-delete utilizza questa tecnica). Questo metodo è inefficiente, non raccomandato da Ted Ts'o (autore di ext4), potrebbe non azzerare alcune cose e rallentare i futuri fsck.

Disinstallare il filesystem darà risultati migliori che montarlo. L'eliminazione tende ad essere il metodo più veloce quando è necessario zerofreeazzerare molto spazio precedentemente utilizzato, ma l'utilizzo dopo il processo di eliminazione a volte può azzerare un po 'di più (a seconda della modalità di eliminazione del "disco").

Ridurre il file di immagine

L'immagine è in un formato VM dedicato

Sarà necessario utilizzare uno strumento di immagine del disco appropriato (come qemu-img convert src_image dst_image) per abilitare il recupero dello spazio azzerato e per ridurre le dimensioni del file che rappresenta l'immagine.

L'immagine è un file non elaborato

Una delle seguenti tecniche può essere utilizzata per rendere il file scarso (quindi le esecuzioni di zero smettono di occupare spazio):

  • cp --sparse=always src_image dst_image.
  • fallocate -d src_image (richiede util-linux v2.25 o successivo).

In questi giorni potrebbe essere più semplice utilizzare uno strumento come virt-sparsify per eseguire questi passaggi e altro in una volta sola.

 fonti


15

sfillda secure-delete può fare questo e molti altri lavori correlati.

per esempio

sfill -l -l -z /mnt/X

AGGIORNAMENTO N. 1

C'è un albero dei sorgenti che sembra essere usato dal progetto ArchLinux su github che contiene i sorgenti per i sfillquali è uno strumento incluso nel pacchetto Secure-Delete.

Anche una copia della sfillpagina man di è qui:


quell'URL è obsoleto. non ho idea di dove sia ora la sua home page (o anche se ne ha ancora una), ma è confezionata per debian e ubuntu. probabilmente anche altre distro. se hai bisogno del codice sorgente, puoi trovarlo negli archivi debian se non lo trovi da nessun'altra parte.
Caso

L'URL manpage obsoleto è stato corretto ora. Sembra che "Digipedia" non sia più una cosa.
mwfearnley,

8

Se si dispone di e2fsprogs 1.42.9, è possibile utilizzare e2imageper creare l'immagine della partizione senza prima lo spazio libero, in modo da poter saltare il passaggio di azzeramento.


Non sono riuscito (facilmente) a trovare informazioni online su questi parametri, ma in realtà sono riportate nelle note di rilascio 1.42.9
mwfearnley

1
Questo è uno strumento prezioso! Tuttavia, la tua risposta sarebbe migliore se spiegasse anche come usarla. È e2image -ar /dev/foo1 | gzip > fs.img.gz, o una sua variazione. Includi -fper usarlo su un fs montato.
marzo


0

se non vuoi ricorrere a strumenti aggiuntivi questo metodo dovrebbe essere più veloce di 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

Perché sarebbe più veloce di cat? (No, l'argomento della dimensione del blocco di ddnon aiuta)
marcelm


2
Sì, ma ciò non rende ddpiù veloce. In effetti, probabilmente rende catpiù veloce. La dimensione del blocco è importante solo per ridurre al minimo il sovraccarico delle chiamate di sistema e ottimizzare l'utilizzo della cache della CPU. Con il syscall overhead, si entra nell'area dei rendimenti decrescenti. La cache inizia a fare male sopra, diciamo, 1MiB. E quando si opera su dischi reali, si è comunque collegati a I / O e il punto è per lo più controverso. Prova a confrontarlo da solo.
marcelm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.