GNU ddrescue per recuperar dades de discs durs

L’altre dia (uf, ja fa un mes d’això!) vaig explicar la mala sort que vaig tenir quan dos discs durs tenien errors dels tres que tinc al meu ordinador. Abans d’ahir vaig començar les tasques de recuperació de dades, amb el programa GNU ddrescue. Al mateix manual en línia de ddrescue hi ha exemples molt útils, el primer dels quals és el que necessito jo. Anem per feina.

Recordo que l’objectiu és recuperar les dades de dos discos idèntics de 500 GB a un tercer disc auxiliar de la mateixa capacitat, que em va deixar un bon amic meu. És obvi que l’auxiliar ha de ser de la mateixa capacitat o major que el disc que volem recuperar. Primer ho intentaré amb un disc i després amb l’altre. El paràmetre de ddrescue -n o –no-split no intenta dividir o reintentar blocs fallits, i això faig a la primera passada:

root@jau:~# ddrescue -n /dev/sda /dev/sdb ddrescue-sda-a-sdb.log

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:         0 B,  errsize:       0 B,  errors:       0
Current status
rescued:   500107 MB,  errsize:    143 kB,  current rate:    10265 B/s
ipos:       29744 kB,   errors:      36,    average rate:   14150 kB/s
opos:       29744 kB,     time from last successful read:       0 s
Finished

El procés ha trigat unes 10 hores. Cosa que podem comprovar a partir de les dades informatives anteriors:
500107 MB / 14,150 MB/s / 3600 s/h ≈ 9,8 hores.

Tot seguit executo ddrescue amb les opcions -d–direct , que usa accés directe al disc d’entrada, i -r o –max-retries=<n>, que surt després de n intents. Li passo el mateix nom de fitxer de log que a la comanda anterior i així ddrescue sap que només ha de buscar els sectors on ha tingut problemes durant la primera lectura:

root@jau:~# ddrescue -dr3 /dev/sda /dev/sdb ddrescue-sda-a-sdb.log

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   500107 MB,  errsize:    143 kB,  errors:      36
Current status
rescued:   500107 MB,  errsize:   17920 B,  current rate:        0 B/s
   ipos:    34765 MB,   errors:      35,    average rate:       48 B/s
   opos:    34765 MB,     time from last successful read:    23.7 m
Finished

Després de 3 intents i uns 45 minuts més, he passat de 143 kB amb errors a 17,92 kB. No està malament.

A partir d’ara ja treballarem amb el disc rèplica de l’afectat; sdb en aquest cas. Ara toca refer la taula de particions del disc:

fdisk /dev/sdb

Teclejo:

p imprimeix la taula de particions, per veure si aquesta és correcta. Té una única partició, com esperava.
w escriu la taula al disc i surt, per desar-la i sortir.

A continuació cal revisar el sistema de fitxers d’aquesta partició. En el meu cas ja sé que els dos discos durs tenien el sistema de fitxers reisersfs. Per tant:

reiserfsck -f --logfile reiserfsck-check-sdb1.log /dev/sdb1
reiserfsck 3.6.21 (2009 www.namesys.com)

*************************************************************
** If you are using the latest reiserfsprogs and  it fails **
** please  email bug reports to reiserfs-list@namesys.com, **
** providing  as  much  information  as  possible --  your **
** hardware,  kernel,  patches,  settings,  all reiserfsck **
** messages  (including version),  the reiserfsck logfile, **
** check  the  syslog file  for  any  related information. **
** If you would like advice on using this program, support **
** is available  for $25 at  www.namesys.com/support.html. **
*************************************************************

Will read-only check consistency of the filesystem on /dev/sdb1
Will put log info to 'reiserfsck-check-sdb1.log'

Do you want to run this program?[N/Yes] (note need to type Yes if you do):Yes
###########
reiserfsck --check started at Tue Mar 23 05:58:48 2010
###########
Replaying journal: Done.
Reiserfs journal '/dev/sdb1' in blocks [18..8211]: 0 transactions replayed
Checking internal tree.. finished
Comparing bitmaps..Fatal corruptions were found, Semantic pass skipped
1 found corruptions can be fixed only when running with --rebuild-tree
###########
reiserfsck finished at Tue Mar 23 06:09:54 2010
###########

Ha trigat poc més d’11 minuts, però ara demana executar la comanada amb l’opció –rebuild-tree. Som-hi:

reiserfsck -f --rebuild-tree --logfile reiserfsck-rebuild-tree-sdb1.log /dev/sdb1
reiserfsck 3.6.21 (2009 www.namesys.com)

*************************************************************
** Do not  run  the  program  with  --rebuild-tree  unless **
** something is broken and MAKE A BACKUP  before using it. **
** If you have bad sectors on a drive  it is usually a bad **
** idea to continue using it. Then you probably should get **
** a working hard drive, copy the file system from the bad **
** drive  to the good one -- dd_rescue is  a good tool for **
** that -- and only then run this program.                 **
** If you are using the latest reiserfsprogs and  it fails **
** please  email bug reports to reiserfs-list@namesys.com, **
** providing  as  much  information  as  possible --  your **
** hardware,  kernel,  patches,  settings,  all reiserfsck **
** messages  (including version),  the reiserfsck logfile, **
** check  the  syslog file  for  any  related information. **
** If you would like advice on using this program, support **
** is available  for $25 at  www.namesys.com/support.html. **
*************************************************************

Will rebuild the filesystem (/dev/sdb1) tree
Will put log info to 'reiserfsck-rebuild-tree-sdb1.log'

Do you want to run this program?[N/Yes] (note need to type Yes if you do):Yes
Replaying journal: Done.
Reiserfs journal '/dev/sdb1' in blocks [18..8211]: 0 transactions replayed
###########
reiserfsck --rebuild-tree started at Tue Mar 23 06:21:26 2010
###########

Pass 0:
Loading on-disk bitmap .. ok, 113159770 blocks marked used
Skipping 11937 blocks (super block, journal, bitmaps) 113147833 blocks will be read
0%....20%....                                                   left 0, 16287 /seccseccccc
	"r5" hash is selected
Flushing..finished
	Read blocks (but not data blocks) 113147833
		Leaves among those 112068
		Objectids found 3049

Pass 1 (will try to insert 112068 leaves):
Looking for allocable blocks .. finished
0%....20%....40%....60%....80%....100%                          left 0, 98 /sec
Flushing..finished
	112068 leaves read
		112048 inserted
		20 not inserted

Pass 2:
0%....20%....40%....60%....80%....100%                          left 0, 40 /sec
Flushing..finished
	Leaves inserted item by item 20
Pass 3 (semantic):
Flushing..finished
	Files found: 2809
	Directories found: 198
	Symlinks found: 34
Pass 3a (looking for lost dir/files):
Looking for lost directories:
Looking for lost files:3 /sec
Flushing..finished18, 74 /sec
	Objects without names 7
	Files linked to /lost+found 7
Pass 4 - finished done 105303, 99 /sec
Flushing..finished
Syncing..finished
###########
reiserfsck finished at Tue Mar 23 08:54:56 2010
###########

Aquesta operació ja ha trigat bastant, unes dues hores i mitja. Muntem el nou disc ja net i polit:

mount /dev/sdb1 /media/recuperat/

I tot ha anat bé! Dades recuperades!!! Genial 🙂

Només han calgut quasi 14 hores i una mica de paciència. Ara toca fer el mateix amb el segon disc dur… uf.

Actualització (25-03-2010): el segon disc s’ha copiat en només 4 hores i 16 minuts, a 32,484 MB/s, i no ha tingut cap error després de la primera passada! Per tant he reescrit la taula de particions i executat només un cop reiserfsck (el rebuild tree tampoc calia). I finalment muntar la partició i veure que totes les dades estan intactes. Magnífic!

GD Star Rating
loading...