récupération de données sur des disques défectueux

pourquoi

quand un disque devient illisible a cause de blocs défectueux avec des messages du type hda: read_intr: status=0x59 {driverReady SeekComplete DataRequest Error} , il est temps de changer de disque.
Mais avant, il faut souvent récupérer les données parce que les sauvegardes, on y pense toujours après (donc trop tard). Et pourtant, comparez le prix d'un disque usb externe, avec le temps passé à la récupération des données ...

doc

une excellente doc en anglais sur smart+badblocks ...

outils

j'utilise pour cela les outils : qui jusqu'à présent, m'ont toujours permis de tout récupérer (il suffit de laisser tourner assez longtemps : un week-end par exemple) mais il en existe d'autres :

principes

  1. faire une copie physique du disque (bas niveau) avant qu'il ne lache completement. Un passage au refrigérateur peut parfois améliorer les accès. Pour cela, j'utilise le logiciel dd_help/dd_rescue. Il faut pour cela disposer d'un espace au moins aussi grand que le disque à copier
  2. le système de fichier est très probablement endommagé, il faut maintenant le réparer. Pour cela, on peut utiliser les commandes fsck (systeme de fichier linux), ntfsfix (ntfs), ou testdisk
  3. il est parfois impossible de réparer le système de fichier, la dernière chance de récupération passe par un examen "bloc à bloc" du device. L'outil Photorec permet de recupérer ainsi pas mal de choses

méthode 1 (disques esclaves)

  1. monter le disque défectueux en esclave sur un pc linux
  2. préparer une partition au moins aussi grande que (+10%) que la partition a récupérer. Souvent il est plus simple de monter un deuxième disque en esclave pour cela. On supposera que l'espace est sur /mnt/libre
  3. examiner la table des partitions a recuperer (ici le deuxième disque ide : hdb) : fdisk -l /dev/hdb
  4. lancer la récupération des données (ici la première partition du deuxième disque ide) : cd /mnt/libre; dd_rhelp /dev/hdb1 hdb1
  5. attendre que le programme se finisse (ça peut aller de quelques heures a quelques jours selon le nombre de secteurs défectueux)
  6. monter le fichier récupérer comme un file-system : mount -oloop -t ntfs /mnt/libre/hdb1 /mnt/disque. Parfois le système de fichier est top endommagé pour être monté, il est alors nécessaire de le réparer, avec des commandes comme fsck, chkdsk
  7. sauvegarder, c'est gagné

méthode 2 (réseau)

cette méthode est a utiliser quand on ne peut accéder au disque défectueux (portable/ultra-portable). elle nécessité :
  1. un réseau
  2. un autre pc linux, avec un espace disque libre au moins aussi grand que la partition a récupérer
  3. un cdrom linux contenant une "mini" distribution (knoppix par exemple)
sur le pc linux de sauvegarde (nommé le serveur):
  1. vérifier l'espace disque
  2. démarrer le démon nfs /etc/init.d/nfs start
  3. exporter l'espace disque nécessaire : modifier le fichier /etc/exports (par exemple : /mnt/libre *(rw,no_root_squash), puis lancer l'export : exportfs -av
sur la machine défectueuse :
  1. démarrer sur le cdrom bootable linux
  2. déclarer la machine sur le réseau (menu knoppix/network-internet/network card configuration)
  3. monter le disque du serveur par nfs : mount -t nfs serveur:/mnt/libre /mnt/disque
  4. rapatrier les outils dd_rhelp et dd_rescue
  5. examiner la table des partitions (ici le premier disque ide : hda) : fdisk -l /dev/hda
  6. lancer la récupération des données (ici la première partition du premier disque ide) : cd /mnt/disque; dd_rhelp /dev/hda1 hda1
  7. attendre que le programme se finisse (ça peut aller de quelques heures a quelques jours selon le nombre de secteurs défectueux)
  8. démonter le disque distant : cd;umount /mnt/disque
sur le serveur
  1. monter le fichier récupéré comme un file-system : mount -oloop -t ntfs /mnt/libre/hda1 /mnt/disque
  2. sauvegarder, c'est gagné

version 0.5 du 2007-11-15
Eric Gerbier tux
documentation sous licence GNU Free Documentation License