Comment j'ai sauvé mes données sur un disque dur atteint de secteurs défectueux ?

Sur cette machine, j'avais un projet en PHP qui me tenait particulièrement à coeur. Soudain, sans avertissement, je reçois en console (texte) un paquet d'erreurs:

hda: read_intr: status=0x59 {driverReady SeekComplete DataRequest Error}
hda: read_intr: error=0x40 { UncorrectableError}, LBAsect= ..., sector=...

Ce disque illisible truffé de secteurs défectueux a pu être "sauvé" en grande partie, grâce à un projet (Freshmeat: dd_rhelp)

Voici comment:


D'abord, installer DD_RESCUE dernière version (>1.0.3), celle fournie sur la knoppix 3.3 ne FONCTIONNE PAS avec dd_rhelp !
Ensuite installer DD_RHELP (un script en BASH qu'on doit "compiler" avec ./configure && make)
puis

./dd_rhelp /dev/hda1 fichier_recupéré


Ce matin, je n'avais plus que des croix dans dd_rhelp, mais il continuait à mouliner (probablement encore quelques secteurs à sauver...) Je l'ai interrompu avec CTRL+C, on peut repartir quand on veut: il s'appuie sur le fichier_recupéré.log qu'il crée, puis j'ai retenté un:

fsck.ext2 -y fichier_recupéré


ca a passé des messages pendant 1/2h (fix, check, pass, ...) puis ca s'est bien terminé.
J'ai monté comme prévu avec

mount -o loop fichier_recupéré dossier


dedans il n'y avait qu'un dossier lost+found contenant 6000 entrées, fichiers ou dossiers. Après un fgrep -ri sur le contenu du dossier, j'ai tenté un updatedb: victoire, une de mes copies de sauvegarde assez récente (pas la dernière, mais bon...) est complete avec ses 6 fichiers PHP en parfait état !
Si j'avais voulu avoir mieux, j'aurais peut-être pu avoir plus de patience et le laisser tourner plus longtemps. On aurait aussi pu dupliquer le fichier récuperé (ici 40 Go) avant de lancer le FSCK pour pouvoir, le cas échéant, reprendre la restauration DD_RHELP plus longtemps (moi j'ai laissé tourner le tout "seulement" pendant 2 jours + un Week-end)

Conclusions:

Finalement, c'est une bonne idée que j'avais eu de sauvegarder plusieurs copies (versions) de mon projet dans des dossiers différents (backup-1, -2, ...). Evidemment, cela ne remplace pas une vraie sauvegarde, mais de toute façon "j'allais la faire demain"...
Remerciements aux auteurs de :
DD_RESCUE : pour permettre la récupération de données sur un disque qui refuse de monter
et
DD_RHELP : pour permettre que l'opération s'effectue en moins de 4,8 ans, temps estimé sur DD_RESCUE...

Liens


  • http://icarus.cc.uic.edu/~aciani1/sector_blues.html Pourquoi les disques ont des secteurs défectueux ?
  • http://vaab.free.fr/utilities/dd_rhelp/index.en.html DD_RHELP
  • http://www.garloff.de/kurt/linux/ddrescue/ DD_RESCUE
  • http://llg.cubic.org/docs/hdrescue.html Une autre technique moins puissante peut être trouvée là