Remise en état de mon cloud perso après corruption du système de fichier et création du logiciel fiche

Après les vacances de noël passées en famille en France, nous sommes rentrés à Berlin au début du mois de janvier. Ma première action a été de remettre en route le cloud familial à base de TonidoPlug et d’un boitier RAID-1 branché en USB sur ce dernier. Le boitier RAID contient deux disques-durs de 1TiB qui sont montés en miroir (RAID-1). Pour plus de détails sur mon installation voir ici et . Petit problème, le TonidoPlug démarre bien, mais impossible de monter le boitier RAID. Il faut savoir que les disques sur ce dernier sont chiffrés avec Cryptsetup. J’arrive bien à ouvrir les volumes chiffrés (c’est le plus important) mais impossible de monter les partitions en ext3. Je me souviens alors que j’ai arrêté le système à l’arrache avant de partir, c’est à dire en coupant le courant, sans démonter les partitions et les volumes Cryptsetup, aïe! Je teste avec les deux disque-durs, même problème; c’est logique, les disques sont des copies bits à bits l’un de l’autre. J’en débranche un du boîtier et je le mets de coté afin de sécuriser les données avant de continuer mes investigations. Puis c’est le boitier IcyDock qui lâche. Je commence à penser que je suis maudit, je commande donc un convertisseur SATA/IDE vers USB. Je me décide pour un modèle qui supporte aussi l’IDE, car mon PC fixe datant de 2004 tourne encore avec des disques IDE et je me dis que ça pourra me resservir, bonne intuition. Je cherche la facture du boitier RAID pour retrouver la référence et peut-être recommander le même. En la relisant attentivement je vois que le boitier est garanti 3 ans, il reste encore 4 mois de garantie, c’est bien la première fois que ça m’arrive. Hélas, j’avais acheté le boitier en France et j’habite maintenant en Allemagne, ça risque d’être compliqué. Je cherche quand même sur la version allemande du site du constructeur comment faire un retour de garantie et je remplis le formulaire sans trop d’espoir. Je reçois tout de même un courriel en anglais m’informant ma requête est acceptée. Ainsi j’ai reçu un mois plus tard un boitier neuf dernière génération. Génial!

Mais revenons, à mon système de fichier corrompu. Je monte le volume chiffré puis lance de fsck:

1
2
cryptsetup luksOpen /dev/sda cloud
fsck.ext3 /dev/mapper/cloud

Cela a duré plusieurs heures, mais a néanmoins suffi à corriger le système de fichier, au prix de la perte de plusieurs fichiers… Tous sont des photos personnelles datant de plusieurs années… F**k, moi qui me croyait à l’abri avec mon RAID-1, je me rends compte que j’aurais du faire des sauvegardes séparées!!

sata2usb_adapter
Sata/IDE to USB 2.0 Adapter

Heureusement, l’histoire ne s’arrête pas là. Je profite de cette mésaventure pour faire un peu le ménage dans mon matériel informatique. Je tombe alors sur mon tout premier lecteur vidéo un Archos PMA400 (ah souvenirs d’étudiant). Il ne démarre plus depuis au moins 3 ans, je me décide donc à le démonter pour récupérer le disque dur. Le format est étrange, l’interface est du mini-IDE, qui est supporté par le convertisseur SATA/IDE vers USB que j’ai acheté. Je le branche sur mon poste Gnu/Linux et oh joie, je retrouve mon dossier de photos personnelles dans l’état dans le lequel il était à l’époque! Je me souviens alors que j’utilisais le PMA400 pour regarder les photos sur la télévision. J’utilise rsync en mode démo (–dry-run) pour voir ce qu’il est possible de récupérer sur l’ancien disque. Ce dernier étant formaté en FAT32 rsync, il a un peu de mal à repérer les fichiers qui nécessitent d’être synchronisés. Il s’emmêle les pinceaux avec les droits des fichiers, les noms de fichier en minuscules/majuscules et certains noms de fichier ont été changé depuis. Même en utilisant l’argument –checksum de rsync, je ne m’en sors pas. Je décide donc de coder ma propre application de comparaison de répertoire à base de calculs de sommes md5 des fichiers. Mon but étant de détecter les fichiers qui ne sont présents que sur un seul des disques, mais aussi les fichiers en double sur un disque. Surtout, je ne veux pas que le logiciel fasse une synchronisation automatique, mais qu’il génère un rapport, lisible à tête reposée, pour que je puisse décider pour chaque fichier de l’action à faire. C’est ainsi qu’est né fiche.

Python Logo
python programming language logo

La première version fonctionnelle m’a nécessité environ 4h, surtout du temps de recherche des librairies nécessaires, le code est relativement simple. Je l’ai développée en python3; fiche génère les rapports sous formes de différents fichiers csv ou tout dans un fichier xlsx. J’ai retravaillé la version d’origine pour la rendre générique (plus de chemin ou d’options codé en dur) afin de la partager. Le code est disponible sur Github: https://github.com/tbores/fiche. Le logiciel est stable et utilisable en production. J’ai utilisé PyLint pour faire une revue de la qualité et pdoc pour générer la documentation de l’API à partir des docstrings. Cher lecteur, n’hésite pas à faire des demandes de nouvelles fonctionnalités sur Github, où de remonter les bugs (s’il en reste).

Que retenir de cette aventure?

  • Faites des sauvegardes encore et toujours de vos données. Un RAID-1 n’est pas suffisant. => Problèmes: couts des supports de données. Comment répartir les supports de données? Il ne faut pas tout garder chez soi. Personnellement j’ai fait un copie des données sensibles sur un plus petit disque dur que je laisse au bureau, il est bien entendu chiffré.
  • Connaitre un langage de script tel que Python ou Perl, peut permettre de résoudre un grand nombre de problèmes par soi-même.

Leave a Reply

%d bloggers like this: