Artisan Numérique

/système/stockage/ Récupérer les données d'un disque défectueux

A qui n'est-il pas arrivé d'avoir un disque qui lui claque dans les pattes sans avoir eu le temps d'en sauvegarder le contenu ? Heureusement, avec un Linux, allez pouvoir avec un peu de chance retrouver vos précieuses données...

On arrête tout !!

Lorsque les ennuis surviennent, la première chose à faire est de ne plus toucher à rien. Le mieux alors est d'éteindre la machine et d'aller quelque part trouver un CD Live d'une distribution Linux. A priori toutes conviennent car il ne nous faut que les outils de base : dd, gzip, fsck.*, mount.* et ssh. La seule chose qui peut poser problème sont les distributions trop intelligentes qui s'amusent à monter tous les disques qu'elles trouvent. Le mieux est donc d'utiliser une distribution de type rescue linux.

Récupération des données brute

La première chose que vous pouvez faire est de monter la partition en lecture seule pour tenter en toute simplicité d'en sauvegarder le contenu. Pour cela il faut utiliser l'option -ro de la commande mount :

mkdir /media/sauvegarde
mount /dev/hda1 /mnt -o ro

Si les données sont trop atteintes pour pouvoir monter le disque, il faut passer à la vitesse au dessus. Pour ne prendre aucun risque, la régle numéro un est de faire comme le chat qui chipent la bouffe de ses voisins : recopier le plus furtivement possible la partition en danger, et l'emmener dans un coin calme pour travailler dessus. Surtout ne jamais faire ce qui suit sur la "vraie" partition sous peine de voir empirer les choses : l'ennemi ici, c'est l'écriture.

Tout d'abord donc, il nous faut récupérer le contenu de la partition dans un fichier. Soit nous disposons sur notre machine de deux disques, dont un en bon état, auquel cas nous montons ce disque et nous créons notre fichier dessus :

dd if=/dev/hda1 of=/media/bon_dique/hda1.img conv=noerror,sync

Les options noerror et sync permettent de passer outre les erreurs de lecture des bad-sectors en les remplaçant par des zéros. Le fichier final garde ainsi strictement la même taille que la partition sauvegardée.

Si vous n'avez pas de disque disponible, la même chose peut être faite à travers le réseau vers une machine disposant de SSH :

dd if=/dev/hda1 conv=noerror,sync | gzip | ssh user@machine "gunzip > hda1.img"

Réparation

Maintenant que nous avons notre fichier partition, nous allons pouvoir lancer une procédure de correction sur celui-ci :

fsck.ext3 hda1.img

Si votre disque est formaté avec un autre système de fichier, remplacez ext3 par celui-ci (ex. vfat, ext2, reiser, etc...).

Si tout c'est bien passé, l'image est réparée. Nous pouvons la monter pour récupérer les précieuses données :

mount -t ext2 hda1.img mount_point

Recherche des superblocks

Si la partition problématique est formatée avec EXT3, il se peut que l'on ait un refus d'obstacle à l'étape précédente pour cause de "superblock" introuvable.

Il y a (au moins) deux manières de récupérer la position des superblocks. La première consiste à simplement rechercher la chaîne superblock dans l'image du disque que nous avons créée plus haut :

dumpe2fs -ob hda1.img | grep Superbloc

La seconde solution consiste à fabriquer une fausse image disque de la taille exacte de la partition d'origine que nous allons ensuite formatter en ext3 pour obtenir la position des superblocks :

# affichage de la taille de la partition
df /dev/hda1

# on reporte cette taille pour créer un faux disque
dd if=/dev/zero of=/faux_disque.img count=taille_partition

# formatage du faux disque qui, une fois terminé, affiche les positions de superblocks
mkfs.ext3 /faux_disque.img

Une fois que l'on connaît la position des superblocks, il suffit de lancer un réparation :

fsck.ext3 -B POSITION_SUPER_BLOCK hda1.img

Conclusion

Voilà, avec peu d'effort, l'ami Linux peut encore nous sauver la vie avec sa vision Unixienne "Tout n'est que fichier, sauf bien sur lorsque ce n'en est pas un"

Légèrement hors sujet, je profite juste de ce billet pour citer l'outil photorec. Disponible dans toutes les bonnes distributions, cet utilitaire est capable d'analyser une partition et d'en retirer des fichiers perdus. A garder dans sa boîte à outils.