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
- 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
- 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
- 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)
- monter le disque défectueux en esclave sur un pc linux
- 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
- examiner la table des partitions a recuperer (ici le deuxième disque ide : hdb) :
fdisk -l /dev/hdb
- 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
- attendre que le programme se finisse (ça peut aller de quelques heures a quelques jours selon le nombre de secteurs défectueux)
- 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
- 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é :
- un réseau
- un autre pc linux, avec un espace disque libre au moins aussi grand que la partition a récupérer
- un cdrom linux contenant une "mini" distribution (knoppix par exemple)
sur le pc linux de sauvegarde (nommé le serveur):
- vérifier l'espace disque
- démarrer le démon nfs
/etc/init.d/nfs start
- 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 :
- démarrer sur le cdrom bootable linux
- déclarer la machine sur le réseau (menu knoppix/network-internet/network card configuration)
- monter le disque du serveur par nfs :
mount -t nfs serveur:/mnt/libre /mnt/disque
- rapatrier les outils dd_rhelp et dd_rescue
- examiner la table des partitions (ici le premier disque ide : hda) :
fdisk -l /dev/hda
- 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
- attendre que le programme se finisse (ça peut aller de quelques heures a quelques jours selon le nombre de secteurs défectueux)
- démonter le disque distant :
cd;umount /mnt/disque
sur le serveur
- monter le fichier récupéré comme un file-system :
mount -oloop -t ntfs /mnt/libre/hda1 /mnt/disque
- sauvegarder, c'est gagné
version 0.5 du 2007-11-15
Eric Gerbier
documentation sous licence GNU Free Documentation License