Come cancellare lo spazio su disco libero in Linux?

Quando un file viene eliminato, il suo contenuto può ancora essere lasciato nel filesystem, a less che non sia esplicitamente sovrascritto con qualcos'altro. Il command di wipe può cancellare i file in modo sicuro, ma non sembra consentire la cancellazione dello spazio libero su disco non utilizzato da alcun file.

Cosa devo usare per raggiungere questo objective?

Avviso: I moderni sisthemes di disco / SSD e moderni filesystem possono scurire i dati in luoghi in cui non è ansible eliminarli, in modo che questo process possa ancora lasciare dati sul disco. Gli unici modi sicuri per cancellare i dati sono il command ATA Secure Erase (se implementato correttamente) o la distruzione fisica. Vedi anche Come posso cancellare in modo affidabile tutte le informazioni su un disco rigido?

È ansible utilizzare una suite di strumenti chiamati secure-delete.

 sudo apt-get install secure-delete 

Ci sono quattro strumenti:

srm – eliminare correttamente un file esistente
smem – eliminare con sicurezza le tracce di un file da ram
sfill – pulisci tutto lo spazio indicato come vuoto sul disco rigido
sswap – cancella tutti i dati da te lo spazio di swap.

Dalla pagina dell'uomo di srm

srm è stato progettato per eliminare i dati sui media in maniera sicura che non può essere recuperata da ladri, autorità di legge o altre minacce. L'algorithm di pulizia si basa sulla carta "Cancellazione sicura dei dati dalla memory magnetica e solidale" presentata al 6 ° Usenix Security Symposium di Peter Gutmann, uno dei principali cryptographers civili.

Il process di cancellazione dei dati sicura di srm va in questo modo:

  • 1 passaggio con 0xff
  • 5 passaggi casuali. /dev/urandom è usato per un RNG sicuro se disponibile.
  • 27 passaggi con valori speciali definiti da Peter Gutmann.
  • 5 passaggi casuali. /dev/urandom è usato per un RNG sicuro se disponibile.
  • Rinominare il file ad un valore random
  • Troncare il file

Come misura supplementare di sicurezza, il file viene aperto in modalità O_SYNC e dopo each passaggio viene eseguita una chiamata fsync() . srm scrive i blocchi di 32k per la velocità, riempendo i buffer di cache di disco per costringerli a scorrere e sovrascrivere vecchi dati appartenenti al file.

Il modo più veloce, se avete bisogno di un solo passaggio e vuoi solo sostituire tutto con gli zeri, è:

 cat /dev/zero > zero.file sync rm zero.file 

(eseguito da una directory sul file system che si desidera cancellare)
(il command di sync è una misura di paranoia che assicura che tutti i dati siano scritti su un disco – un gestore di cache intelligente potrebbe elaborare la possibilità di annullare le scritture per qualsiasi block in sospeso quando il file è scollegato)

Durante questa operazione ci sarà un tempo in cui non ci sarà spazio libero sul filesystem, che può essere decine di secondi se il file risultante è grande e frammentato, quindi richiede un po 'di tempo per eliminarlo. Per ridurre il tempo in cui lo spazio libero è completamente zero:

 dd if=/dev/zero of=zero.small.file bs=1024 count=102400 cat /dev/zero > zero.file sync rm zero.small.file rm zero.file 

Questo dovrebbe essere sufficiente per impedire a qualcuno di leggere il vecchio contenuto di file senza una costosa operazione forense. Per una versione leggermente più sicura, ma più lenta, sostituire /dev/zero con /dev/urandom . Per una maggiore paranoia eseguire più passaggi con /dev/urandom , anche se per tale sforzo è necessario utilizzare l'utilità shred dal pacchetto coreutils:

 dd if=/dev/zero of=zero.small.file bs=1024 count=102400 shred -z zero.small.file cat /dev/zero > zero.file sync rm zero.small.file shred -z zero.file sync rm zero.file 

Si noti che nel precedente il piccolo file viene tagliato prima di creare il più grande, quindi può essere rimosso non appena il più grande è completo invece di wherer aspettare che venga tagliato lasciando il filesystem allo zero spazio libero per il tempo che prende. Il process di fusione con molto tempo su un file di grandi size e se non stai cercando di hide qualcosa dalla NSA, non è realmente necessario IMO.

Tutto quanto sopra dovrebbe funzionare su qualsiasi filesystem.

Limiti della dimensione del file:

Come sottolinea DanMoulding in un commento riportto di seguito, questo potrebbe avere problemi con il limis di dimensione di file su alcuni filesystem.

Per FAT32 sarebbe sicuramente una preoccupazione a causa del limite di file 2GiB: la maggior parte dei volumi sono più grandi di questi giorni (8TiB è il limite di dimensione del volume IIRC). È ansible lavorare in questo modo pipando l'output di grandi size cat /dev/zero usando la split per generare più file di size più piccole e adattare le fasi di eliminazione e eliminazione di conseguenza.

Con est2 / 3/4 è less preoccupante: con il block predefinito / comune 4K il limite di dimensione di file è 2TiB quindi dovresti avere un volume enorme per questo essere un problema (la dimensione massima del volume in queste condizioni è 16TiB).

Con i (ancora sperimentali) btrfs sia i file massimi che i formati di volume sono un massiccio 16EiB.

In NTFS la lunghezza massima del file è maggiore di quella del volume massimo anche in alcuni casi.

Punti di partenza per maggiori informazioni:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

Dispositivi virtuali

Come accennato nei commenti recentemente, ci sono considerazioni supplementari per i dispositivi virtuali:

  • Per i dischi virtuali poco allocati, altri methods come quelli utilizzati da zerofree saranno più veloci (anche se a differenza di cat e dd non è uno strumento standard che puoi contare su di essere disponibile in quasi tutti i sisthemes Unix).

  • Ricorda che l'azzeramento di un block su un dispositivo virtuale sparso non può cancellare il block sul dispositivo fisso sottostante, infatti vorrei andare fino a dire che è improbabile che il gestore virtuale del disco farà solo il block come non è più utilizzato in modo da poter essere assegnato a qualcos'altro in seguito.

  • Anche per i dispositivi virtuali a size fisse, non si può controllare where il dispositivo vive fisicamente in modo che possa essere spostato attorno alla sua posizione attuale o su un nuovo set di dischi fisici in qualsiasi momento e la maggior parte delle quali è ansible cancellare è la posizione corrente, non eventuali posizioni precedenti il ​​block potrebbe essere risieduto in passato.

  • Per i problemi sopra descritti nei dispositivi virtuali: a less che non controlliate l'host e che possano fare una spazzatura sicura del loro spazio non allocato dopo aver pulito i dischi nel VM o spostando il dispositivo virtuale, non c'è niente che puoi fare a questo riguardo fatto. L'unico ricorso è quello di utilizzare la crittografia completa del disco fin dall'inizio, in modo che niente di unencrypted sia scritto in primo luogo sui supporti fisici. Può ancora essere richiesto di eliminare una libera area all'interno della VM, ovviamente. Si noti inoltre che il FDE può rendere less diffusi i dispositivi virtuali, poiché il livello di virtualizzazione non può realmente vedere quali blocchi sono inutilizzati. Se lo strato di sistema del sistema operativo invia i comandi di trim al dispositivo virtuale (come se fosse un SSD) e il controller virtuale li interpreta, allora questo può risolvere questo problema, ma non so di alcuna circostanza in cui ciò sia effettivamente accaduto e un più ampio la discussione di questa è una questione altrove (stiamo già avvicinando ad essere fuori tema per la domanda originale, quindi se questo ha piqued il tuo interesse alcune questioni di sperimentazione e / o follow-up potrebbero essere in ordine).

AVVERTIMENTO

Sono rimasto scioccato da quanti file fotorec potrebbero recuperare dal mio disco, anche dopo aver pulito.

Se c'è più sicurezza nel riempire lo "spazio libero" solo una volta con 0x00 o 38 volte con standard cabalistici diversi è più una discussione accademica. L'autore del documento seminale del 1996 sulla frantumazione si è scritto in un'epilogo che dice che questo è obsoleto e inutile per l'hardware moderno. Non esiste un caso documentato di dati fisicamente sostituiti da zero e recuperati in seguito.

Il vero legame fragile in questa procedura è il filesystem . Alcuni filesystems riservano spazio per uso speciale e non sono disponibili come "spazio libero". Ma i tuoi dati potrebbero essere lì . Questo include foto, email personali di text normale, qualunque cosa. Ho appena visitato googled riservato + space + ext4 e ho appreso che il 5% della mia partizione di home era riservata. Immagino che questo sia il luogo in cui il fotografo ha trovato tanta parte della mia roba. Conclusione: il metodo di taglio non è il più importnte, anche il metodo a più passaggi lascia ancora i dati in atto .

Puoi provare # tune2fs -m 0 /dev/sdn0 prima di montarlo. (Se questa sarà la partizione di root dopo il riavvio, assicuratevi di eseguire -m 5 o -m 1 dopo averlo smontato).

Ma ancora, in un modo o nell'altro, potrebbe rimanere un po 'di spazio.

L'unico modo veramente sicuro è quello di rimuovere l'intera partizione, di creare nuovamente un filesystem e di ripristinare i file da un backup.


Modo veloce (consigliato)

Esegui da una directory sul file system che vuoi cancellare:

 dd if=/dev/zero of=zero.small.file bs=1024 count=102400 dd if=/dev/zero of=zero.file bs=1024 sync ; sleep 60 ; sync rm zero.small.file rm zero.file 

Note: lo scopo del piccolo file è quello di ridurre il tempo in cui lo spazio libero è completamente zero; lo scopo della sincronizzazione è assicurarsi che i dati siano effettivamente scritti.

Questo dovrebbe essere abbastanza buono per la maggior parte delle persone.

Lenta (paranoide)

Non vi è alcun caso documentato di recupero dei dati dopo la pulizia di cui sopra. Sarebbe costoso e richiedere risorse, se ansible.

Tuttavia, se avete ragione di pensare che le agenzie segnetworking avrebbero speso molte risorse per recuperare i tuoi file, questo dovrebbe essere sufficiente:

 dd if=/dev/urandom of=random.small.file bs=1024 count=102400 dd if=/dev/urandom of=random.file bs=1024 sync ; sleep 60 ; sync rm random.small.file rm random.file 

Ci vogliono molto più tempo.

Avvertimento. Se hai scelto il modo paranoico, dopo questo vuoi ancora fare la pulizia veloce, e non è paranoia. La presenza di dati puramente casuali è facile e poco costosa da rilevare e solleva il sospetto che siano in realtà dati crittografati. Puoi morire sotto la tortura per non rivelare la chiave di decrittazione.

Modo molto lento (paranoico pazzo)

Anche l'autore del documento seminal 1996 sul taglio ha scritto un'epilogo dicendo che questo è obsoleto e inutile per l'hardware moderno.

Ma se ancora hai un sacco di tempo libero e non ti dispiace perdere il tuo disco con un sacco di sovrascrittura, c'è che va:

 dd if=/dev/zero of=zero.small.file bs=1024 count=102400 sync ; sleep 60 ; sync shred -z zero.small.file dd if=/dev/zero of=zero.file bs=1024 sync ; sleep 60 ; sync rm zero.small.file shred -z zero.file sync ; sleep 60 ; sync rm zero.file 

Nota: questo è essenzialmente equivalente all'utilizzo dello strumento di eliminazione sicura.


Prima della modifica, questo post era una riscrittura di David Spillett. Il command "cat" genera un messaggio di errore, ma non posso scrivere commenti sui post di altre persone.

Alless in Ubuntu c'è l'utilità zerofree:

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

  zerofree — zero free blocks from ext2/3 file-systems zerofree finds the unallocated, non-zeroed blocks in an ext2 or ext3 filesystem (eg /dev/hda1) and fills them with zeroes. This is useful if the device on which this file-system resides is a disk image. In this case, depending on the type of disk image, a secondary utility may be able to reduce the size of the disk image after zerofree has been run. The usual way to achieve the same result (zeroing the unallocated blocks) is to run dd (1) to create a file full of zeroes that takes up the entire free space on the drive, and then delete this file. This has many disadvantages, which zerofree alleviates: · 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. filesystem has to be unmounted or mounted read-only for zerofree to work. It will exit with an error message if the filesystem is mounted writable. To remount the root file-system readonly, you can first switch to single user runlevel (telinit 1) then use mount -o remount,ro filesystem. 

Controlla anche questo link su zerofree: mantenendo scarse immagini di filesystem – è dal suo autore – Ron Yorston (9 agosto 2012)

Ecco come farlo con una GUI.

  1. Installare BleachBit
  2. Esegui come root facendo clic su Applicazioni – Strumenti di sistema – BleachBit come amministratore.
  3. Nelle preferenze, indicare i routes che si desidera. Generalmente li indovina bene. Si desidera includere un path writeable per each partizione. Generalmente si tratta di / home / username e / tmp, a less che non siano la stessa partizione, nel qual caso basta scegliere uno.
  4. Controllare la casella Sistema – Spazzare spazio libero su disco.
  5. Fare clic su Elimina.

L'avanzamento di BleachBit su dd (che altrimenti è molto bello) è quando il disco è finalmente pieno, BleachBit crea piccoli file per cancellare gli inodes (che contengono metadati come i nomi di file, ecc.).

Utilizzo dd per assegnare uno o più file grandi per riempire lo spazio libero, quindi utilizzare un'utilità di cancellazione sicura.

Per assegnare i file con dd provare:

 dd if=/dev/zero of=delete_me bs=1024 count=102400 

Questo genera un file denominato delete_me che è di 100 MB di dimensione. (Qui bs è la "dimensione del block" impostata a 1k e il count è il numero di blocchi da allocare.)

Quindi utilizzare l'utilità di cancellazione protetta preferita (che ho usato shred ) nei file così creati.

Ma NOTA: il buffer significa anche se si fa l' integer disco, non si può get assolutamente tutto!


Questo collegamento suggerisce la scrub per spazzare spazio libero. Non l'ho provato.

Pulire un'unità a velocità massima.

Le istruzioni tipiche per la crittografia di un'unità in questo momento vi diranno di prima di WIPE l'unità.

Il command riportto di seguito riempirà la tua unità con il codice ciphertext AES.

Utilizzare un CD live se è necessario cancellare l'unità di avvio principale.

Aprire un terminal e elevare i privilegi:

 sudo bash 

Lasciamo che tutti gli azionamenti del sistema siano sicuri:

 cat /proc/partitions 

NOTA: Sostituisci /dev/sd{x} con il dispositivo che desideri cancellare.

AVVERTENZA: questo non è per gli amatori! Potresti rendere il vostro sistema inaccessibile !!!

 sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x} 

Sono stupefatto di quanto sia veloce.

Probabilmente hai già installato il sistema GNU coreutils sul tuo sistema. Fornisce il command shred .

utilizzare dd e solo zero lo spazio libero. è un dato di mito che deve essere scritto oltre più volte (basta chiedere peter guntmann) e dati casuali, al contrario di 1 poi 0 significa attività innaturale. quindi il risultato finale è un drive pulito con less tempo trascorso a scrivere. inoltre, i programmi di cancellazione sicura cant guarentee sovrascrivono anche il file reale sui file system moderni (journaled). fai un favore e ottieni il fotoritouch, esegui la scansione del tuo disco per vedere il pasticcio, la pulisci con 1 e, opzionalmente, con gli zeri per renderlo inopportuno. se il fotoricettore trova ancora roba, ricorda che sta scansionando tutto ciò che è disponibile, quindi fai questo con attenzione con l'utente principale.

Ricorda, il cia / fbi / nsa non ha una macchina fantasiosa che può leggere lo stato effettivo dei bit di media magnetica. questo era solo un articolo scritto molto tempo fa. un "cosa-se". è sufficiente cancellare solo 1 volta.

Puoi cancellare il tuo spazio libero utilizzando un pacchetto di cancellazione sicura.

In quel pacchetto è ansible trovare lo strumento sfill , che è stato progettato per eliminare i dati che si trovano sul diskspace disponibile sui media in modo sicuro che non può essere recuperato da ladri, applicazione di legge o altre minacce.

Per installare il pacchetto di cancellazione sicura in Linux (Ubuntu), installarlo con il seguente command:

 $ sudo apt-get install secure-delete 

Quindi, per cancellare i tuoi dati, non è necessario utilizzare il seguente command:

 sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY 

Dove / YOUR_MOUNTPOINT / OR_DIRECTORY è il tuo punto di assembly ( df -h , mount ) o directory per cancellare lo spazio libero.

Leggi la manua:

http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html

Più facile è usare il macchia :

 scrub -X dump 

In questo modo verrà creata una cartella di dump nella posizione corrente e creare il file finché il disco non è pieno. È ansible scegliere un model con l'opzione -p ( nnsa|dod|bsi|old|fastold|gutmann ).

Non è facile get la scrub installata ( vedere i forum di Ubuntu su questo ), ma una volta che l'installazione è stata fatta, hai uno strumento davvero efficace e semplice in mano.

Ecco lo script "sdelete.sh" che utilizzo. Vedi i commenti per i dettagli.

 # Install the secure-delete package (sfill command). # To see progress type in new terminal: # watch -n 1 df -hm # Assuming that there is one partition (/dev/sda1). sfill writes to /. # The second pass writes in current directory and synchronizes data. # If you have a swap partition then disable it by editing /etc/fstab # and use "sswap" or similar to wipe it out. # Some filesystems such as ext4 reserve 5% of disk space # for special use, for example for the /home directory. # In such case sfill won't wipe out that free space. You # can remove that reserved space with the tune2fs command. # See http://superuser.com/a/150757 # and https://www.google.com/search?q=reserved+space+ext4+sfill sudo tune2fs -m 0 /dev/sda1 sudo tune2fs -l /dev/sda1 | grep 'Reserved block count' sudo sfill -vfllz / # sfill with the -f (fast) option won't synchronize the data to # make sure that all was actually written. Without the fast option # it is way too slow, so doing another pass in some other way with # synchronization. Unfortunately this does not seem to be perfect, # as I've watched free space by running the "watch -n 1 df -hm" # command and I could see that there was still some available space # left (tested on a SSD drive). dd if=/dev/zero of=zero.small.file bs=1024 count=102400 dd if=/dev/zero of=zero.file bs=1024 sync ; sleep 60 ; sync rm zero.small.file rm zero.file sudo tune2fs -m 5 /dev/sda1 sudo tune2fs -l /dev/sda1 | grep 'Reserved block count' 

Ho trovato una soluzione semplice che funziona su Linux e MacOS. Spostarsi nella cartella principale del disco e avviare questo command:

 for i in $(seq 1 //DISKSPACE//); do dd if=/dev/zero of=emptyfile${i} bs=1024 count=1048576; done; rm emptyfile*; 

where // ​​DISKSPACE // è la dimensione in GB del disco rigido.

A volte uso questo bash one-liner:

 while :; do cat /dev/zero > zero.$RANDOM; done 

Quando inizia a dire che il disco è pieno, basta premere Ctrl + C e rimuovere i file zero.* creati zero.* .

Funziona su qualsiasi sistema, indipendentemente dai limiti di dimensione del file.
Ignora qualsiasi cat: write error: File too large errori cat: write error: File too large .

Questa non è una risposta! Solo un commento per coloro che desiderano usare pv … quindi non preoccupatevi di votare.

Su Linux Mint 17.3 è ansible utilizzare pv ( pipe view ) per get un progresso della scrittura. Per esempio:

 # Install pv (pipe view) sudo apt-get install pv # Write huge file of approximate size of /dev/sdb, using urandom data: pv --timer --average-rate --progress --numbersc --eta --interval 5 --size "$(blockdev --getsize64 /dev/sda )" /dev/urandom >rand.file 

Il vantaggio qui è che si ottiene una barra di avanzamento, ETA e velocità di trasmissione continuamente aggiornata. Lo svantaggio è che questo è scritto su una row e quando il disco è pieno (restituendo un errore) scompare. Ciò accade perché la dimensione completa è approssimativa poiché il sistema operativo probabilmente userà il disco mentre questa operazione molto lunga sta avvenendo, specialmente sul volume di sistema.

Su un HD molto vecchio, ho un tasso di dati di circa 13 MB / s usando /dev/urandom e circa 70 MB / s , quando utilizzo /dev/zero . Questo probabilmente migliorerà ulteriormente quando si utilizza un grezzo greggio o un cat , e non pv .

Una volta che il file è scomparso dal record del sistema di file, i dati rimasti sul disco rigido sono sequenze senza significato di 1 e 0. Se stai cercando di sostituire quella sequenza senza significato con un'altra sequenza senza significato, posso consigliare alcuni prodotti commerciali per la cancellazione sicura di unità, come l'arconis.