baniere poloastucien polo©2005
HEURE   DATE   méteo du Nord de la France  

Récupération de données sous linux ddrescue
=================================

Le rationnel qui consiste à essayer de récupérer sous linux des données inaccessibles sous XP repose sur le fait que dans les 2 cas les données sont stockées dans la partition sous forme de fichiers, mais la manière qu’a le système d’exploitation d’accéder à cette partition et à ces fichiers diffère, si bien que des fichiers inaccessibles sous XP peuvent parfaitement être visualisés (et donc récupérés) sous linux. L'intérêt de ce sujet: je connais rien à linux et je vais donc vous expliquer, de débutant à débutant, le pas à pas qui m'a permis de comprendre tout ça. Mais, à contrario, si des linuxiens avertis passent par là leurs commentaires et correctifs sont les bienvenus…

j'ai fait 4 parties pour ce sujet :

  • une 1ère partie pour présenter rapidement linux et détailler le liveCD de Slax-LFI que je propose d'utiliser,
  • une 2ème partie pour détailler les étapes de la récupération proprement dite
  • une 3ème partie pour expliquer précisément comment fonctionne ddrescue qui est la commande de base à utiliser pour essayer de récupérer des données,
  • une 4ème partie enfin résumant la manip pour ceux qui sont pressés et qui n'ont pas envie de lire tout le bla-bla qui précède...
  • Bonne récupération et n'hésitez pas à apporter votre contribution par vos commentaires et critiques (que j'espère constructives… )

    retour haut

    présentation rapide de linux
    et détailler le liveCD de Slax-LFI que je propose d'utiliser

    Avant tout commençons par démystifier : Linux n’est ni plus ni moins qu’un OS (operating system = système d’exploitation), c'est-à-dire un système de gestion de l’ordinateur au même titre que windows XP, auquel sont rajoutés (comme pour XP) différents logiciels, et comme vous allez le voir les 2 systèmes sont finalement assez proches dans leur présentation et leur utilisation. Une distribution linux est l’association de ce système d’exploitation basé sur le noyau linux (qui fait fonctionner l’ordinateur) et de différents logiciels qui varient selon les distributions. Les distributions les plus connues sont Debian, Mandriva, Ubuntu, SuSe, Red Hat, Knoppix (et sa petite sœur francisée Kaella), Slackware (de laquelle est issue Slax…).

    J’ai privilégié ce liveCD de Slax-LFI (merci à son concepteur) car il a été conçu pour la récupération de données et qu’il intègre notamment ddrescue (qui semble être actuellement la méthode la plus rapide et la plus efficace pour récupérer des données sur une partition corrompue) et ntfs-3g qui permet d’écrire sur une partition NTFS (ce que linux ne sait pas faire habituellement). D’autres distributions utilisent probablement ddrescue, mais bon, faut bien en choisir une et j’ai pas envie de chercher…

    1-télécharger l'image ISO de Slax-LFI = slaxlfi-1.2.iso 234.0 Mo (245 340 160 octets) et graver cette image sur un CDrom (Nero > graver une image)

    2- démarrer le PC > rentrer dans le bios au démarrage (touche suppr le plus souvent) pour mettre le lecteur CDrom en 1st boot > mettre le Cdrom de Slax-LFI dans le lecteur > redémarrer le PC pour qu'il boot sur le CD

    3- dès que la 1ère fenêtre de Slax-LFI apparaît, et si vous avez plus de 500 Mo de RAM, appuyer sur la touche F1 pour accéder aux commandes de base > à l'invite taper slax copy2ram (puis sur la touche entrée), ce qui va copier l'intégralité du CD dans la mémoire vive (au moins 512 Mo de RAM conseillés) : ceci va un peu rallonger la phase de boot mais une fois lancé slax-LFI sera plus rapide et le lecteur CD sera libéré (pour y mettre un autre CD par exemple et y copier les données récupérées). A noter que cette étape n'est pas indispensable et que l'on peut laisser slax-LFI se lancer normalement et fonctionner à partir du CD (notamment si l'on a que 256 Mo de RAM).

    4- Présentation sommaire de Slax-LFI :

    vous remarquerez que la présentation est très proche de windows avec un menu "démarrer" en bas à gauche ("KDE" = K Desktop Environment = environnement de bureau), une zone de lancement rapide où se trouvent 3 programmes en accès direct, une barre des tâches où vont apparaître les applications en cours d’utilisation, un équivalent du systray en bas à droite (horloge, indicateur de charge,…), et enfin un bureau avec un équivalent du "poste de travail" ("supports de stockage" : qui va servir à la récupération en mode graphique), un répertoire "mes documents" ("dossier personnel"), un explorateur ("Konqueror").

    Cette compilation linux comporte enfin une console de commande ("Konsole") (= terminal ou shell) dont on va se servir pour la récupération en mode console, mais également un logiciel de partitionnement équivalent à Partition Magic ("Gparted"), un logiciel de clonage-image de DD ("Partimage") et accessoirement un anti-virus ("KlamAV).

    Vous ne serez donc pas du tout dépaysés, et en 5 ou 10 minutes on prend très vite le système en main : j’y suis arrivé, alors y’a pas de raison …

    Tant qu’on en est à la présentation de Slax-LFI, voici comment se présente "KDE" (1ère icône en bas à gauche), ou environnement de bureau, qui correspond au menu démarrer sous XP : (c'est pas le sujet du jour, mais tant qu’on y est autant présenter linux…)

    à ce propos, si vous voulez faire des copies d'écran, cliquer sur "K" en bas à gauche > graphisme > logiciel de capture d'écran (KSnapShot) > enregistrer les copies d'écran sur le support de votre choix (partition fat32 montée et en lecture/écriture) > et les récupèrer sous windows...

    Et pi tant qu’on y est voici Gparted (le partitionneur) et Partimage (l’imageur) : on y reviendra pas, mais ces 2 logiciels gratuits peuvent être très utiles (notamment Gparted si l’on veut créer la partition de sauvegarde qu’on a oublié de faire sous windows, ou qu’on ne pouvait pas faire car c’est le disque système qui était en carafe…)





    plus de renseignements sur le site de Slax-LFI (et sa FAQ)

    retour haut

    détaille les étapes de la récupération proprement dite

    La récupération de données sous linux peut se faire de deux façons, le choix de l'une et/ou l'autre méthode dépendant à mon avis de la cause de la corruption de données :

    * Le mode console ("Konsole") est certainement à privilégier +++ lorsqu'il existe des secteurs défectueux sur le DD. Le travail se fait ici en lignes de commande (comme sous la console de windows) avec un outil puissant (ddrescue) qui va pouvoir récupérer des données là où le mode graphique peut être mis en échec… d’autres outils en lignes de commandes pourraient permettre de copier des données tels cp (copy), dd ou dd_rescue (qui diffère un peu de ddrescue), mais ddrescue semble être le plus abouti : plus rapide, ignorant les erreurs de lecture, paramétrable pour lire par bloc (rapide) ou par secteur (pour récupérer le max de données), capable de relire x fois les secteurs défectueux, de lire à l'endroit et à l'envers, de ne lire que la portion corrompue du DD si on le souhaite, et disposant d'un logfile (journal d'évènement) décrivant en détails la récupération qui a été effectuée et permettant d'interrompre à tout moment la commande pour reprendre au même endroit lorsqu'on retapera la commande…

    * Le mode graphique correspond exactement à ce qu'on fait dans l’explorateur windows : il suffit d'afficher les 2 partitions sur le bureau (la partition corrompue et la partition de sauvegarde) et de faire un "glisser-déposer" entre ces 2 partitions. Contrairement à ce qu'on pourrait croire, c'est pas forcément la méthode le plus simple… Peut être, mais ce n'est qu'une hypothèse, cette méthode marcherait mieux si l'origine du problème de partition inaccessible est une corruption du système de fichier ???

    * dans certains cas enfin, il pourra être utile de tenter les 2 manips : voir mes explications dans le dernier paragraphe de ddrescue.

    Les différentes étapes de la récupération sont les suivantes :

    1- créer sous windows une partition de sauvegarde destinée à recevoir les données que vous voulez récupérer : de préférence sur un autre DD (interne ou éventuellement externe), de taille égale ou supérieure à celle de la partition corrompue, et si possible toujours en FAT 32 (linux a plus de mal à écrire sur du NTFS même si c'est possible)

    2- booter sur le liveCD de Slax-LFI comme expliqué dans le chapitre précédent : à noter que si vous comptez faire votre récupération sur un périphérique externe USB (DD externe ou clé USB), il faut d'abord relier (et allumer) ce périphérique externe au PC avant de booter sur Slax-LFI (pour qu'il soit reconnu lors du lancement de Slax-LFI)

    3- la récupération en mode console :

    Dans la zone de lancement rapide en bas à gauche de l'écran, cliquer sur la 4ème icône ("Konsole") ce qui va ouvrir la fenêtre de lignes de commande. Pour toutes les commandes qui vont suivre attention de bien respecter la casse et les espaces car dans le cas contraire la commande ne donnera rien (pour bien visualiser les espaces à respecter, j'ai réécrit chaque commande sous 2 formes différentes : dans la 2ème entre parenthèse je remplace les espaces par _)

    A l’invite (barre qui clignote) taper fdisk -l (fdisk_-l, où l correspond à la lettre l comme dans linux) qui va lister toutes les partitions existantes et vous permettre de savoir quelles appellations ont la partition corrompue et la partition cible de sauvegarde.

    J'en profite pour vous rappeler que l'identification des disques durs et des partitions est différente sous linux par rapport à XP. En effet, contrairement à XP, les DD et partitions ne vont pas avoir de lettre ni de nom, mais uniquement des abréviations de 3 lettres qui ont cependant l'avantage d'indiquer clairement sur quel DD et à quel endroit précis du DD se situe la partition : les disques durs IDE sont /dev/hda (IDE 1 maître), /dev/hdb (IDE 1 esclave), /dev/hdc (IDE 2 maître), ou /dev/hdd (IDE 2 esclave). Les disques durs SATA commencent habituellement à /dev/hde ou /dev/sda. Les périphériques SCSI et USB commencent toujours à /dev/sda. Au sein de ces DD, chaque partition est représentée par un numéro venant après les 3 lettres : hdb3 désigne par exemple la 3ème partition du disque hdb, sda2 la 2ème partition d'un DD sata ou d'un DD externe branché en USB, etc… les chiffres de 1 à 4 représentent des partitions principales , les partitions logiques étant numérotées à partir de 5…

    imaginons que ma partition corrompue inaccessible soit hda5 et ma partition de sauvegarde hda2 :

    la commande à taper est la suivante :
    ddrescue -B -v -n /dev/hda5 /dev/hda2 récupération.log
    (ddrescue_-B_-v_-n_/dev/hda5_/dev/hda2_récupération.log)

    en cas de secteurs corrompus (signalés par -v ou dans le logfile), tenter de récupérer ces secteurs non lus lors du 1er passage :
    ddrescue -B -v -c 16 -r 2 /dev/hda5 /dev/hda2 récupération.log
    (ddrescue_-B_-v_-c_16_-r_2_/dev/hda5_/dev/hda2_récupération.log)

    au besoin, tenter de récupérer les ultimes secteurs corrompus non lus lors du 2ème passage :
    ddrescue -B -v -c 1 -r 5 /dev/hda5 /dev/hda2 récupération.log
    (ddrescue_-B_-v_-c_1_-r_5_/dev/hda5_/dev/hda2_récupération.log)

    pour des explications détaillées sur ces commandes et sur ddrescue en général, voir le chapitre suivant.

    après la récupération avec ddrescue, et tant qu’on est encore dans la Konsole sous linux, il faut remonter la partition de sauvegarde pour voir si les données sont bien accessibles :
    taper mount /dev/hda2 /mnt/hda2 (mount_/dev/hda2_/mnt/hda2) > puis ouvrir "supports de stockage" sur le bureau et aller voir sur hda2 (dans mon exemple) si les données sont là.

    si tout est là, vous pouvez fermer la Konsole > menu K de démarrage (en bas à gauche) > déconnexion > après une vingtaine de secondes, le CD sera automatiquement éjecté et le PC s’arrête > il faudra alors redémarrer le PC > retourner dans le bios et remettre le bon ordre de boot… A noter qu’un chkdsk (de la partition de restauration) pourrait être utile au redémarrage sous windows.

    Si certains secteurs du disque sont trop abimés et que des données particulièrement précieuses ne peuvent pas être récupérées ou que la partition ne peut pas être montée, on peut essayer de réparer ces secteurs défectueux avec HDD-regenerator ou essayer d’extraire manuellement les données avec un éditeur hexadécimal (bon courage...)

    4- La récupération en mode graphique :

    La 1ère notion à comprendre, c'est que linux a besoin de "monter" (mount) les supports physiques pour pouvoir travailler dessus (et à contrario le support doit être correctement "démonté" avant d'éteindre le PC sous peine de corruption des données). Slax-LFI a l'avantage de monter automatiquement toutes les partitions de tous les DD au démarrage, et de les démonter également automatiquement lorsqu'on quitte linux par le bouton "déconnexion" de KDE. L'avantage est que toutes les partitions sont directement accessibles et utilisables dans "supports de stockage" sans avoir à les monter une par une (contrairement à d'autres liveCD), le petit inconvénient (tout relatif) est qu'un certain nombre de commandes dans la "Konsole" nécessitent, pour être fonctionnelles, de démonter au préalable la partition cible…

    La 2ème notion, c’est que pour pouvoir écrire sur une partition en mode graphique il faut non seulement que cette partition soit montée, mais également que les droits d'accès sur cette partition soient en mode lecture/écriture (rw pour readable-writeable) et pas en lecture seule (ro pour Read Only). C'est le 2ème avantage de Slax-LFI que d'activer automatiquement au démarrage le mode lecture/écriture des partitions FAT32. Il n'en est pas de même pour les partitions NTFS qui sont montées en lecture seule et pour lesquelles il va falloir passer par la "Konsole" pour activer le mode lecture/écriture (j’y reviens plus loin).

    Venons-en à l'affichage des partitions des différents DD : le "poste de travail" sous linux s'appelle "supports de stockage" et est accessible en double-cliquant sur l'icône présente sur le bureau.

    Dans cet exemple, j'ai un seul DD hda (hda signifie maître sur le port IDE principal) renfermant 2 partitions principales (hda1 et hda2) et 1 partition logique (hda5), un lecteur de disquette et un lecteur DVD hdb (esclave sur le port IDE principal)

    Imaginons que je veuille récupérer des données présentes sur ma partition logique (hda5) qui est corrompue, et transférer ces données sur la 2ème partition principale (hda2, que j'ai créée en redimensionnant la 1ère partition principale). Comme les partitions FAT32 sont automatiquement montées en mode lecture/écriture, il suffit de double-cliquer successivement sur hda2 et hda5 pour les ouvrir dans 2 fenêtres distinctes, ce qui permettra de copier les données de hda5 vers hda2 par un simple "glisser-déposer" (comme sous XP).

    Si le "glisser-déposer" ne marche pas sur votre PC, il faut faire un clic droit sur la partition cible (hda2 dans mon exemple) > propriétés > droits d'accès et vérifier si c'est bien marqué "peut voir et modifier le contenu" sur la 1ère ligne ("propriétaire"). Si ce n'est pas le cas, cliquer sur la petite flèche en bout de ligne et sélectionner l'option voulue > OK. Si un message d'erreur s'affiche ("impossible de modifier les droits d'accès"), c'est probablement qu'il s'agit d'une partition NTFS (facile à vérifier dans la Konsole en tapant fdisk –l) : voir le paragraphe suivant.

    Si la partition cible est en NTFS (malgré tout ce que je vous ai conseillé… ), vous ne pourrez pas directement y copier de données en mode graphique.
    pour pouvoir écrire sur une partition NTFS il faut au préalable passer par la "Konsole" et se servir de l'utilitaire ntfs-3g : ouvrir la "Konsole" > à l'invite de commande taper umount /dev/hda2 (umount_/dev/hda) pour démonter hda2 (en respectant bien l'espace et en remplaçant hda2 par le nom de votre partition) > puis taper ntfs-3g /dev/hda2 /mnt/hda2 (ntfs-3g_/dev/hda2_/mnt/hda2) : ntfs-3g va alors monter la partition et la mettre en mode lecture/écriture > fermer la Konsole > retourner sur "supports de stockage" et faites vos transferts de fichiers en mode graphique. (NB : ntfs-3g reste une version béta, c'est-à-dire qu’elle peut parfois bugger…)

    L'autre solution, si votre partition de sauvegarde NTFS est vide, est de la formater en FAT32 sous linux grâce à Gparted : ouvrir Gparted (double-clic) > clic droit sur votre partition de sauvegarde NTFS > unmount > clic droit sur la partition démontée > "formater en" : cliquer sur FAT32 > clic droit sur la petite flèche à côté de "défaire" > appliquer > valider (appliquer > fermer) > clic droit sur la nouvelle partition FAT32 créée > "mount on" : cliquer sur "/mnt/hda2" (dans mon exemple) > fermer Gparted > retourner sur "supports de stockage" et faites vos transferts de fichiers en mode graphique.

    Une fois que tout a été copié, vérifier si toutes vos données sont bien sur la partition de sauvegarde > fermer les fenêtres ouvertes > menu K de démarrage (en bas à gauche) > déconnexion > après une vingtaine de secondes, le CD sera automatiquement éjecté et le PC s’arrête > il faudra alors redémarrer le PC > retourner dans le bios, remettre le bon ordre de boot et redémarrer le PC sous windows… là encore un chkdsk (de la partition de restauration) pourrait être utile au redémarrage sous windows.

    Si vous n'avez pas pu récupérer toutes vos données en mode graphique, sauvegarder sous windows ce qui a quand même pu être récupéré (c'est déjà ça) > formater à nouveau la partition de sauvegarde et retourner sous linux tenter la manip ddrescue sous la "Konsole" (je vous rappelle qu'à ce stade vous n'avez pas encore touché à votre partition corrompue et qu'on peut refaire toutes les manips de récupération qu'on veut…)

    retour haut

    ddrescue en détail :

    Le fonctionnement de base de ddrescue est automatique sans que l'utilisateur n'ait à se préoccuper des erreurs de lecture, utiliser ou non le mode de lecture inversée, arrêter le programme, lire le logfile, etc...

    ddrescue est particulièrement indiqué lorsqu’il existe des secteurs défectueux, mais mérite aussi d'être essayé sur des disques durs sains où la partition est inaccessible sous windows pour une autre raison (corruption du secteur de boot, du système de fichier,...)

    L'algorithme de fonctionnement de ddrescue est le suivant :
    1) chercher un éventuel logfile d'une récupération antérieure interrompue
    2) lire et sauvegarder la partie non endommagée de la partition corrompue
    3) puis essayer de lire les secteurs endommagés, par morceaux de plus en plus petits pour pouvoir récupérer le maximum de données
    4) puis essayer de relire x fois tous les secteurs endommagés où une 1ère lecture a échoué
    5) tout au long du processus enfin, il peut écrire un logfile (si on pense à lui demander) pour une éventuelle nouvelle tentative ultérieure : ce logfile est automatiquement sauvegardé toutes les 30 secondes, si bien qu'en cas de plantage on peut reprendre la récupération là où elle s'était interrompue sans devoir se retaper les 200 Go déjà récupérés...

    Si l'on utilise le logfile (qu'on appellera récupération.log par exemple), les données sont protégées de manière efficace car seuls les blocs pas encore lus vont être explorés.
    Il est particulièrement précieux lorsqu'on veut récupérer un fichier dont on avait une copie mais que les 2 copies sont corrompues : en effet, si l'on passe ddrescue sur chaque copie en utilisant la même partition de sauvegarde, on pourra probablement récupérer un fichier entièrement normal car il y a très peu de chances que les erreurs soient exactement aux mêmes endroits du fichier sur les 2 copies (seuls les blocs manquants nécessaires seront lus sur la 2ème copie).

    Structure du Logfile :
    C’est un fichier texte qui se trouve dans "dossiers personnels" sur le bureau de slax-LFI.
    Chaque ligne décrit un bloc de données et affiche les coordonnées hexadécimales de ce bloc de données sur le DD corrompu, sa taille (en hexadécimal également : -1 signifie taille indéterminée car la fin du bloc n’a pas encore été trouvée) ainsi que son statut de recuperation (+ signifie bloc de données récupéré, - bloc non récupéré car secteurs défectueux, / zone défectueuse non lue, ? zone non encore explorée).
    On peut apparemment éditer le fichier en stipulant l’utilisation de valeurs hexadécimales, décimales ou binaires, mais j'ai pas encore trouvé comment faire…
    Chaque bloc de données doit être contigüe et sans chevauchement.
    Chaque ligne qui commence par # est une ligne de commentaires.

    Voici un exemple de logfile:

    # Rescue Logfile. Created by GNU ddrescue version 1.0
    # pos size status
    0x00000000 0x00117000 +
    0x00117000 0x00000200 -
    0x00117200 0x00001000 +
    0x00118200 0x00007E00 /
    0x00120000 0x00048000 ?

    mais en réalité, si le DD n'a aucun secteur défectueux vous aurez une seule ligne sous la forme :

    # Rescue Logfile. Created by GNU ddrescue version 1.0
    # pos size status
    0x00000000 0x04D829E2 +
    (ce qui signifie que tout a été lu et récupéré sans incident...)



    1) La commande générale de ddrescue est la suivante :

    ddrescue [OPTIONS] partitionsource partitiondesauvegarde [LOGFILE]
    (ddrescue_[OPTIONS]_partitionsource_partitiondesauvegarde_[LOGFILE]) (OPTIONS et LOGFILE sont facultatifs mais conseillés...)

    les différentes options utilisables sont les suivantes (toujours précédées de -) :

    -h (help) : affiche les différentes options avec retour à l’invite de commande

    -V (version) : affiche le numéro de revision de ddrescue avec retour à l’invite de commande

    -b BYTES (block-size=BYTES) : taille minimale en bytes des blocs sur la partition source corrompue. habituellement 512 (taille par défaut qu'il n'y a pas lieu de modifier sauf exception) pour les DD et disquettes, 2048 pour les CD (à préciser dans ce cas là en mettant -b 2048 en option)

    -B (binary-prefixes) : affiche la taille des unites en binaire base 2 (Ki kibibyte 2^10 = 1024, Mi mebibyte 2^20, Gi gibibyte 2^30…). Par défaut (si l'on ne met pas l'option -B) la taille est indiquée en décimal base 10 (k kilobyte 10^3, M mégabyte 10^6, G gigabyte 10^9…)

    -c BLOCKS (cluster-size=BLOCKS) : nombre de blocs à copier à la fois (64 KIB par défaut, c'est à dire copie simultanée de 128 secteurs). On peut essayer de plus petites valeurs pour les lecteurs lents : 16 est une bonne valeur pour une disquette)

    -C (complete-only) : limite la recuperation aux blocs dont la taille est prédéfinie dans le logfile par cette option : les autres données au-delà de la limite du logfile ne seront pas lues (cette option est utilisée lorsqu’on explore un DD de taille indéterminée, notamment les DD non formatés RAW)

    -e N (max-errors=N) : nombre maximal d’erreurs (zones défectueuses) tolérées avant que le logiciel n’interrompe la recherche (infini par défaut)

    -i POS (input-position=POS) : début physique (en byte) de la récupération sur le DD corrompu (0 par défaut, c'est-à-dire début du DD)

    -o POS (output-position=POS) : début physique (en byte) de la sauvegarde sur le DD cible de sauvegarde (par défaut égal à i POS : les éventuels bytes précédant cette position ne seront pas touchés par la récupération). Cette option permet probablement de récupérer les données sur une partition contenant déjà des données sans écraser celles-ci, sous réserve de bien la défragmenter au préalable (et de sauvegarder par précaution les données existantes), mais j'ai jamais essayé...

    -n (no-split) : empêche la lecture des zones d’erreurs (ddrescue ne s'occupera dans un 1er temps que de la récupération rapide de toutes les données localisées sur les zones saines du DD)

    -q (quiet) : operation « tranquille » : la progression ne s'affiche plus sur la "Konsole" mais ddrescue continue à travailler en arrière plan (j'ai pas compris l'intérêt de la commande)

    -r N (max-retries=N) : le programme s’arrêtera de chercher les données sur une zone défectueuse après le nombre de relecture stipulé (par défaut 0 = aucune relecture des zones défectueuses déjà lues une fois, un chiffre positif x imposera x relectures, -1 signifie relectures sans fin : pas conseillé... )

    -s BYTES (max-size=BYTES) : taille maximale (en byte) des données à extraire du DD corrompu (si l'on tape par exemple ddrescue -i 100 -s 200 infile outfile logfile, seulement 200 bytes seront copiés à partir du 101ème byte du DD corrompu, mais le fichier de sauvegarde outfile aura une taille de 300 bytes car on a stipulé -i 100 qui signifie que les 100 premiers bytes de outfile seront non utlisés puisque par défaut égal à -i POS)

    -t (truncate) : fichier de recuperation tronqué (pas glop…)

    -v (verbose) : mode bavard… permet de voir les détails de l'opération sur la console (sympa car on a l'impression de comprendre ce que fait ddrescue, mais pas indispensable)

    Les nombres indiquées dans les options (positions, tailles) peuvent être suivis d'une unité de mesure (K, M, G...). exemple -s 50 = 50 bytes, -s 50M = 50 mégabytes



    2- Exemple où l'on veut récupérer les données d'une partition hdc1 inaccessible et les copier vers une partition de sauvegarde hdd1 :

    Récupérer d'abord la plus grande partie du disque endommagé (attention de bien respecter les espaces, minuscules, majuscules…) :
    ddrescue -B -v -n /dev/hdc1 /dev/hdd1 récupération.log
    (ddrescue_-B_-v_-n_/dev/hdc1_/dev/hdd1_récupération.log)
    (-B pour avoir les tailles et dimensions en binaire, -v pour avoir le descriptif de la récup et d'éventuels messages d'erreur, -n pour sauvegarder rapidement tout ce qui est sain en sautant les secteurs corrompus)

    puis, en cas de secteurs corrompus (signalés par -v ou dans le logfile), tenter de récupérer ces secteurs non lus lors du 1er passage :
    ddrescue -B -v -c 16 -r 2 /dev/hdc1 /dev/hdd1 récupération.log
    (ddrescue_-B_-v_-c_16_-r_2_/dev/hdc1_/dev/hdd1_récupération.log)
    (-c 16 pour lire les zones corrompues par blocs de 16 secteurs au lieu de blocs de 128 secteurs par défaut, -r 2 pour relire 2 fois les secteurs corrompus)

    puis tenter de récupérer les secteurs corrompus non lus lors du 2ème passage :
    ddrescue -B -v -c 1 -r 5 /dev/hdc1 /dev/hdd1 récupération.log
    (ddrescue_-B_-v_-c_1_-r_5_/dev/hdc1_/dev/hdd1_récupération.log)
    (-c 1 pour lire secteur par secteur les zones à erreur, -r 5 pour relire 5 fois les secteurs corrompus)

    on peut, à tout moment de la récupération, faire Ctrl + C pour interrompre ddrescue, et quand on voudra le reprendre il suffira de retaper exactement la même commande qu'au départ (ou plus simple encore faire flèche haut pour afficher automatiquement la dernière commande tapée), et la récupération reprendra exactement à l'endroit où on l'a interrompue (sans relire les secteurs déjà explorés)



    3- Après la récupération avec ddrescue, et tant qu’on est encore dans la Konsole sous linux, il faut remonter la partition de sauvegarde pour voir si les données sont bien accessibles :

    taper mount /dev/hdd1 /mnt/hdd1 (mount_/dev/hdd1_/mnt/hdd1) > puis ouvrir "supports de stockage" sur le bureau et aller voir sur hdd1 (dans mon exemple) si les données sont là.

    Si certains secteurs du disque sont trop abimés et que des données particulièrement précieuses ne peuvent pas être récupérées ou que la partition ne peut pas être montée, on peut essayer de réparer ces secteurs défectueux avec HDD-regenerator ou essayer d’extraire manuellement les données avec un éditeur hexadécimal (bon courage... )



    4- Quelques remarques :

    * en théorie (1), il est conseillé de « démonter » la partition ou le DD (par la commande umount) avant de tenter une récupération (dixit Antonio Diaz le concepteur de ddrescue).
    En pratique, sur les essais que j'ai fait, j'ai eu aucun problème en laissant les partitions montées, et je vois pas l'intérêt de démonter les partitions, mais y'a peut être un truc qui m'échappe… à suivre...

    * en théorie (2), il recommande également de faire la récupération dans une image (en remplaçant partitiondesauvegarde par récupération.ima par exemple) puis de travailler sur cette image.
    le rationnel, c'est qu'en cas de secteurs défectueux, pour éviter d’abimer encore plus le DD en lisant et relisant les secteurs défectueux, le fait de faire d’abord une image1 du DD corrompu avec ddrescue puis de tenter une récupération sur cette image1 évite de fatiguer le DD corrompu, et si les données sont particulièrement précieuses il suggère même de faire une image2 de l’image1 et de tenter la récupération sur l’image2 : de cette façon si ça merdoie on a toujours l’image1 pour essayer à nouveau sans avoir à retoucher au disque corrompu.
    En pratique, chaque fois que j'ai essayé de créer une image, je me suis heurté à un manque de place dans le répertoire de sauvegarde (root) avec un message d'erreur du genre "error writing logfile récup.log : no space left on device". j'ai longuement cherché comment agrandir la taille offerte à root sans succès (entre autre j'ai pas réussi à trouver sur quel support physique était root...).
    D'où ma question aux astucieux linuxiens qui passeraient par là : quelle est la solution pour agrandir l'espace root, ou comment indiquer en console qu'il faut mettre récup.ima ailleurs que dans root (dans une partition dédiée par exemple) ??? merci d'avance pour vos contributions...

    * en théorie (3), après avoir fait une récupération des données sur une partition de sauvegarde, il faut démonter cette partition (umount /dev/hdd1), puis vérifier le système de fichier en sachant que pour les partitions linux ext2 ou ext3 c’est la commande fsck, pour les partitions FAT32 c’est fsck.vfat et pour les partitions NTFS c’est chkdsk au reboot sous windows.
    En pratique j’ai essayé sur une partition FAT32 la commande fsck.vfat -v -a /dev/hdd1 (-v pour le mode bavard et –a pour les réparations automatiques des erreurs trouvées), mais j’ai un message d’erreur en retour dans slax-LFI me disant que la commande fsck.vfat n’est pas valide (pas compilée sur le noyau ?) : dommage… (je vais quand même poser la question dans la FAQ de Slax-LFI)
    Donc en gros tant pis pour la vérification sous linux, il faudra faire un chkdsk au reboot sous windows

    * ultime commentaire (et pi j'arrête) : quand on copie une partition NTFS corrompue sur une partition de sauvegarde formatée en FAT32, cette partition se retrouve elle même en NTFS. En réalité j'ai l'impression que cette commande agit réellement comme un logiciel de clonage qui transfère tout ce qui existe sur la partition corrompue, y compris le système de fichier...
    Corollaire 1 : ddrescue est parfait pour récupérer des données sur un DD contenant des secteurs défectueux, mais lorsque la corruption de la partition résulte d'un problème dans le système de fichier, le même problème (de système de fichier) pourrait persister sur la partition de sauvegarde ? on verra à l'usage (poster vos témoignages...). Mais même dans ce cas de figure la commande reste cependant intéressante car ça permet au moins de tester chkdsk et testdisk sur la partition de sauvegarde sans avoir peur de perdre des données puisque la partition source corrompue n'a pas été touchée...
    Corollaire 2 : peut être que dans ce cas de figure le "glisser-déposer" en mode graphique serait plus efficace puisqu'en théorie il ne transfère que les fichiers et non le système de fichier…

    les 2 manips (mode graphique et mode Konsole) méritent donc d'être essayées lorsqu'on n'est pas satisfait du résultat...

    retour haut

    résumé des manips à effectuer pour la récupération de données sous linux

    (pour plus de détails sur chaque étape voir les chapitres précédents)

    1- créer sous windows une partition de sauvegarde FAT 32 suffisamment grande (sur DD interne ou externe)

    2- télécharger l'image ISO de Slax-LFI et graver cette image sur un CDrom

    3- si vous comptez vous servir d'un périphérique USB pour récupérer vos données (DD externe ou clé USB), connectez-le maintenant au PC

    4- démarrer le PC > mettre le lecteur CDrom en 1st boot dans le bios > mettre le Cdrom de Slax-LFI dans le lecteur > redémarrer le PC pour qu'il boot sur le CD

    5- dès que la 1ère fenêtre de Slax-LFI apparaît et si vous avez plus de 500 Mo de RAM, appuyez sur la touche F1 pour accéder aux commandes de base > à l'invite taper slax copy2ram (slax_copy2ram) puis sur la touche entrée. si vous avez moins de 500 Mo de RAM, sautez cette étape et laissez Slax-LFI booter tout seul sur le CDrom.

    6- première possibilité = récupération en mode console : à privilégier si la partition corrompue à des secteurs défectueux (signalés par hd-tune ou par le logiciel constructeur)

    Ouvrir la "Konsole" > taper fdisk -l (lettre l comme dans linux) pour lister toutes les partitions existantes et repérer partition corrompue et partition sauvegarde,

    puis taper ddrescue -B -v -n /dev/hda5 /dev/hda2 récupération.log (ddrescue_-B_-v_-n_/dev/hda5_/dev/hda2_récupération.log) pour sauvegarder hda5 corrompu sur hda2 sauvegarde :

    * si ddrescue va à son terme sans erreur signalée (à vérifier dans récupération.log qu'on va trouver dans "dossiers personnels" sur le bureau), taper mount /dev/hda2 /mnt/hda2 (mount_/dev/hda2_/mnt/hda2) > puis ouvrir "supports de stockage" sur le bureau et aller voir sur hda2 (dans mon exemple) si les données sont là.

    * en cas de secteurs corrompus (signalés par -v ou dans le logfile), tenter de récupérer ces secteurs non lus en tapant la commande : ddrescue -B -v -c 16 -r 2 /dev/hda5 /dev/hda2 récupération.log (ddrescue_-B_-v_-c_16_-r_2_/dev/hda5_/dev/hda2_récupération.log)

    * au besoin, tenter de récupérer les ultimes secteurs corrompus non lus lors du 2ème passage en tapant : ddrescue -B -v -c 1 -r 5 /dev/hda5 /dev/hda2 récupération.log (ddrescue_-B_-v_-c_1_-r_5_/dev/hda5_/dev/hda2_récupération.log)

    pour des explications détaillées sur ces commandes et sur ddrescue en général, voir le chapitre ddrescue au dessus.

    7- deuxième possibilité = récupération en mode graphique :

    L'idéal pour ça est que la partition de sauvegarde soit en FAT32.

    ouvrir "supports de stockage" en double-cliquant sur l'icône présente sur le bureau > double-cliquer successivement sur hda2 et hda5 pour les ouvrir dans 2 fenêtres distinctes (ce n'est qu'un exemple où hda2 est la partition de sauvegarde en FAT32 et hda5 la partition corrompue FAT32 ou NTFS) > copier les données de hda5 vers hda2 par un simple "glisser-déposer" (comme sous XP).

    Si le "glisser-déposer" ne marche pas ou si la partition de sauvegarde est en NTFS, voir la fin du paragraphe 4 ICI

    8- Une fois que tout a été copié :

    vérifier si toutes vos données sont bien sur la partition de sauvegarde > fermer les fenêtres ouvertes > menu K de démarrage (en bas à gauche) > déconnexion > après une vingtaine de secondes, le CD sera automatiquement éjecté et le PC s’arrête > il faudra alors redémarrer le PC > retourner dans le bios, remettre le bon ordre de boot et redémarrer le PC sous windows… un chkdsk (de la partition de restauration) pourrait être utile au redémarrage sous windows.

    Si vous n'avez pas pu récupérer toutes vos données en mode graphique, sauvegarder sous windows ce qui a quand même pu être récupéré (c'est déjà ça) > formater à nouveau la partition de sauvegarde et retourner sous linux tenter la manip ddrescue sous la "Konsole" (à ce stade on n'a pas encore touché à la partition corrompue et on peut refaire toutes les manips de récupération qu'on veut…)

    retour haut

    Remerciement a romsk pour ce travail

    discussion et problèmes pratiques de ce sujet ici

    Voici d'autres pages du même auteur :




    le pisseur


    polo©2007