# [HOWTO] data recovery

## tuxer

 QUESTA GUIDA NON VERRA PIU' AGGIORNATA, UNA VERSIONE AGGIORNATA E PIU' LEGGIBILE SI TROVA SUL WIKI, http://wiki.gentoo-italia.net/index.php/Data_recovery

Ho voluto riassumere in questo breve howto alcune tecniche di data recovery per

cercare di risparmiare qualche infarto agli amici gentooiani.

Questo non vuole essere una guida completa (o meglio vorrebbe ma non può poverina), e

visto che so che ci sono molti di voi che ne sanno più di me vi invito a darmi una mano...

Tratterò le seguenti tipologie di tragedia:

- Perdita di dati generica

- Corruzione della tabella delle partizioni

- Disastri e rimedi con lvm2

- Corruzione fisica dell'hard disk

In generale le cosa importante  da ricordare è che non bisogna mai disperare, fino a che non sovrascriviamo quei particolari settori i nostri dati sono ancora lì, sul disco fisso.

Perciò è importantissimo se pensate di aver fatto un danno spegnere tutto e rientrare nel vostro sistema con un cd live (gentoo o knoppix) magari passando l'opzione noswap al kernel, che non si sa mai.

Perdita di dati generica:

Caso più comune, può essere dovuto a un rm -rf di troppo, un filesystem corrotto o altro.

Molto importante in questo caso è non montare mai la partizione con i permessi di scrittura, primo perché non è necessario e secondo potremmo fare danni irreparabili se sbagliamo qualcosa.

Reiserfs3:

```
umount /mnt/reiser
```

Ora bisogna cercare di ricostruire il possibile, ad esempio

```
reiserfsck -S --rebuild-tree -l recover.log /dev/reiser
```

Questo comando fa passare tutta la partizione (ci impiega molto infatti) in cerca di file e li mette nella cartella

lost+found.

```
mount /mnt/reiser
```

Date un occhiata al recuperato e copiate quello che vi interessa al sicuro.

Ext2:

Con questo file system abbiamo addirittura l'undelete!

In pratica bisogna ritrovare gli inode dei file cancellati e ripristinarli.

```
echo lsdel | debugfs /dev/ext2  > deleted.out
```

Poi controlliamo gli inode e recuperiamo quello che ci interessa.

```
debugfs -w /dev/ext2

stat <inode>

undel <inode> <path>

```

Siccome lo uso molto poco non conosco sistemi di recovery automatici, fatemi sapere se esistono.

Ext3:

Si può usare lo stesso sistema di ext2.

Ntfs:

Ebbene sì, anche con questo file system redmondiano si possono perdere dati (sembra incredibile vero?).

Qui non conviene usare tool linuxari ma dei programmi per windows.

Io consiglio getdataback for ntfs, fa miracoli è leggero e abbastanza semplice da utilizzare.

Per cui bootate il vostro pc da un altro disco fisso, seguite le istruzioni di getdataback e buona fortuna  :Smile: 

Fat:

Valgono le stesse cose che ho detto per NTFS, se volete stare sullo stesso prodotto c'è getdataback anche per fat.

Nel caso in cui nessuno di questi sistemi semiautomatici abbia successo e quei dati siano veramente fondamentali

consiglio un ultima spiaggia, accesso raw ai dati, cioè la parte più divertente.

Il concetto è molto semplice, se quei dati ci sono ancora sono da qualche parte nel disco e noi in qualche modo possiamo ancora tirarli fuori.

Supponiamo che noi abbiamo un importantissimo file sorgente <best_operating_system.c> e vogliamo recuperarlo.

Gli strumenti necessari sono pochi ma buoni: dd, grep, un editor esadecimale e una calcolatrice.

Di editor esadecimali ne ho provati un po', il più completo è probabilmente biew ma hexedit (leggerissimo) forse è addirittura più comodo.

```
emerge hexedit ||

emerge biew
```

Prima di tutto si suppone che vi ricordiate qualche stringa (magari univoca) da quel file particolare.

Poi bisogna trovare in quale device si trova (soprattutto se usiamo lvm), per  questo basta un

```
grep -b <stringa> <dev1> <dev2> ...
```

che vi restituirà i device che matchano quella particolare stringa.

Poi lanciate il vostro editor hex di fiducia

```
hexedit /dev/hdd
```

Andate in modo testo (con tab) e premendo ctrl-s cercate la vostra stringa.

Se siete fortunati troverete il testo che cercate, allora annotate la posizione a sinistra e fate due conti, si tratta semplicemente di convertire in base 10 il numero iniziale e dare una stima della grandezza del file da recuperare.

I pigri possono usare anche python

```
python

int(numero)
```

e otteniamo il numero in forma decimale.

Con queste informazioni recuperiamo il materiale:

```
dd if=/dev/hdd of=recovered bs=1 count=1000 skip=232323
```

Con questo comando vado a pescare all'offsset di skip 1000 byte e li metto nel file recovered.

Per file binari la situazione è più complicata ma volendo con i magic bytes si può riuscire a ricavare qualcosa con un po' di pazienza.

Ho anche assunto molto ottimisticamente che i dati siano contigui su disco, spesso non è così ma il ragionamento vale comunque e in ogni caso trovando l'inode di un particolare file è probabilmente possibile risalire ai suoi pezzi sparsi per il disco.

Corruzione della tabella delle partizioni

Apparentemente il caso più disastroso, la tabella delle partizioni è stata riscritta o è corrotta, i nostri amati sistemi operativi non partono più!

Non disperate anche in questo caso nulla è perduto, a meno che non abbiate riscritto proprio quei settori nel disco fisso ci sono ancora i delimitatori delle partizioni, che permettono di ricostruirle.

Consiglio di salvare il proprio mbr con questo semplicissimo comando:

```
dd if=/dev/<dev> of=mbr.bin bs=512 count=1
```

Per ripristinarlo basterà un

```
dd if=mbr.bin of=/dev/<dev> count=1 bs=512
```

Se non avete salvato una copia del vostro mbr le possibilità di salvezza rimangono:

1. ricordate a memoria inizio fine (dei cilindri teste e settori) di ogni partizione con relativo tipo

e riscrivete la tabella delle partizioni a mano

2. li cercate a mano, a questo proposito consiglio ultimate boot cd, ci sono degli ottimi strumentini

al suo interno, anche se non tutti funzionano con dischi sata.

http://www.ultimatebootcd.com/

3. usate gpart, questo piccolo piccolo programmino fa proprio questo lavoro, e lo fa anche molto bene.

http://www.stud.uni-hannover.de/user/76201/gpart/

Gpart purtroppo non è incluso nel cd live di gentoo (si potrebbe includere sono 50k) e dovrete usare knoppix...

Un esempio di lettura/riscrittura di una tabella di partizioni corrotta potrebbe essere:

```
gpart -W -v  -b mbr.bin /dev/sda /dev/sda
```

Questo comando scrive la tabella delle partizioni trovata sul disco, salvando la vecchia in mbr.bin, per il resto man gpart...

Disastri e rimedi con lvm2:

Immagino che chi leggerà questa sezione saprà già perfettamente cos'è lvm2 perciò non mi dilungo e punto all'ottimo howto per gli altri.

http://www.gentoo.org/doc/en/lvm2.xml

Tutte le perdite di dati normali vanno sempre nel punto uno, in quanto per il sistema operativo i logical volume di lvm sono delle normalissime partizioni.

Il problema insorge quando ci una delle pv decide di andarsene o per errore la togliamo/cancelliamo.

Se in una vg ci sono due dischi: /dev/sda e /dev/sdb identificati (per esempio) in modo univoco

da lvm dalle stringhe 'a2132sdfs' e 'sdfsl232' e togliamo brutalmente /dev/sdb al riavvio non andrà più nulla,

perché la nostra vg non riesce a trovare una delle sue componenti.

Se il disco non è rotto possiamo risolvere questo problema in questo modo

Inseriamo il cd live di gentoo (qui è knoppix a non avere il supporto per lvm).

Se /etc non era disgraziatamente in una lv dopo aver bootato con il cd live dare i seguenti comandi:

```

modprobe dm-mod

vgchange -a y

```

In questo modo cerchiamo di riattivare tutte le vg presenti sui dischi fissi, questo comando è destinato a fallire ma è utile perché restituisce la stringa che identifica univocamente la pv perduta.

Poi andiamo a prendere i file di backup (possono essere anche più di uno se avete più vg) e facciamo il recupero vero e proprio.

```

mount /dev/<dev> /mnt/gentoo

cp /mnt/gentoo/etc/lvm/backup/* .

pvcreate --uuid 'sdfsl232' /dev/<dev2>

vgcfgrestore --file <vg> vg

```

In caso di rottura di una pv si può rimediare in modo abbastanza barbaro creando una nuova pv su un device qualsiasi chiamata con lo stesso uuid (sequenza dei comandi come sopra), ho provato ed effettivamente funziona.

In questo modo magari non tutti i dati verranno recuperati, ma sicuramente le lv che non utilizzavano la pv rotta torneranno a in vita!

Corruzione fisica dell'hard disk:

In questo caso (che purtroppo non è affatto straordinario) la faccenda si complica...

Gli hard disk moderni hanno comunque degli attributi chiamati SMART (devono essere abilitati dal bios spesso) che permettono di monitorare lo stato di salute del disco, leggetevi questo ottimo howto:

[url]http://gentoo-wiki.com/HOWTO_Monitor_your_hard_disk(s)_with_smartmontools[/url]

Ci sono vari tipi di attributi e non tutti sono così gravi, probabilmente l'attributo più indicativo sono i bad clusters, cioè dei piccoli pezzi del disco corrotti e inutilizzabili.

Al momento della formattazione molti filesystems li riconoscono e non li utilizzano, ma se il numero di bad clusters aumenta vuol dire che il disco si sta rompendo irrimediabilmente!

Un altro parametro importante e lugubre è il lifetime, cioè il tempo di vita che rimane al nostro povero disco.

Esperienza personale, avevo un maxtor la cui garanzia scadeva in Agosto, a Maggio gli attributi smart mi dicono che il mio disco dovrebbe morire entro tre mesi (giusto appena dopo la garanzia).

Faccio test e controtest finchè il test della maxtor non mi dà un errore, piazzo il disco in una scatola, gli incollo sopra l'errore e me ne rimandano uno nuovo!

Se il disco si rompe del tutto purtroppo non posso aiutarvi, ma ci sono delle aziende che lo faranno molto volentieri (anche se a un prezzo piuttosto alto).

PS to be continued... Intanto correggetemi aggiungete qualcosa o linkate che completo l'howto

edit:

-aggiunto il backup dell'mbr con dd

-aggiunto link a ultimate boot cd

-aggiunte info su lvm

-aggiunta sezione sui guasti fisici

-aggiunto accesso raw ai dati

-prova di rimozione pv effettuata

Last edited by tuxer on Thu May 05, 2005 4:05 pm; edited 7 times in total

----------

## fedeliallalinea

Per la corruzione della tabella dell partizioni io consiglio di salvarsi l'output di

```
# fdisk -l /dev/hdX
```

da qualche parte, cosi' si sa i blocchi di inizio e fine di una partizione

----------

## FonderiaDigitale

molto interessante, specie la parte lvm, che non sapevo. grazie

----------

## gutter

Ottimo davvero interessante complimenti  :Smile: 

Ti va di metterlo nel wiki?

----------

## fedeliallalinea

Aggiunto ai post utilissimi sezione howto

----------

## tuxer

eh eh addirittura ragazzi troppo buoni  :Embarassed:   :Embarassed: 

 *Quote:*   

> Ti va di metterlo nel wiki?

 

Ma sì certo che mi va, se mai mandami un pm dicendomi che devo fare che eseguo...

Comunque queste sono solo le ultime cose che mi ricordo, mettendo insieme tutto il resto pensavo di fare magari più howto dedicati ai vari casi...

Ora comunque risveglio un vecchio hard disk e ci faccio su di tutto, stay tuned  :Smile: 

----------

## Cazzantonio

Bellissimo howto!  :Very Happy: 

Finora mi ero sempre affidato alla soluzione prima proposta da fedeli ma ottimi gli altri consigli  :Very Happy: 

 *tuxer wrote:*   

> Gpart purtroppo non è incluso nel cd live di gentoo (si potrebbe includere sono 50k)

 

Per quanto riguarda questo io posterei su bugzilla per suggerire la sua inclusione... penso meriti  :Wink: 

----------

## tuxer

Per gpart mi hanno anticipato  :Smile: 

Avevo guardato pochi giorni fa e non avevo trovato nulla, beh meglio così e speriamo lo includano presto!

----------

## tuxer

Ok mi sono iscritto al wiki..

Siccome però sono pigro mi domandavo non esiste un traduttore automatico bbcode -> mediawiki?

non penso che sarebbe nemmeno tanto difficile però se c'è già meglio  :Very Happy: 

----------

## fedeliallalinea

Io ne ho fatto uno che trovi qui. L'utilizzo e'

```
$ ./bbcode2wiki filebbcode > filewiki
```

----------

## tuxer

Mitico grazie mille!

l'ho messo http://wiki.gentoo-italia.net/index.php/Data_recovery

poi appena ho tempo sistemo un po' contenuti e formattazione...

----------

## Josuke

ottima questa guida...veramente interessante..così ho fatto chiarezza su alcuni dubbi che avevo  :Smile: 

----------

## neryo

 *tuxer wrote:*   

> Mitico grazie mille!
> 
> l'ho messo http://wiki.gentoo-italia.net/index.php/Data_recovery
> 
> poi appena ho tempo sistemo un po' contenuti e formattazione...

 

ottima guida davvero...  :Shocked: 

Sarebbe interessante completarla con la traduzione della guida a smartmontools!  :Wink: 

EDIT: Come non detto... esiste gia' e quindi la linko https://forums.gentoo.org/viewtopic-t-211775-highlight-smartmontools.html

----------

## neryo

Ho fatto partire lo SMART Extended Self Test quello piu approfondito insomma sul mio disco.... 

```

bash-2.05b# smartctl -t long /dev/hda

smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===

Sending command: "Execute SMART Extended self-test routine immediately in off-li

ne mode".

Drive command "Execute SMART Extended self-test routine immediately in off-line 

mode" successful.

Testing has begun.

Please wait 17 minutes for test to complete.

Test will complete after Wed Apr 27 21:04:41 2005

Use smartctl -X to abort test.

bash-2.05b#

```

Quando ha finito mi e' venuto fuori che il mio lifetime rimanente e' 25 ore in questo momento..

```
bash-2.05b# smartctl -l selftest /dev/hda

smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===

SMART Self-test log structure revision number 1

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error

# 1  Extended offline    Completed without error       00%        25         -

bash-2.05b#
```

Veramente quando scade non mi funge piu l'hd??!?!  :Shocked:  se e' cosi' spero vivamente che si sbagli...

Queste sono le info del mio disco..

```
bash-2.05b# smartctl -i /dev/hda

smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===

Device Model:     Maxtor 6E040L0

Serial Number:    E112GBEN

Firmware Version: NAR61EA0

User Capacity:    41,110,142,976 bytes

Device is:        In smartctl database [for details use: -P show]

ATA Version is:   7

ATA Standard is:  ATA/ATAPI-7 T13 1532D revision 0

Local Time is:    Thu Apr 28 05:46:34 2005 Local time zone must be set--see zic m

SMART support is: Available - device has SMART capability.

SMART support is: Enabled

bash-2.05b#
```

 :Crying or Very sad: 

----------

## tuxer

Beh non ci indovina sempre, mi sembra strano soprattutto che il test sia finito senza errori e il disco abbia così poche ore di vita!

Comunque fai qualche backup e se il tuo disco è ancora in garanzia fai i test dei produttori così magari riesci a fartelo sostituire!

----------

## neryo

 *tuxer wrote:*   

> Beh non ci indovina sempre, mi sembra strano soprattutto che il test sia finito senza errori e il disco abbia così poche ore di vita!
> 
> Comunque fai qualche backup e se il tuo disco è ancora in garanzia fai i test dei produttori così magari riesci a fartelo sostituire!

 

da quello che ho capito, rinciando lo stesso test e' che il lifetime e' il tempo di accensione del disco e non il tempo rimanente di vita.. perche' dopo averlo rieseguito e' aumentato sommando le ore trascorse.... cmq mi informo meglio!  :Wink: 

----------

## tuxer

No no impossibile, altrimenti non mi darebbe 700 ore sul mio disco a casa...

----------

## randomaze

 *tuxer wrote:*   

> No no impossibile, altrimenti non mi darebbe 700 ore sul mio disco a casa...

 

COnfermo che da me grossomodo il numero é giusto.

Peraltro faccio notare che secondo quell'incolonnamento 'Remaining' é una colonna (suppongo sia la percentuale di test rimanenti o simili) e 'LifeTime' un'altra... quindi lo leggerei correttamente come "Tempo di vita/utilizzo dell'HD".

Non credo sia possibile fornire una scadenza per l'HD, il valore che viene fornito di solito é l'MTBF (credo di avere messo le lettere giuste nella giusta sequenza...) che é il tempo medio riscontrato nei test per avere un failure...

----------

## tuxer

Sì magari ho letto male, ora non posso controllare perché ho due sata qui...

Comunque probabilmente si basa sul MTBF, ma probabilmente controllerà anche altri attributi, altrimenti non mi sarei mai accorto che il mio maxtor si stava rompendo (mi aveva dato 2 mesi di vita e in effetti si stava rompendo)

----------

## gutter

 *neryo wrote:*   

> 
> 
> da quello che ho capito, rinciando lo stesso test e' che il lifetime e' il tempo di accensione del disco e non il tempo rimanente di vita.. perche' dopo averlo rieseguito e' aumentato sommando le ore trascorse.... cmq mi informo meglio! 

 

Esattamente  :Wink: 

----------

## tuxer

Ah ho capito solo adesso!

Sì allora può essere che indichi le ore trascorse in totale, io parlavo di tempo di vita rimasto perché a quei tempi (2 anni fa) usavo windows e c'era un programmino che mi diceva proprio il tempo di vita rimasto, comunque mi documento meglio e faccio le dovute correzioni...

Qualsiasi altro bug report è ben accetto...

Ma come mi conviene fare, io vorrei che fosse aggiornata sia qui che sul wiki la guida, però potrebbe diventare un casino, che consigliate?

----------

## gutter

 *tuxer wrote:*   

> 
> 
> Ma come mi conviene fare, io vorrei che fosse aggiornata sia qui che sul wiki la guida, però potrebbe diventare un casino, che consigliate?

 

Modifichi ogni volta tutte e due le guide. Non è una soluzione ottima ma io per ora mi regolo così.

----------

## tuxer

Argh no  :Very Happy: 

Secondo me sarebbe meglio scriverlo da un parte sola e poi convertirlo nell'altro formato, e se si potesse anche farlo postare da solo meglio ancora  :Very Happy: 

Comunque pensavo che sarebbe meglio fare un convertiore mediawiki -> bbcode che è meno complesso come costrutti...

 *Quote:*   

> Io ne ho fatto uno che trovi qui. L'utilizzo e' 

 

Ho usato il tuo scriptino e funziona però pensavo, mandare in pipe ogni volta tutto a ogni sed non mi sembra molto elegante/efficiente, in che altro modo si potrebbe fare??

----------

## neryo

Eccomi qua con il test 3..  Sembra confermare l'ipotesi che il discusso LifeTime(hours) e' il tempo trascorso dall'accensione del disco.. Mi sembrava strano che il mio hd fosse gia' da buttare....  :Laughing: 

```
bash-2.05b#  smartctl -l selftest /dev/hda

smartctl version 5.33 [i686-pc-linux-gnu] Copyright (C) 2002-4 Bruce Allen

Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===

SMART Self-test log structure revision number 1

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error

# 1  Short offline       Completed without error       00%        43         -

# 2  Extended offline    Completed without error       00%        33         -

# 3  Extended offline    Completed without error       00%        25         -

```

Ora posso dormire tranquillo... almeno per il momento!  :Wink: 

----------

## randomaze

 *neryo wrote:*   

> Eccomi qua con il test 3..  Sembra confermare l'ipotesi che il discusso LifeTime(hours) e' il tempo trascorso dall'accensione del disco.. Mi sembrava strano che il mio hd fosse gia' da buttare....  

 

Peraltro scusa la domanda ma se quel valore é corretto 25 ore significa che hai comprato l'HD l'altro ieri (o la settimana scorsa...), perché hai pensato che un HD nuovo fosse "in scadenza"???

----------

## neryo

 *randomaze wrote:*   

>  *neryo wrote:*   Eccomi qua con il test 3..  Sembra confermare l'ipotesi che il discusso LifeTime(hours) e' il tempo trascorso dall'accensione del disco.. Mi sembrava strano che il mio hd fosse gia' da buttare....   
> 
> Peraltro scusa la domanda ma se quel valore é corretto 25 ore significa che hai comprato l'HD l'altro ieri (o la settimana scorsa...), perché hai pensato che un HD nuovo fosse "in scadenza"???

 

mh.. l'hard disk in questione non e' nuovo ma usato!   :Wink: 

cmq penso che il life time si azzeri ad ogni poweroff.. quindi in pratica e' il tempo di accensione della macchina... quindi non il tempo di vita da quando e' stato acceso la prima volta.. cmq appena faccio un reboot faccio un altro test.. oppure fatelo voi!

 :Laughing: 

----------

## neryo

Articoletto interessante sugli hard disk

 *Quote:*   

> La  vita  di un hard disk e' determinata da quattro fattori:
> 
> il  numero  di accensioni e spegnimenti del motore che mette
> 
> in  rotazione i piatti, il numero di ore in cui resta acceso
> ...

 

 :Wink: 

----------

## gutter

 *neryo wrote:*   

> 
> 
> cmq penso che il life time si azzeri ad ogni poweroff.. quindi in pratica e' il tempo di accensione della macchina... quindi non il tempo di vita da quando e' stato acceso la prima volta..
> 
> 

 

Non credo, da quello che ho letto e dalle info del mio disco:

```
SMART Self-test log structure revision number 1

Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error

# 1  Extended offline    Completed without error       00%      1349         -

# 2  Extended offline    Completed without error       00%      1281         -

# 3  Extended offline    Completed without error       00%      1188         -

# 4  Extended offline    Completed without error       00%      1103         -

# 5  Extended offline    Completed without error       00%      1038         -

# 6  Extended offline    Completed without error       00%       939         -

# 7  Extended offline    Completed without error       00%       939         -

# 8  Extended offline    Completed without error       00%       836         -

# 9  Extended offline    Completed without error       00%       736         -

#10  Extended offline    Completed without error       00%       649         -

#11  Short offline       Completed without error       00%       645         -
```

quel parametro rappresenta le ore di funzionamento del disco.

----------

## neryo

 *gutter wrote:*   

> 
> 
> quel parametro rappresenta le ore di funzionamento del disco.

 

mhhh interessante.. quindi vuoi dire che ho preso un harddisk usato come nuovo perfettamente funzionante...  :Rolling Eyes:  ...eh ci vuole fortuna..

----------

## tuxer

Aggiornato un po' la guida, ora ho trasferito sul wiki, aggiornarle tutte e due mi pare uno spreco inutile di energie (e poi là posso formattarla molto meglio)...

----------

## timofonic

I can't download http://www.orson.it/~fedeliallalinea/bbcode2wiki.sh

I need it for convert phpbb2 forum to tikiwiki, please put it or send it as PM

Regards

----------

## .:deadhead:.

Ciao tuxer, vedi se riesci ad integrare il mio howto con il tuo sul wiki  :Very Happy:  https://forums.gentoo.org/viewtopic-p-2923144.html

----------

