Ecrire une seule fois un fichier sur le disque

Salut ! :hello:

J’aimerais savoir si il existe un moyen que le système de fichier détecte automatiquement les doublons de fichiers sur le disque afin qu’il n’utilise qu’une seul fois l’espace requis et fasse un lien symbolique vers les autres fichiers.
L’utilisateur ne pas faire un lien symbolique de lui même parce qu’il ne peut pas savoir si il y a déjà ce fichier sur le disque (oui il est simplet :smiley: )

Une autre solution serait de faire un script qui se lance régulièrement et qui fait des checksums afin de détecter les doublons et fait ensuite des liens symboliques. mais je ne vous cache pas la lourdeur de cette solution…

Merci :slight_smile:
Edité le 10/06/2007 à 13:53

De toute façon se sera très très lent. C’est pour ça que je n’ai jamais vu un fs qui propse ça.
Après, on peut te faire un petit script qui compte le nombre de doublons. Ca serait déjà ça non?

ps : Merci d’enlever ton image. Ok on ne voit pas le nom mais bon dans ce contexte tout le monde comprend à quoi elle fait référence et donc tu ne respectes pas la charte de ce forum. Il y a des forums politiques pour ça. Merci :wink:
Edité le 10/06/2007 à 16:33

Ok :slight_smile:
Lançons nous dans le script alors :smiley:
le problème c’est que les fichiers n’ont pas forcément le même nom… Donc à part un md5 ou sha1 …
Pour gagner en temps, il faudrait d’abord faire une comparaison de taille puis un md5 entre les fichiers de même taille.
Et ensuite seulement un lien symbolique (j’y tient car c’est pour espace ftp ou chaque utilisateur est chrooté mais il y a de forte chances qu’ils envoient un même fichier :slight_smile: )

“Pour gagner en temps, il faudrait d’abord faire une comparaison de taille puis un md5 entre les fichiers de même taille.”

Heu non ça ne gagnera rien au contraitre. Un md5 sera toujours plus rapide qu’une compression (sauf cas particulier mais bon).

Les pros du bash peuvent surement te proposer qqch mais il faudrait savoir exactement ce qu’on veut. Descendre dans tous les sous répertoires ou pas?

De toutes façons, ce se long. Très très long si jamais tu veux le faire disons sur un gros /home.

ps : Merci d’avoir enlever ton image :wink:

Je viens d’avoir une petite idée :slight_smile:
La première fois on fait les md5 et on les met dans une bdd (genre sqlite, je sais pas si il y a un support dans bash).
Ensuite on “md5” les nouveaux fichiers et ont fait une requête dans la bdd…

Les “pros du bash”, qui sont ils ?
Un lien ?

merci :slight_smile:

et donc si un utilisateur modifie un fichier lié chez les autres, tout le monde va subir la modification… à supposer que tu decide de casser la securité de ton système en donnant le droit d’écrire dans ces fichiers à tout le monde… pas réaliste

Tu penses donc que c’est irréalisable ?
EDIT : de toute facon, les modifications ne seront pas possibles sur mon ftp
Edité le 11/06/2007 à 10:19

+1, je pense pas que ce soit une bonne solution de faire ca de cette maniere.

Metaldark -> quel est le probleme derriere ton besoin ? probleme de place ? fichiers tres volumineux ?
EDIT : si tu leur donnes le droit en copie alors le droit de modification est forcement accorde…
Edité le 11/06/2007 à 10:22

Oui, problème de place (du aux fichiers volumineux)

dans quelles proportions ? donne les chiffres, ce n’est peut etre pas si grave que ca…
as tu pense aux quota ?

J’ai déjà des quotas mais ce que je cherche, c’est d’optimiser l’espace disque car je sais que les utilisateurs mettent les mêmes fichiers (vision un peu exagéré mais en gros c’est ca).
C’est pour pouvoir accueillir plus de monde sans rajouter de disque…

bref en python et sqlite en effet, ça peut être torché en 2 coups de cuillière à pot, mais tu a pris en compte la taille de la db des fichiers après ?

Si je limite à 10Go par utilisateur et que en moyenne, il y a des fichiers de 100mo : 10000/100 = 100 fichiers/utilisateur
Avec 100 utilsateurs sa me fait 10 000 entrées : ce qui est raisonnable :slight_smile:
Et, comme j’ai fait une moyenne sur la taille des fichiers (ce qui est une faille dans mon raisonnement), je pense aussi qu’il faut recenser que les fichiers lourd dans la bdd (pas les petits fichiers textes, conf, etc) par exemple >50mo à ce qui limitera aussi la taille de la bdd
Edité le 11/06/2007 à 16:13

Périeux. Notamment si l’utilisateur qui utilise la version “réelle” du fichier (et non pas le lien symbolique) la supprime.

Ca pourrait être une bonne fonction à ajouter à un FS, mais ce n’est pas si évident que ça.

On peut copier l’original dans un répertoire “common” et faire un lien symbolique au proprietaire original …

de plus, calculer une somme de hachage sur un fichier de 100mo, ca va encore, mais sur 10 000 fichier, il te faut un bon moment !!!


julien@arael:~$ dd if=/dev/urandom of=test bs=512 count=200000
200000+0 enregistrements lus
200000+0 enregistrements écrits
102400000 octets (102 MB) copiés, 53,8009 seconde, 1,9 MB/s
julien@arael:~$ time md5sum test
170057bab7790e2d8f67f76b8b3b23cd  test

real    0m2.079s
user    0m1.404s
sys     0m0.456s


10.000*0.456 = 4560 ~= 1h15

Sachant que tu peut certainement pas te permettre d’utiliser toutes les ressources de la machine pour ca… problème épineux

il serait possible d’utiliser inotify pour lister les fichiers au fur et a mesure de leur creation puis il suffirait d’utiliser cron pour lancer une tache la nuit qui va calculer les hash des fichiers qui ont ete liste la journee puis creer les liens physiques et supprimer les doublons.
Je doute que les utilisateurs se mettent a copier des dizaines de fichiers de 100 Mo par jour non ?

Quoiqu’il en soit, ca me parait etre une usine a gaz bien peu fiable (sans compter les probs de secu souleves par lithium)…
Un disque de 500Go se negocie autour des 100€ (et le 300Go autour des 75€)si je ne me trompe pas…
Je ne connais pas le contexte de ton serveur mais ca ne me parait pas etre une depense enorme au vu de son utilite (meme pour un contexte personnel et a fortiori pour un contexte pro)
Edité le 11/06/2007 à 17:34

le serveur est pas forcement accessible ( location à free ou autre) et augmenter l’espace coute cher dans ce cas la :frowning:

Je pense que la bonne question est “Pourquoi j’aurais autant de doublons”? Bref agir sur la cause et pas la conséquence.
Eduquer les utilisateurs? Faire un répertoire d’échange pour tout le monde? Ce genre de “solutions” qui ne coûtent rien :wink:

Je pense que c’est ce que je vais faire faute de solutions…
Mais je voulais que mes utilisateurs soient bien chrootés chez eux :slight_smile: :lol:
Edité le 12/06/2007 à 10:51