Après avoir, avec dcfldd, recopié le disque dur défectueux dans un fichier, il reste à essayer de retrouver la ou les partitions.
TestDisk est un utilitaire, écrit par Christophe GRENIER, adapté pour cela.

Je télécharge la version Linux de TestDisk, et je la décompresse.
$ bunzip2 testdisk-6.8.linuxstatic.tar.bz2 $ tar xvf testdisk-6.8.linuxstatic.tar $ cd testdisk-6.8/linux/
On peut essayer d’avoir des infos en utilisant les options “debug” et “log” :
$ ./testdisk_static /media/hda2/restore/backup_hdb.dd /debug /log
TestDisk 6.8, Data Recovery Utility, August 2007
Christophe GRENIER
http://www.cgsecurity.orgTestDisk is free software, and
comes with ABSOLUTELY NO WARRANTY
.
Select a media (use Arrow keys, then press Enter):
Disk /media/hda2/restore/backup_hdb.dd - 41 GB / 38 GiB[Proceed ] [ Quit ]
Note: Some disks won’t appear unless you’re root user.
Disk capacity must be correctly detected for a successful recovery.
If a disk listed above has incorrect size, check HD jumper settings, BIOS
detection, and install the latest OS patches and disk drivers.
Je sélectionne le fichier.
Disk /media/hda2/restore/backup_hdb.dd - 41 GB / 38 GiBPlease select the partition table type, press Enter when done.
[Intel ] Intel/PC partition
[Mac ] Apple partition map
[None ] Non partitioned media
[Sun ] Sun Solaris partition
[XBox ] XBox partition
[Return ] Return to disk selection
[ Analyse ] Analyse current partition structure and search for lost partitions
[ Advanced ] Filesystem Utils
[ Geometry ] Change disk geometry
[ Options ] Modify options
[ MBR Code ] Write TestDisk MBR code to first sector
[ Delete ] Delete all data in the partition table
[ Quit ] Return to disk selection
Je sélectionne “Analyse” :
Disk /media/hda2/restore/backup_hdb.dd - 41 GB / 38 GiB - CHS 5001 255 63
Current partition structure:
Partition Start End Size in sectors1 * HPFS - NTFS 0 1 1 4110 254 63 66043152
2 E extended 4111 0 1 4997 254 63 14249655
test_logical:
Partition sector doesn’t have the endmark 0xAA55*=Primary bootable P=Primary L=Logical E=Extended D=Deleted
[Proceed ] [ Backup ]
Try to locate partition
Il y a de l’espoir !
- Une partition NTFS de 33 GB (66.043.152 secteurs de 512 bytes)
- Une extended partition de 7 GB
Je sélectionne “Proceed“.
TestDisk me demande s’il doit rechercher des partitions créées par Vista… non non, ça ira comme ça ! ![]()
Disk /media/hda2/restore/backup_hdb.dd - 41 GB / 38 GiB - CHS 5001 255 63
Partition Start End Size in sectors
* HPFS - NTFS 0 1 1 4110 254 63 66043152Structure: Ok. Use Up/Down Arrow keys to select partition.
Use Left/Right Arrow keys to CHANGE partition characteristics:
*=Primary bootable P=Primary L=Logical E=Extended D=Deleted
Keys A: add partition, L: load backup, T: change type, P: list files,
Enter: to continue
NTFS, 33 GB / 31 GiB
Mais si je fais “P: list files“, j’obtiens le message.
Can’t open filesystem. Filesystem seems damaged.
Je tape “Enter: to continue”.
Je pourrais sélectionner “Search deeper, try to find more partitions”, mais ça m’étonnerait qu’il y en ai plus !
Je fais “Write” (je rappelle que je suis toujours sur une copie du disque dur dans un fichier).
Et le classique message quand on touche à une table des partitions
You will have to reboot for the change to take effect.
Mais comme aucune partition n’était montée et que je suis sur une copie, ce n’est pas nécessaire.
Quand je réessaye avec TestDisk sur le même fichier, je vois que j’ai perdu ma partition étendue…
Comme quoi, c’est bien de travailler sur une copie !
Ca ne me semble pas critique, car c’était un PC Win XP et les choses à récupérer sont les mails (Thunderbird je pense) et le contenu de “Mes Documents”.
Il n’y avait probablement rien dans la partition d:/ …
De plus, même si cette partition d:\ n’est plus dans la table des partitions (je pourrais la remettre), ce n’est probablement pas indispensable pour y avoir accès.
Le tout est de taper la bonne commande mount
Des infos intéressantes peuvent aussi être trouvé dans le fichier testdisk.log créé par TestDisk.
A ma recherche de documentations, je trouve le site de Cepcasa.info, qui contient plusieurs pages intéressantes :
- Les descripteurs de partitions
- Sauvegarder une partition en utilisant partimage
- Procédures de réparation
- Monter un système de fichiers endommagé
- Le Blog de CEP
- Le BLog de CEP : Tutos
Je me base donc sur l’article “Monter un système de fichiers endommagé“.
On est parfois surpris de la souplesse de la majorité des outils Linux.
Ainsi la commande “fdisk” peut aussi fonctionner sur une copie fichier d’un disque dur :
$ sudo fdisk -l /media/hda2/restore/backup_hdb.dd Vous devez initialiser cylindres. Vous pouvez faire cela à partir du menu des fonctions additionnelles. Disque /media/hda2/restore/backup_hdb.dd: 0 Mo, 0 octets 255 heads, 63 sectors/track, 0 cylinders Units = cylindres of 16065 * 512 = 8225280 bytes Disk identifier: 0xbf117465 Périphérique Amorce Début Fin Blocs Id Système /media/hda2/restore/backup_hdb.dd1 * 1 4111 33021576 7 HPFS/NTFS Partition 1 a des fins différentes physique/logique: phys=(1023, 254, 63) logique=(4110, 254, 63)
La configuration de l’unité n’est pas correcte. Il manque le nombre de cylindre. Ce n’est pas critique ici.
Avec l’option “-lu”, fdisk va donner la taille en nombre de secteurs :
$ sudo fdisk -lu /media/hda2/restore/backup_hdb.dd Vous devez initialiser cylindres. Vous pouvez faire cela à partir du menu des fonctions additionnelles. Disque /media/hda2/restore/backup_hdb.dd: 0 Mo, 0 octets 255 heads, 63 sectors/track, 0 cylinders, total 0 secteurs Units = secteurs of 1 * 512 = 512 bytes Disk identifier: 0xbf117465 Périphérique Amorce Début Fin Blocs Id Système /media/hda2/restore/backup_hdb.dd1 * 63 66043214 33021576 7 HPFS/NTFS Partition 1 a des fins différentes physique/logique: phys=(1023, 254, 63) logique=(4110, 254, 63)
J’ai donc un fichier qui est la copie (euh… le plus exacte possible j’espère…) du disque dur défectueux.
Cette copie commence donc par la copie du Master Boot Record qui contient la table des partitions, puis de la partition 1 (ex hda1, ou c:\ en Windows)
Je veux donc monter (mount) un fichier (loop) mais en commençant à un endroit précis, pas au début du fichier, et pas sur la longueur totale.
Il faut d’abord calculer la position du début de la partition 1 en multipliant le numéro de secteur de début (63) par la taille d’un secteur (512 octets). Pas besoin de calculatrice pour cela :
$ expr 63 \* 512 32256
Nous allons utiliser cette valeur de 32256 pour monter la partition dans un /dev/loop.
Un simple montage en loop ne suffit pas, puisqu’il faut un offset depuis le début.
L’outil pour contrôler le montage en loop s’appelle “losetup : set up and control loop devices”
Déterminons le premier loop libre :
$ sudo losetup -f /dev/loop1
L’option “-o” permet de définir un offset: extrait de la man page :
-o, –offset offset The data start is moved offset bytes into the specified file or device.
$ sudo losetup -o 32256 /dev/loop1 /media/hda2/restore/backup_hdb.dd
Ensuite créer un point de montage et monter la partition en Read Only (ro) :
$ sudo mkdir /media/restore_partition1 $ sudo mount -o ro -t ntfs /dev/loop1 /media/restore_partition1/ $MFT has invalid magic. Failed to load $MFT: Erreur d'entrée/sortie Failed to mount '/dev/loop1': Erreur d'entrée/sortie NTFS is either inconsistent, or you have hardware faults, or you have a SoftRAID/FakeRAID hardware. In the first case run chkdsk /f on Windows then reboot into Windows TWICE. The usage of the /f parameter is very important! If you have SoftRAID/FakeRAID then first you must activate it and mount a different device under the /dev/mapper/ directory, (e.g. /dev/mapper/nvidia_eahaabcc1). Please see the 'dmraid' documentation for the details.
Ca, ce n’est pas très bon…
La partition NTFS comprend des erreurs.
Et difficile de corriger une NTFS depuis Linux…
Quand à remettre ce nouveau disque dur dans une machine Win XP, je ne vois pas trop comment forcer Win XP à faire un chkdsk sur un fichier copie de disque dur !
Christophe Grenier conseillait dans sa documentation, d’utiliser un disque dur complet pour la copie du disque endomagé, et pas un fichier dans une partition car justement les outils Windows ne peuvent en général par travailler sur des fichiers montés en loop !
Il faudrait pour cela que j’ai un disque dur supplémentaire…
C’est possible… J’ai un serveur en cours de configuration (donc pas encore opérationnel). Je pourrais recopier le fichier backup de 40 GB sur une partition libre (j’ai de la place) puis recopier ce fichier sur tout le nouveau disque dur (et pas seulement une partition)…
Bon, on y va… pénible mais je tiens à essayer tout ce qui m’est possible pour récupérer ces données.
Voilà, j’ai mis le disque dur provisoirement dans mon serveur de test, j’ai recopié le fichier de backup sur une partition sda7 non utilisée (adaptez les commandes à vos partitions). Le nom de la partition et le point de montage sont différents car ce n’est pas la même machine :
$ sudo dd if=/mnt/sdb2/restore/backup_hdb.dd backup_hdb.dd
Ensuite, j’écrase TOUT le nouveau disque dur avec le fichier copie de l’ancien disque dur :
$ sudo dd if=backup_hdb.dd of=/dev/sdb 80325760+0 enregistrements lus 80325760+0 enregistrements écrits 41126789120 octets (41 GB) copiés, 4979,73 seconde, 8,3 MB/s
Vérification avec fdisk :
$ sudo fdisk -l Disque /dev/sdb: 320.0 Go, 320072933376 octets 255 heads, 63 sectors/track, 38913 cylinders Units = cylindres of 16065 * 512 = 8225280 bytes Disk identifier: 0xbf117465 Périphérique Amorce Début Fin Blocs Id Système /dev/sdb1 * 1 4111 33021576 7 HPFS/NTFS
Donc en résumé :
- ce nouveau disque dur contient une copie de l’ancien disque dur, défectueux, de 40 GB.
- La partition 1 NTFS ( c:\ ) est bien dans la table des partitions. Il manque la partition 2 mais ce n’est pas ce que je veux récupérer.
- Cette partition 1 NTFS n’est pas correcte, mais je vais essayer de mettre ce disque dur dans un PC Win XP pour faire un “chkdsk /f“
Dernières nouvelles : La copie faite, donc avec le nouveau disque dur reprenant la totalité de l’ancien disque dur, j’ai mis ce disque dur dans un PC Windows XP.
J’ai essayé de réparer le disque dur :
- d’abord en ligne de commande avec “chkdsk F: /f” (F: c’est le disque dur, et “/f” c’est pour écrire les corrections). Chkdsk m’a dit que la partition était NTFS, mais qu’elle était endommagée.. donc il n’y est pas arrivé !
- en mode graphique : L’outil de management du PC, Gestion des disques, voit le disque dur. Il me dit que le disque est sain (mdr…)… Enfin, le disque peut-être, mais il ne voit pas la partition ! J’ai essayé de réparer avec les outils graphiques, mais je n’ai jamais de réponses, aucun message…
Résultat : Windows est incapable de réparer une partition aussi endommagée…
Une des dernières solutions à ma portée, c’est PhotoRec, un outil développé aussi par Christophe Grenier.
PhotoRec essaye de lire tout le disque dur et d’y trouver des fichiers cohérents, en essayant de reconnaître les formats connus (Jpg, Word, Excel, png, gif, html, etc etc)
Ce sera l’objet de mon prochain billet.





