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

Félix Hauri felix at f-hauri.ch
Sat May 3 11:50:29 CEST 2008


On Fri, May 02, 2008 at 10:40:52PM +0200, Yves Martin wrote:
>  Salut,
> 
> Donc pour résumer, tes structures identiques sont des installations de
> distributions Linux très similaires: grand nombre de fichiers de petites tailles
> en N exemplaires.
Oui, et non... Il s'agit effectivement dans plusieurs cas de distribs linux très
similaires, mais egallement de contenus de serveurs samba, ftp, web et/ou nfs...
càd des données de travail d'ordre privé (entreprises ou personnelles).

Quelques fichiers .tex (petits), des ms-office (>1M), des .dwg, ~30Mo -> ??,
bcp de .pdf de toutes tailles et même quelque CD-ROMs en .iso...

Il y a quelque fichiers pouvant aller jusqu'a >2Go...
Bref, un peu de tout, mais sur des serveurs confinés.

> Dans ce cas, la taille n'est pas suffisamment discriminante à mon avis. Et une
> somme de contrôle est trop coûteuse surtout si on veut assurer par des
> comparaisons complètes.
A méditer...

> L'avantage d'une comparaison est de stopper net à la première différence alors
> que le calcul d'un hash fera parcourir tout le fichier.
Si j'ai 20'000 fichiers de 512000 octets, comment les comparer pour faire
ressortir des groupes de fichiers identiques?

> Comme ce sont des structures proches, le nom du fichier ou même son chemin
> partiel ([...]/usr/bin/kinit par exemple) accompagné de la taille sont déjà à
> mon avis très discriminant.
Dans les branches ``serveurs de fichiers'', certains fichiers, voire branches
sont parfois déplacés ou renommés, bref mon job doit égallement et même 
essentiellement régler ce problème.

> Mais franchement, je ferai de toute façon une comparaison exacte, au risque de
> te retrouver un binaire qui ne fonctionne plus (erreur de liaison par exemple).
J'en suis là:
  etape 1 recensement des fichiers, tailles et inodes,
  etape 2 calculs de md5 pour les inodes dont les mêmes tailles existent
         au moins en 3* (pas de md5 juste pour 2 fichiers) exemplaires.
  etape 3 comparaison des fichiers et elimination des inodes ``doublons''.

* 2, 3, 252 (fd), le calcul des md5 devrait effectivement être relativisable...
A méditer encore...

Nota: je peux égallement enviseager de calculer des md5 simultanement sur 
plusieurs fichiers que je compare bit-à-bit en même temps...

> Pour gagner de la place encore, tu pourrais imaginer lier des répertoires entier
> si leur contenu est strictement identique mais c'est gagne-petit (1 ou 2 inode
> pour les entrées de répertoire).
Les hard-links sont impossibles sur des répertoires (en principe et sauf 
bidouille). càd pas posix like.

Enviseager des liens symboliques... Bof!
Quoique, cela pourrait aider égallement à la lisibilité des archives, en ce sens
que les 2èmes répertoires identiques.

De plus, si je relie une base de répertoire contenant une centaine de
sous-répertoire, je gagne une centaine d'inodes...

Mais là, on est vraiement dans le gagne-petit...
A méditer en 4è étape, pour la version 3.0 ;-)

> Je ne connais pas assez lisp - mais je te conseillerai plutôt le C.
C'est par vocation que j'évite le C, comme l'assembleur.

> J'ai déjà écrit du Perl avec des objectifs de performance et la lecture de
> fichier peut être piégeuse - "more than one way to do it" mais il y en a
> quelques unes à privilégier pour aller vite et ne pas consommer trop de RAM.
:->>
Sans commentaires!

> Si tu veux bien m'envoyer ton script Perl - j'aimerai y regarder de plus prêt.
Actuellement un peu ``sale'' à mon avis, je m'en vais finaliser ma version 2
et surtout la nettoyer un peu, avant de la montrer.

Pour l'instant perl lance ``cmp''. Peut-être que ``diff -q'', ou
autre chose pour comparer plus de deux fichiers en une lecture...

Merci, a+.

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



More information about the gull mailing list