Login page

Effettuare una copia del dispositivo

La prima azione da intraprendere, molto spesso, è quella di effettuare una copia del dispositivo, sia esso un CD, una chiave USB, una memoria esterna, il disco interno del computer, un lettore mp3 o una scheda SD, il tutto per evitare accidentali sovrascritture e usura del supporto.
Questa azione potrebbe non risultare necessaria con i CD/DVD non riscrivibili e con le schede SD, avendo la possibilità di settarle in modalità sola lettura, ma le operazioni di ripristino dei dati possono usurare ulteriormente il dispositivo, e portare alla ulteriore perdita di dati se questi sono rovinati.
Solitamente, appena cancellato un file, è necessario smontare il dispositivo o spegnere l'apparecchio per evitare che esso venga sovrascritto, a meno che non vi sia un programma che sta usando tale file, come ad esempio un film che viene riprodotto, perché in tal caso, finché il programma è in esecuzione, usando lsof, è ancora possibile ripristinare il file.
Prima di cominciare quindi ad effettuare una copia del dispositivo conviene realizzare quanto siano importanti i dati che si vogliono recuperare, verificare di avere spazio e tempo a sufficienza, controllare i software disponibili (nelle prossime pagina) per il recupero dati e verificare come funzionano, e decidere come agire.

Da ora in poi si supporrà di voler fare una copia del dispositivo e lavorare con essa, ma le indicazioni rimangono pressoché invariate se si lavora direttamente sul dispositivo stesso.

Innanzitutto è necessario montare il dispositivo in sola lettura. Quando un dispositivo esterno di memoria viene riconosciuto e montato dal sistema, sia esso GNU/Linux, BSD, Windows oppure MacOS, generalmente vengono scritti dei file temporanei.
Per evitare che scrivendo questi dati temporanei vengano sovrascritti dei dati sensibili, è necessario imporre il montaggio in sola lettura.
Spesso però questo non è comunque sufficiente, sopratutto se il filesystem del dispositivo è corrotto (sono stati fatti vari test a riguardo), e quindi è necessario utilizzare l'opzione loop, in generale usata per i file immagine dei dispositivi.
In sostanza, se si vuole montare un dispositivo dal quale si vogliono recuperare i dati, è necessario dare ad esempio mount -o ro,loop /dev/sdb1 /mnt/ dove sdb è come viene mappato il dispositivo sotto GNU/Linux, mentre il numero 1 è la partizione interessata. A questo punto, per non lavorare direttamente con il dispositivo (rischiando di sovrascrivere dei file o usurarlo ulteriormente), si procede solitamente nel seguente modo.

  • Si copiano da /mnt tutti i file che appaiono leggibili.
  • Si crea un file immagine quanto più fedele al dispositivo montato precedentemente, in modo da poter lavorare su di esso.
  • Creato il file immagine, si mette da parte il dispositivo dal quale si vogliono recuperare i dati.
  • Una volta recuperati i dati si può usare nuovamente il dispositivo, nel caso di filesystem corrotti conviene probabilmente riformattare il dispositivo, mentre nel caso di dischi rotti o difettosi conviene eliminarli.

La creazione di un file immagine può rilevarsi una operazione lunga, ma sopratutto onerosa per la quantità di spazio occupata. Se infatti un disco non era stato riempito del tutto, sarà comunque necessario copiare l'intero dispositivo per tentare il recupero dei file.
Se quindi erano stati usati soltanto 50GB su 500, si dovranno occupare su un secondo disco 450GB di spazio vuoto che non serve. Anche per questo motivo è solitamente consigliato dividere il disco in più partizione, se ad esempio il disco fosse stato diviso in 5 partizioni da 100GB l'una, non sarebbe stato necessario copiare l'intero disco, ma soltanto le partizione interessata.
Infine potrebbe anche succede di avere un disco da 500GB pieno, e che sia stato cancellato un file, anche piccolo, per sbaglio. Anche in questo caso, durante la copia del dispositivo, verranno copiate 500GB di informazioni non necessarie per recuperare i dati.
In tali casi conviene non effettare una copia del device ma montarlo in lettura e tentare direttamente il recupero.
Se invece i file da recuperare sono tanti, ad esempio perché si è danneggiato il file system o cancellata una partizione, allora conviene fare la copia del device, anche perché il trasferimento dei dati da una memoria esterna ad una interna può fare da collo di bottiglia, quindi per velocizzare l'operazione di recupero è più veloce lavorare sul disco interno con il file immagine.

Si noti che gli strumenti presentati di seguito non richiedono il montaggio del dispositivo, basta che questo venga riconosciuto dal sistema. Vi sono sostanzialmente quattro programmi per tentare di copiare il dispositivo

  • dd
  • ddrescue
  • gddrescue
  • myrescue
  • Savehd7
  • recoverdm

I primi quattro programmi sono presenti nei repository di Debian (e quindi anche in Ubuntu e altre derivate), mentre l'ultimo programma, Savehd7, è al momento riportato soltanto per completezza, per poterlo utilizzare su Debian è infatti necessario compilarlo.
Solitamente un programma è più che sufficienti per creare la copia di un dispositivo, per completezza ne è stato riportato più di uno e il funzionamento di quelli testati.

dd

Se il motivo della perdita dei dati non è un filesystem corrotto, ma una propria distrazione (ad esempio svuotamento del cestino, rimozione file da terminale, formattazione partizione), allora dd risulta più che sufficiente per creare una copia di backup. Tramite il seguente comando si effettua la copia della partizione sdb1 all'interno della propria home: dd if=/dev/sdb1 of=~/sdb1.img bs=4096 conv=noerror.
In futuro si supporrà di voler salvare sempre i dati da quella partizione.
Se non si ha spazio a sufficienza nella propria home, oppure se si vuole salvare il file immagine in un'altra posizione, basta dare il percorso voluto subito dopo il parametro of. L'opzione bs indica quanti blocchi alla volta copiare, il parametro mostrato dovrebbe andare bene per la maggior parte dei casi, mentre l'opzione noerror indica che la copia non si deve interrompere in presenza di errori.
L'uso di dd, per quanto comodo e semplice sia tale programma, è generalmente sconsigliato a favore di ddrescue e gddrescue, esso non è infatti in grado di reagire bene di fronte a degli errori, se quindi il filesystem dovesse essere corrotto la copia che si otterrebbe tramite dd potrebbe essere poco affidabile.
Nel caso non fosse possibile leggere le partizioni, ad esempio poiché la partizione è stata cancellata, è comunque possibile fare una copia dell'intero positivio sostituendo sdb1 con sdb.
In alternativa a dd è possibile usare, con la stessa sintassi, dcfldd, una versione di dd modificata dal U.S. Department of Defense Computer Forensics Lab.

ddrescue

Il comando ddrescue è più resistente in confronto a dd per la creazione di un file immagine, e il suo utilizzo è altrettanto semplice. Tramite il comando dd_rescue -v -l ~/sdb1.log /dev/sdb1 ~/sdb1.img si crea, in modo analogo a dd, una copia all'interno della propria home.
Le opzioni -v -l /sdb1.log servono per avere un log quanto più ricco possibile dell'operazione. Ovviamente nessuna delle opzioni sono obbligatorie, ma comunque consigliate.
L'ultimo argomento del comando è dove salvare il file immagine, mentre il penultimo è il device a cui si è interessati, come nel caso precedente è necessario assicurarsi di avere nella propria home spazio a sufficienza, altrimenti cambiare il percorso del file di output.

gddrescue

Nonostante la somiglianza del nome di questo programma a quello precedente (gddrescue sta per GNU ddrescue, mentre l'altro programma è fornito da Kurt Garloff), tale programma non condivide il proprio codice con ddrescue e non si tratta nemmeno di una versione precedente o successiva. Leggendo la documentazione sembra che gddrescue sia ancora più resistente in confronto, in rete si trovano anche dei confronti pratici, come ad esempio qua. Dal momento che ambedue i programmi sono presenti nei repository è possibile scegliere il programma che si preferisce, anche se gddrescue dovrebbe risultare più performante e adatto di ddrescue. Tramite il comando ddrescue -v -r3 /dev/sdb1 ~/sdb1.img ~/sdb1.log si crea il file immagine di una partizione.

Si noti che il pacchetto gddrescue fornisce il comando ddrescue, mentre il pacchetto ddrescue fornisce il comando dd_rescue, pertanto sui sistemi Debian e derivate è possibile avere ambedue gli strumenti installati in contemporanea.Non è detto che ciò sia possibile su altri sistemi operativi e non è detto che i nomi dei programmi siano gli stessi.

myrescue

Myrescue è un programma considerato ancora beta che non ho avuto occasione di provare. Leggendo la documentazione vuole lavorare come ddrescue/gddrescue, ma trattare in modo differente gli errori, ovvero occuparsi prima delle aree non danneggiate e successivamente delle aree danneggiate, per evitare di rovinare il disco (tramite usura e riscaldamento delle testine) sin dall'inizione.

savehd7

savehd7 è un programma interattivo in circolazione da molto tempo ma che non è incluso nei repository di debian. Per installarlo è necessario compilare l'interprete seed7 come riportato sulla homepage ufficiale.

recoverdm

recoverdm è un altro programma pensato per quando si hanno settori danneggiati che rendono difficoltosa la lettura dei dati e si vuole creare una immagine del dispositivo. Ciò che è interessante di questo programma è che è stato pensato per i CD/DVD, e viene nominata una utility chiamata mergebad per fare il merge di diverse immagini in una sola. Così se si hanno diversi CD uguali e tutti rovinati, aumentano le probabilità di riuscire ad ottenere una immagine pulita. Purtroppo sulla homepage ufficiale non ho trovato guide in merito.

safecopy

Anche safecopy è un programma che tenta di recuperare da un dispositivo quanti più file possibili, è possibile trovare maggiori informazioni al seguente link, tale programma è inoltre presente nei repository di debian, anche se non lo ho mai testato. Leggendo i commenti sembra che il programma permetta di avere un controllo più granulare sul recupero dei dati, sopratutto in presenza di errori sul dispositivo, al contrario di, ad esempio, ddrescue, che è maggiormente automatizzato.

Questo è l'elenco degli articoli di questa categoria:

Ripulire Debian: Ripulire Debian da linea di comando
Come recuperare dati persi: come recuperare dati persi o cancellati