[gull] Petit problème de maths, pour créer de liens

Félix Hauri felix at f-hauri.ch
Wed Apr 30 22:58:36 CEST 2008


Bonjour la liste,

Voici un petit problème de math, pour les férus de hashage.

Le problème concerne des archives qui occuppent de plus en plus de place,
qui plus est qui sont d'origine multiples et relativement similaires.

Une des solutions (avant la compression) consiste à lier par liens durs
tous les fichiers identiques, afin de conserver les structures de répertoires
et l'intégrité des données, tout en rationnalisant l'espace occupé.

Je suis en train de créer un script qui parcourt l'ensemble des répertoires
à la recherche d'entrées de type fichiers pour en collecter le numéro
d'inode et le md5sum. (une comparaison entre les durées d'executions
sur ma machine m'a fait choisir md5 via openssl, plutôt que par les
librairies perl ou la commande md5. 
 `` chomp ( my $csum = `openssl dgst -md5 <"$file"` ); ''
l'issue de ce thread risque de me faire changer d'avis...

Genre `` find -type f -printf "%i " -exec md5sum {} \; '' mais en plus élaboré.
(ne serait-ce que pour éviter de calculer deux fois le md5 d'un seul inode)

Une fois cette première étape terminé, je me trouve avec une liste
de md5 correspondant à un ou plusieurs inodes, et une liste d'inodes
correspondant à un ou plusieurs fichiers.

Je recherche pour commencer, tous les md5 représentant plus d'un inode et
de là, je commence par comparer effectivement les fichiers de deux inodes
afin de relier toutes les entrées du 2ème vers le premier et ainsi supprimer
tous les liens vers le 2ème, càd supprimer le 2ème. (jusqu'à concurrence de
30'000 ficher par inode, mais ce n'est pas le propos).

J'ai lancé le script sur un disque contenant plusieurs archives, constituées
chacunes de liens durs, pour un total de 80Go.

La première étape s'est déroulée en environ 6heures, pour la collecte des
md5sums. Le deuxième, nettement plus contraignante pour le disque dur, à
pris 3-4 jours...
Au terme, j'ai récupéré 38Go, soit près de la moitié et mes répertoires sont
intégres.

Ma question:
Si plutot que de comparer l'intégrité des fichiers lors de la deuxième passe,
à partir de quel pourcentage de fichier comparé, je peux considérer que les
deux fichiers sont identique, s'ils ont le même md5?

Question subsidiaire:
Est-ce qu'une combinaison différente offrerait des perspectives à étudier?
Je m'essplike: En admettant que si j'utilise md5, je dois comparer 50%
pour être à peu près tranquille, mais qu'en utilisant md160 je pourrais
me contenter de comparer 25% pour le même niveau de ``certitude'',
alors je planifierais une série de tests afin de déterminer le processus
le plus rapide.


-- 
 Félix Hauri  -  <felix at f-hauri.ch>  -  http://www.f-hauri.ch



More information about the gull mailing list