Détecter la corruption silencieuse des fichiers

Le disque dur de mon PC portable est sauvegardé sur un disque dur externe et dans le cloud. J'ai utilisé le logiciel Unison pour copier depuis le SSD de mon PC portable vers les deux emplacements de sauvegarde, mais une simple copie avec l'explorateur pourrait suffire aussi. Unison a l'avantage de lister les différences entres les deux emplacements et permet de les résoudre.

Unison

Unison utilise par défaut des méta informations comme la date de modification ou la taille pour détecter les différences entre les fichiers. Avec le cloud, ça ne fonctionne pas toujours. Ainsi j'ai préféré faire la comparaison sur le contenu du fichier uniquement :

unison [dossier gauche] [dossier droit] -fastcheck false

    -perms 0 -ignoreinodenumbers

Les deux dossier sont synchronisés en ignorant les permissions (-perms 0) et le nœud d'index qui contient les méta données sur le fichier. Unison compare le contenu des fichiers (-fastcheck false).

Corruption silencieuse

Unison a détecté un conflit : un fichier image avec le même nom mais pas le même contenu de chaque côté. Que faire ? Ouvrir les deux fichiers pour les comparer... Dans le des fichiers stocké sur mon PC, la moitié de l'image était remplacée par un rectangle gris...

J'imagine que le SSD de mon PC portable est moins fiable que le cloud qui est sur un serveur avec de la redondance (RAID, etc).

J'aurais très bien pu ne jamais m'en rendre compte et effacer l'image entière. Certains systèmes de fichiers permettent de se prémunir de ces corruptions, mais en l’occurrence le NTFS de Windows 10 ne le fait pas (et sous GNU/Linux peu de systèmes de fichiers le font).

MD5

Pour détecter les problèmes d'intégrité, j'utilise un logiciel (Md5Checker mais j'imagine qu'il en existe beaucoup d'autres) pour calculer un hash MD5 (qui nous sert ici de somme de contrôle) de chaque fichier. Le hash est conservé, et quand le logiciel est relancé sur le même dossier, un nouveau hash est calculé et le logiciel indique s'il est différent de l'ancien.

Conclusion

Il est fréquent de lire le conseil « vérifiez toujours que vos sauvegardes fonctionnent ». En l’occurrence, ma sauvegarde fonctionnait bien (elle m'a permis de récupérer mon fichier), mais c'est la source qui était mauvaise ! Le risque était de répliquer le fichier corrompu dans la sauvegarde (et la sauvegarde incrémentale n'aurait rien pas changé grand chose, puisque la dernière version du fichier aurait ainsi été corrompue).

Calculer un hash MD5 sur chaque fichier permet de détecter les fichiers corrompus. C'est assez rapide (quelques minutes pour 40 Go de photos) et ça a le mérite d'être suffisamment simple pour qu'on puisse lui faire confiance.