Outils pour utilisateurs

Outils du site


proteger-des-fichiers

Protéger (et réparer) des fichiers

Faire des backups (sauvegardes) c'est indispensable : Il faut avoir plusieurs copies des données sur des supports différents pour palier au fait de perdre un de ces supports (panne, vol, perte, etc.). Faites vos backups !

Mais en dehors des backups, si on considère un support unique, comment vous assurer:

  1. Qu'il ne manque aucun fichier ?
  2. Qu'aucun des fichiers n'est endommagé ?

Voici deux moyens de vous assurer qu'aucun fichier ne manque, et que les fichiers présents sont tels que vous les y avez stockés.

Partons du principe que vous voulez protéger l'intégrité des fichiers contenus dans un répertoire.


La fausse bonne idée : Faire une grosse archive

On peut avoir le réflexe de faire une grosse archive (zip ou 7z) de tous les fichiers. Après tout, ces formats d'archive savent détecter les corruptions de données.

Mais si une partie de l'archive est endommagée, dans beaucoup de cas tout le reste de l'archive sera illisible, et vous perdez donc beaucoup de fichiers d'un coup. Ce n'est donc pas forcément la meilleure idée. (Sans compter que dans le cas de photos ou de vidéos, l'archiveur perdra beaucoup de temps à essayer de compresser des données qui ne sont pas vraiment compressibles.)

Il existe tout de même des formats d'archive conçus pour assurer la lecture même si une partie de l'archive est endommagée (comme fsarchiver), mais l'accès aux fichiers inviduels n'est pas toujours très pratique.

S'il s'agit de photos ou de vidéos, il vaut mieux stocker les fichiers tel quel. Pour d'autres types de données (jeux, fichiers bureautique, code source…) c'est à vous de voir s'il est intéressant de compresser (s'il y a un grand nombre de petits fichiers, il peut être intéressant d'utiliser une archive).

Ci-dessous, nous partons donc du principe que nous essayons de protéger des fichiers stockés tel quel (par exemple, des photos).


Détecter les pertes et corruptions avec md5

md5 est une méthodage de hashage qui permet de prendre une "empreinte" numérique des fichiers et de les vérifier par la suite. C'est simple et très efficace : on enregistre l'empreinte de tous les fichiers dans un simple fichier texte qu'on pourra réutiliser par la suite pour contrôller si un fichier est absent ou endommagé.

🔵 Création

Ouvrez un terminal dans le dossier que vous voulez protéger, et tapez:

md5sum * > md5sums

Cela va créer le fichier md5sums qui contient les empreintes de tous les fichiers du répertoire courant:

ad864b941f0bdde547e97899c3414385  fichier-00.jpg
9132b776617c2c6fdb43397603356d3e  fichier-01.jpg
e8de77ba7176f5a4326ed451b1cfa0fd  fichier-02.jpg
ec3c53e70da60e0eeacd4c6e419b43c5  fichier-03.jpg
4452c9bc4a919c9ec880efce9887fadc  fichier-04.jpg
cbdc7c7907811aa010beca03918e1b81  fichier-05.jpg
0e474fdb030a8edad17acf17e6dc40f5  fichier-06.jpg
47c89069e62cedfce61f4d27b8336c68  fichier-07.jpg
79e1de23a3f3023e4006bd838d3b3f2f  fichier-08.jpg
1b094f1db5bb2ded3bbac6119c85ffef  fichier-09.jpg
91e0f732fcd488699b652bbcc03fbbb4  fichier-10.jpg
bf0a6a2d61d80c997f273cd20edc1da2  fichier-11.jpg

Astuce : Voici la même commande de création de md5sums mais qui traite les sous-répertoires et qui parallélise le calcul des md5 pour aller beaucoup plus vite:

find . -type f -print0 | xargs -0 -L1 -P4 md5sum | grep -v "./md5sums" | sort -k2 > md5sums

🟢 Vérification

La vérification se fait en une seule commande:

md5sum -c md5sums

Si tout va bien, vous verrez:

fichier-00.jpg: Réussi
fichier-01.jpg: Réussi
fichier-02.jpg: Réussi
fichier-03.jpg: Réussi
fichier-04.jpg: Réussi
fichier-05.jpg: Réussi
fichier-06.jpg: Réussi
fichier-07.jpg: Réussi
fichier-08.jpg: Réussi
fichier-09.jpg: Réussi
fichier-10.jpg: Réussi
fichier-11.jpg: Réussi

Si un fichier est manquant, vous le verrez:

fichier-00.jpg: Réussi
fichier-01.jpg: Réussi
fichier-02.jpg: Réussi
md5sum: fichier-03.jpg: Aucun fichier ou dossier de ce type
fichier-03.jpg: Échec d'ouverture ou de lecture
fichier-04.jpg: Réussi
fichier-05.jpg: Réussi
fichier-06.jpg: Réussi
fichier-07.jpg: Réussi
fichier-08.jpg: Réussi
fichier-09.jpg: Réussi
fichier-10.jpg: Réussi
fichier-11.jpg: Réussi
md5sum: Attention : 1 fichier de la liste n'a pas pu être lu

Si un fichier est endommagé, vous le verrez également:

fichier-00.jpg: Réussi
fichier-01.jpg: Réussi
fichier-02.jpg: Réussi
fichier-03.jpg: Réussi
fichier-04.jpg: Réussi
fichier-05.jpg: Réussi
fichier-06.jpg: Réussi
fichier-07.jpg: Réussi
fichier-08.jpg: Échec
fichier-09.jpg: Réussi
fichier-10.jpg: Réussi
fichier-11.jpg: Réussi
md5sum: Attention : 1 somme de contrôle ne correspond pas

Dans ce cas là, allez chercher vos backups pour restaurer les fichiers manquants ou endommagés.

Si vous voulez que md5sum ne vous affiche un message que s'il y a un problème, ajoutez --quiet :

md5sum -c md5sums --quiet

Exemple:

fichier-08.jpg: Échec
md5sum: Attention : 1 somme de contrôle ne correspond pas

🔁 Si vous modifiez les fichiers

Si vous modifiez quelques chose dans le répertoire protégé (ajouter, supprimer, déplacer, renommer ou modifier des fichiers), vous devrez recalculer le fichier md5. N'oubliez pas de le faire !

Toutefois si le support de stockage est rapide, ce recalcul de md5 peut être très rapide (avec la parallélisation).


Détecter les pertes et corruptions avec par2... et les corriger

Par2 permet de faire la même chose que md5 (détecter un fichier manquant ou endommagé) mais il peut aller plus loin : il peut réparer les fichiers endommagés ou même reconstituer les fichiers manquants. Toutefois, cela impose d'utiliser plus d'espace disque :

Si par exemple vous avez un répertoire contenant 1 Go de fichiers, vous pouvez préparer à l'avance 100 Mo de fichiers par2. Ces fichiers vous permettront de reconstituer jusqu'à 100 Mo de fichiers perdus ou endommagés dans vos 1 Go. (Si la quantité de fichiers perdus ou endommagés dépasse 100 Mo, c'est fichu: Vous ne pourrez pas réparer !)

On créé souvent 10% de fichiers par2, mais vous pouvez bien entendu adapter ce pourcentage selon la place que vous avez, l'importance que vous accordez aux données ou la fiabilité de votre support de stockage.

par2 est utile pour parer à la dégradation occasionnelle des supports de stockage (un bit qui change d'état, ou une partie du support qui devient illisible).

🔵 Création

La création de fichiers par2 prend beaucoup plus de temps que calculer des md5. Placez-vous dans le répertoire à protéger, et tapez:

par2 create -R protection *

(L'option -R permet de prendre en compte les sous-répertoires.)

Cela va créer plusieurs fichiers:

  • Un fichier protection.par2 qui suffit à vérifier vos fichiers (comme md5sums).
  • Plusieurs fichiers protection.volXXX+XX.par2 de tailles variables qui servent à réparer les fichiers.

Pour choisir le pourcentage de données à protéger, ajoutez l'option -r. Par exemple pour créer 10% de fichiers par2:

par2 create -R -r10 protection *

ou alors vous pouvez spécifier directement la taille totale des données par2. Par exemple:

par2 create -R -rm100 protection *

(-rk100 pour 100 kilo-octets, -rm100 pour 100 Méga-octets, -rg100 pour 100 Go)

Si vous avez beaucoup de fichiers, il est possible que vous ayez un message du genre "Block count (2000) cannot be smaller than the number of files(2352)." Dans ce cas, ajoutez l'option -b X pour spécifier un blockcount plus élevé, mais s'il y a vraiment trop de petits fichiers vous devriez peut-être séparer en plusieurs répertoires ou utiliser une archive.

🟢 Vérification

Pour vérifier les fichiers:

par2 verify protection
Loading "protection.par2".
Loaded 26 new packets
[...]
Verifying source files:

Opening: "fichier-01.jpg"
Opening: "fichier-00.jpg"
Target: "fichier-01.jpg" - found.
Opening: "fichier-02.jpg"
Target: "fichier-00.jpg" - found.
[...]

All files are correct, repair is not required.

Si vous voyez cette dernière ligne, c'est que tous vos fichiers sont bien présents et intacts. Vous n'avez pas besoin de réparer.

Si des fichiers manquent ou sont endommagés, vous le verrez:

[...]
Target: "fichier-03.jpg" - missing.
[...]
Target: "fichier-08.jpg" - damaged. Found 103 of 104 data blocks.
[...]

Repair is required.
1 file(s) are missing.
1 file(s) exist but are damaged.
10 file(s) are ok.
You have 1858 out of 2000 data blocks available.
You have 200 recovery blocks available.
Repair is possible.
You have an excess of 58 recovery blocks.
142 recovery blocks will be used to repair.

Il vous signale que des fichiers sont absents ou endommagés (Repair is required) et qu'il peut réparer (Repair is possible).

🔴 Réparation

Lançons donc la réparation:

par2 repair protection

Selon le volume des données, la réparation prendra également un certain temps. Au bout d'un moment, vous verrez le résultat:

Loading "protection.par2".
[...]
Repair is possible.
You have an excess of 58 recovery blocks.
142 recovery blocks will be used to repair.

Computing Reed Solomon matrix.
Constructing: done.
Solving: done.

Wrote 8030898 bytes to disk

Verifying repaired files:

Opening: "fichier-03.jpg"
Opening: "fichier-08.jpg"
Target: "fichier-08.jpg" - found.
Target: "fichier-03.jpg" - found.

Repair complete.

Cette dernière ligne vous indique que la réparation s'est bien passée.

🔁 Si vous modifiez les fichiers

Si vous modifiez quelques chose dans le répertoire protégé (ajouter, supprimer, déplacer, renommer ou modifier des fichiers) vous devrez recalculer entièrement les fichiers par2 ! N'oubliez pas de le faire !

Oui, c'est très long, donc réservez par2 à des répertoires auxquels vous n'allez plus beaucoup toucher.


FAQ

  • Il ne faut plus utiliser md5 !
    • Non, il ne faut plus utiliser md5 pour signer cryptographiquement un fichier, mais md5 reste toujours aussi fiable pour s'assurer de l'intégrité d'un fichier. md5 n'est dangereux que si vous avez un adversaire déterminé qui essaie de forger un fichier ayant la même md5 qu'un de vos fichiers existants dans le but de vous tendre un piège. Vos supports de stockage n'iront pas dépenser des millions de cycles CPU pour corrompre exprès vos données sans que vous vous en aperceviez.
  • md5 et par2 sont redondants ?
    • par2, tout comme md5, peut signaler un fichier absent ou endommagé. Il est donc suffisant. Mais garder en plus une md5 est une bonne idée car la md5 est plus rapide à vérifier.
  • Si les fichiers par2 sont sur le même support que les données, ça ne sert à rien.
    • Si le support est entièrement corrompu d'un coup, oui ça ne sert à rien. C'est pour cela qu'on fait des backups (plusieurs exemplaires des données sur des supports différents). Les fichiers par2 ne remplacent pas les backups ! Mais garder les fichiers par2 sur le même support permet quand même de parer au bitrot (corruption de bits d'un support), à la corruption partielle du support ou à de fausses manipulations. Et surtout de les détecter facilement ! (sans avoir besoin d'aller chercher une seconde copie des données.)
proteger-des-fichiers.txt · Dernière modification: 2023/01/11 15:16 de sebsauvage