Récupérer des données malencontreusement effacées.

J'ai accidentellement supprimé un répertoire contenant les photos de notre super week-end du 11 novembre dernier dans les gorges du Verdon. Ne me demandez pas comment j'ai fait mon compte, ce serait trop long à raconter, mais si j'écris ce billet vous vous doutez que je ne suis pas resté les bras croisés à pleurer sur mon sort.

Premier réflexe, ne plus toucher à mon PC pour ne pas aggraver mon cas : je savais en effet qu'effacer un fichier consistait simplement à enlever un pointeur dans le système de fichier. Tant qu'on n'écrit pas sur l’espace libéré les données elles-mêmes ne sont pas perdues.

Étape 1 - Récupération

J’emprunte donc le PC de ma chère et tendre et lance la recherche qui va bien (Linux récupération données effacées) et tombe rapidement sur cet article de l’excellentissime blog de Korben qui présente Foremost. Je retourne sur mon PC, passe en console (Alt-Ctrl-F1), me logue en root (pour ne pas écrire dans /home) et un yaourt plus tard (apt-get install pour les debianistes, ou yum pour les fedoristes, ou ce que vous voulez...) le paquet est installé. Je monte un disque dur externe, supputant à bon escient que la partition racine pourrait être un peu petite, m'y déplace et lance l'incantation magique :

foremost -t jpeg -i /dev/sda1


Là il faut prendre son mal en patience, ça mouline une paire d'heure et j'ai des messages inquiétants dans la console :

CPU1: Core temperature above threshold, 
cpu clock throttled (total events = 6730)

Je croise les doigts et au bout d'un (très long) moment je récupère la main. Ainsi qu'un répertoire bourré de plusieurs milliers de .jpg au nom tout aussi évocateur que 12456548524.jpg ! Ben oui, ça remonte à la nuit des temps, enfin plus exactement à l'origine de mon installation (tous les fichiers ne sont du reste pas lisibles). Comment vais-je retrouver mes petits là-dedans ?

Étape 2 - Renommage

C'est évident mon cher Watson : renommer les fichiers en tenant compte de la date contenue dans les données exif. Voir ce précédent billet sur exiv2. Donc je me déplace dans le répertoire créé par foremost (cd output/jpg/) puis :

exiv2 -r %Y%m%d_%H%M%S_:basename: mv *.jpg
mkdir /home/vince/recup
mv 201111* /home/vince/recup/
chown -R vince:users /home/vince/recup

Pour ceux qui auraient du mal à suivre :

  • avec exiv2 je renomme les fichiers (dont les données exif seraient intactes) sous la forme année-mois-jour_heure-minute-seconde_nom-d-origine.jpg
  • puis je sélectionne tous ceux du mois de novembre 2011 pour les déplacer dans un dossier de mon répertoire personnel
  • enfin je me rend propriétaire de ce dernier

Je ne suis malheureusement pas au bout de mes surprises : une fois sélectionnés les seuls fichiers correspondants au week-end (11, 12 et 13 novembre) j'en ai encore près de 800 au lieu des 250 attendus. Un petit coup d'œil avec gThumb pour m'apercevoir qu'ils sont tous au moins en double, voire triple, quadruple ou même quintuple exemplaire. Je ne comprends pas pourquoi, toujours est-il que l'idée de trier ça à la main ne me tente guère.

Étape 3 - Suppression des doublons

Donc retour vers notre ami du web à qui je propose "linux supprimer doublons photos". Et c'est encore un billet de Korben qui me fournit la solution avec le surprenant FSlint. Encore un coup de yaourt (FSlint est dans le dépôt AUR, tout comme Foremost) et l'affaire est dans le sac.

FSlint est un programme surprenant qui permet de faire un ménage en profondeur de votre disque dur :

  • détection des fichiers en double sur la base de leur taille, de leur somme de contrôle MD5 et SHA1
  • liste des paquets installés sur le système
  • détection des fichiers comportant des caractères problématiques
  • détection des fichiers temporaires
  • détection des liens symboliques brisés
  • détection des répertoires vides
  • etc.

Si des doublons sont détectés vous pouvez soit les supprimer soit les remplacer par un lien physique.

Et voilou, encore une Happy End.

Vus : 648
Publié par Vincent Gay : 38