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.