Grimoire-Command.es

GNU+Linux command memo

Saving data from lost partition on a hard drive

1. version : en

At the end of a workshop at Gebull (by Alain Leaper, about the command line interface), a friend came to me with a USB key and an external hard drive. He wanted a bootable key make of the ISO image of its favorite GNU+Linux distribution.

So I plug both of the storage devices on my machine, trying not to loose the workshop narrative ; I mount the key, then the hard drive, check both, unmount the key and start a dd if=/media/<user>/<disque>/Image.iso of=/dev/sdc to copy the ISO image at the beginning of the USB key (it’s enough to make it a bootable device).

The copy was gently going on, and I was back to the workshop when a though bubbled to my consciousness… « why is it so slow, and why the key’s light isn’t blobloting ? and … Oh sh*t ! CTRL+C »

I was copying the ISO image at the beginning of the hard drive itself. Yes, because with modern Linux kernels, when you unmount a removable storage in XFCE 4.12, the /dev/ corresponding file disappears also. So the /dev/sdc of my previous command, chose because it was the first non /dev/sda peripheral (which I recognize as being the internal storage of my machine) was not the USB key (which appeared as /dev/sdb and then want away at the unmounting of its file system), but the external hard drive.

Obviously, this external hard drive was the backup drive of my friend, got outside of the house for the occasion because he had no other USB key available at the moment… Obviously, the drive was containing rare family photos…

At this point, the priority was to stop writing on the disk, to avoid worsening the situation. The drive was mounted at the beginning of the operation, and as a matter of fact I can’t have erased more than 2GB a the beginning of the disk. Thunar was telling me that 4,7GB of content was still accessible, from the 400GB of backups that was there 2 minutes before. Well, better starting to save things, I copied those GB on another storage. But it’s meagre.

At this stage, it was urgent to call it a day, to unmount the disk and to take the time to think about the situation. The friend understands what’s happening, think he should have be cautious with his disk, choose another moment, and so it lend me the disk to let me try to save the situation. The next day, I launch TestDisk, which achieve a partition table restoration. It’s an NTFS partition. Testdisk can also get back recent deleted files, so I try this. Hundreds of files are listed here, but only one is retrieved, failure. So I launch PhotoRec, and this software was able to get back ~100GB of data, among with the precious pictures, but without their name, and path. Still, it’s a progress.

Next thing, I would have like to mount this NTFS file system, but it declares itself as damaged (head chopped off would also have been an accurate description), so I need to fix it first. Unfortunately it’s a proprietary piece of software kept secret instead of being documented enough to allow interoperability. There is no libre software able to handle the file system repair for NTFS.

So at this point I was searching for a bootable ISO of a Windows able to fix NTFS file systems. I found the Hiren’s BootCD PE (well, it was an older version of 612MB with Windows XP). I boot it using a virtual KVM machine and struggle another hour to get the external USB hard drive available in the virtual machine (because there’s one different trick to do it for each USB generation with KVM…). The the file system repair took 2 extra hours, but it got nearly everything back, except the erased files at the beginning of the space.

But the relief was spoiled by a tiny detail : the « Images » folder was restored in an empty state ! I had to fill it back with the pictures saved by PhotoRec, which I sorted by size to isolate the small icons from the big camera pictures. I also suggested that a script could be made to rename the pictures from their metadata dates, but the owner of the disk used his time to finally found an old backup of the backup, with lots of the older pictures in it and so would have quickly finish the work.

Here it is… a second of distraction and hours of work to fix the situation. Here is how data of a hard drive were progressively lost and retrieved. The "PhotoRec" step revealing itsel as essential, against all odds.

I wolud like to say « thank you » to Christophe Grenier for its PhotoRec, recently docummented by the author in the french GNU/Linux Magazine.

2. version : fr

Lors d’une fin de soirée d’atelier Gebull (Par Alain Leaper, consacrée donc à la ligne de commande), un ami est venu me voir avec une clé USB et un disque dur externe. Il voulait une clé "bootable" sur l’ISO de sa distribution GNU+Linux préférée.

Je branche alors les deux supports sur ma machine, en continuant à suivre l’atelier d’une oreille ; je monte la clé, puis le disque, inspecte le tout puis, démonte la clé et lance un dd if=/media/<user>/<disque>/Image.iso of=/dev/sdc pour copier l’ISO en début de clé USB (c’est bien suffisant pour pouvoir ensuite démarrer dessus).

La copie avançait tranquillement, je rattrapais de mon côté l’atelier quand une bulle d’inquiétude remonta à la surface de ma conscience… « pourquoi est-ce que c’est lent, et pourquoi est-ce que la clé ne clignote pas, et … oh m*rde ! CTRL+C »

J’étais entrain de copier l’image ISO au début du disque dur externe. En effet, avec les noyaux Linux modernes (ou est-ce lié à udev), quand on démonte un média amovible avec XFCE 4.12, le périphérique correspondant dans /dev/ disparait également. Du coup, le /dev/sdc de ma précédente commande, que j’avais choisi comme étant le premier périphérique différent de /dev/sda (le support de stockage interne de ma machine) n’était pas la clé USB (qui était elle apparue en tant que /dev/sdb puis disparue au démontage), mais le disque externe.

Évidemment, ce disque externe, c’est le disque de sauvegarde de l’ami en question, qu’il a déplacé pour l’occasion n’ayant pas deux clés USB disponibles… Évidemment il contient des photos de familles irremplaçables. Enfin, il les contenait. À partir de là, ce qui compte, c’est de ne plus écrire sur le disque, pour ne pas aggraver la situation.

Le disque était monté au début de l’opération, et techniquement, je n’ai écrasé que 2GO au début du disque. Thunar m’indique qu’il reste 4,7GO de contenu accessible, sur les 400GO de sauvegardes stockées là 2 minutes plus tôt. Tant pis, je commence par copier ce qui peut encore l’être vers mon stockage, mais c’est maigre.

Je décrète que ce sera tout pour cette soirée là, démonte le disque et prends le temps d’y réfléchir. L’ami est compréhensif, ce dit qu’il aurait dû choisir un autre moment, ne pas risquer son disque de sauvegardes, et est d’accord pour me laisser ce dernier quelques jours. Le lendemain, je lance TestDisk, qui parvient à restaurer une table de partition. Il s’agit principalement d’une partition NTFS. Testdisk permet également de récupérer les fichiers supprimés récemment, et je lance donc l’opération. Des centaines de fichiers sont listés, mais un seul est copié, échec. Je lance PhotoRec, et récupère ~100GO de fichiers, dont beaucoup des fameuses photos, tout en ayant perdu leur nom, et leurs dossiers. On progresse.

Pour la suite, j’aurais aimé pouvoir monter le système de fichier NTFS, ce dernier se déclare abîmé (décapité aurait aussi pu fidèlement décrire la situation), et il me faut donc trouver un moyen de le réparer. Malheureusement c’est un format propriétaire, privateur (de liberté) et non documenté… il n’y a pas d’utilitaire libre qui prenne en charge sa réparation.

Je me lance donc à la recherche d’une image ISO "bootable" de Microsoft Windows et trouve l' Hiren’s BootCD PE (enfin, une version plus ancienne, de 621MO en Windows XP). Je démarre cette image dans une machine virtuelle KVM, et lutte encore une bonne heure pour faire reconnaître le disque dur branché en USB sur mon système hôte (et pour cause, il y a un jeu d’arguments KVM à fournir par génération d’USB…). Puis réparation du système de fichier, qui pris encore 2h, et récupération de presque tout le contenu initial du disque, moins les fichiers écrasés en début de support.

Le soulagement fut toutefois gâché par le fait que le dossier « Images » restait vide ! Je dû donc dû le re-remplir à partir des fichiers image récupérés par PhotoRec, que j’ai dans un premier temps triés par taille, afin de séparer les petites icônes des grosses photos. J’ai également proposé de faire une moulinette qui renommerait les photos avec leur date à partir de leurs metadonnées, mais le propriétaire du disque avait lui mis son temps à profit pour retrouver d’autres sauvegardes, en particulier des plus anciennes photos et n’aurait plus grand chose à trier du coup.

Voilà, une seconde d’inattention, et des heures de boulot pour rattraper le coup. Voilà, comment les données d’un disque dur ont été progressivement perdues puis retrouvées. L’étape "PhotoRec" se révelant indispensable, contre toute attente.

Merci à Christophe Grenier et son PhotoRec, récemment documenté par l’auteur dans GNU/Linux Magazine.