Récupérer les données d'un disque défectueux
Le 29 mai 2008, à 15:17 par Ulhume...

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 :

  1. mkdir /media/sauvegarde
  2. 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 :

  1. # affichage de la taille de la partition
  2. df /dev/hda1
  3.  
  4. # on reporte cette taille pour créer un faux disque
  5. dd if=/dev/zero of=/faux_disque.img count=taille_partition
  6.  
  7. # formatage du faux disque qui, une fois terminé, affiche les positions de superblocks
  8. 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.

Commentaires

Dab, le 29 June, 2007 - 14:30

voir aussi TestDisk & PhotoRec ( http://linuxfr.org/2007/06/27/22669.html)

Ulhume, le 30 June, 2007 - 10:22

Ah bé je connaissais pas pas, merci !

Syeric , le 29 May, 2008 - 19:49

Salut

Personnellement en cas de crash vraiment sévère, dd ne suffisait plus. Je passe alors par dd_rescue, un script bien sympa. J'ai fait une petite page explicative : dead://www.linuxpourlesnuls.org/v4/modules.php?name=wiki_lpln&page=tutoriaux:systeme:recuperation_donnees

En lien en bas un autre tutoriel beaucoup plus complet qui va de la récupération via dd ou dd_rescue au traitement des fichiers en mauvais état.

Bonne soirée

Syeric

Ulhume, le 30 May, 2008 - 10:20

Effectivement intéressant cet outil !

adqtvn , le 9 June, 2008 - 21:44

Bonjour,

Je viens de lire ton article.

Je souhaiterai te soumettre, Ulhume, mon problème de perte de données assez particulière :

1 - disque externe usb formaté avec la commande /sbin/mke2fs -j /dev/sdx
2 - j'ai commencé à mettre mes données dessus
3 - plus tard, lorsque j'ai refait une installation d'une FEDORA CORE 6, j'ai laissé ce disque usb branché
4 - FEDORA a vu les deux disques (interne + externe usb) et m'a proposé de les formater en un seul volume LVM
5 - j'ai dit oui et il a commencé à formater
6 - quand je me suis rendu compte car la led du disque USB était en rouge, j'ai coupé l'alimentation du disque externe
7 - évidemment depuis, je n'ai plus touché à ce disque !!!

Question : puis-je espérer récupérer quelque chose si j'ai encore un superbloc valide ?
Si je trouve un spblock valide, comment pourrais-je recréer une partition normale (non LVM) et restaurer l'arborescence ?

Si tu as une suggestion ... merci d'avance

Dab, le 10 June, 2008 - 17:07

As tu testé testdisk mentionné en commentaire ?
Sinon tu peux toujours éplucher http://tldp.org/HOWTO/Ext2fs-Undeletion.html

adqtvn , le 10 June, 2008 - 19:37

Bonjour,

Oui, j'ai découvert testdisk+photorec depuis le jour où j'ai eu ce problème (2006). Après plusieurs correspondances avec Christophe G., nous n'avions pas avancé à ce sujet.

Il y a quelques jours, j'ai de nouveau fait appel à testdisk version 6.9 mais il trouve bien une partition LVM et d'après ce que j'ai écrit plus haut, c'est normal mais ce n'est pas bon.

Le cas cité plus haut est assez particulière donc nécessite une intervention manuelle je crois.

M. Récupération De Données , le 25 June, 2008 - 15:27

Wow, merci beaucoup pour ce petit truc.. Je vais probablement mettre à jour mon propre petit guide de récupération de données pour faire référence à cette manipulation (avec crédits, bien entendu). Merci!

Ulhume, le 25 June, 2008 - 15:37

@M. Recupération, de rien Smiling

Je rajouterais aussi un chapitre sur S.M.A.R.T. sur ton guide.

M. Récupération De Données , le 26 June, 2008 - 16:02

C'est noté, merci.

stephdl , le 21 August, 2008 - 23:19

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 | user@machine "gunzip > hda1.img"

ne faut il pas lire

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

?

Ulhume, le 24 August, 2008 - 08:28

yep, merci, c'est corrigé Smiling

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...