Chers lecteurs,
Vous êtes-vous déjà demandé comment partitionner un ensemble de fichiers afin de les répartir de manières équitables dans des sous-ensembles de même taille ou bien des sous-ensembles d'une taille pré-définie ?
Je souhaiterais vous présenter un outil qui répond à ce besoin : il s'agit de fpart (file partitioner). Il est écrit en C et est disponible sous license BSD.
Quelques exemples valent mieux qu'un long discours :
1) La ligne suivante produit 3 partitions depuis les données de /var, ayant (approximativement) la même taille et le même nombre de fichiers :
$ fpart -n 3 -o var-parts /var
2) La ligne suivante produit des partitions de 4.4 Go (maximum) de fichiers de musicaux, prêtes à êtres gravées sur un DVD :
$ fpart -s 4724464025 -o music-parts /path/to/my/music
3) Ce dernier exemple produit des partitions contenant maximum 10000 fichiers à partir de /usr et /home et les affiche sur la sortie standard. On extrait ensuite la partition 0 :
$ find /usr ! -type d | ./fpart -f 10000 -i - /home | grep '^0:'
L'outil est disponible à ces adresses :
http://sourceforge.net/projects/fpart
et
http://contribs.martymac.org
Pour les (heureux) utilisateurs de FreeBSD, il est également disponible dans l'arbre officiel des ports (sysutils/fpart). Pour les Linuxiens, il faudra le compiler à la main depuis les sources.
# On ne comprend pas bien
Posté par goeb . Évalué à 8.
On ne comprend pas bien concrètement ce que sont ces partitions, ni à quoi elles servent.
En reprenant ton premier exemple :
Questions :
1. Quel est le résultat de l'opération ? Obtient-on 3 fichiers ? Ou 3 partitions sur un disque dur ?
2. Comment peut-on utiliser le résultat de l'opération ? À des fins de sauvegarde ou de répartition de charge ?
3. Les 3 partitions obtenues sont-elles lisibles avec un éditeur de texte traditionnel ?
[^] # Re: On ne comprend pas bien
Posté par NeoX . Évalué à 2.
je penses qu'il appelle "partition" un sous ensemble (un sous dossier) de ton dossier initial
dans son exemple :
on ferait dont 3 sous dossiers (-n 3)
dans var-parts (-o var-parts)
à partir du dossier /var
[^] # Re: On ne comprend pas bien
Posté par Ganael Laplanche (site web personnel) . Évalué à 4.
Le terme "partition" est peut-être mal choisi ; il désigne un sous-ensemble des fichiers passés en argument.
Ce qui est généré par fpart n'est pas une "partition" au sens "partition de disque", ni un répertoire contenant les fichiers triés, mais juste une liste de fichiers. Cette liste est soit affichée sur la sortie standard (par défaut), soit écrite dans un fichier texte.
fpart ne fait qu'analyser les chemins passés en argument et en trie les fichiers suivant des critères de taille ou de nombre (mais il ne modifie bien évidemment pas le système de fichiers analysé).
J'espère que c'est un peu plus clair... ?
[^] # Re: On ne comprend pas bien
Posté par zul (site web personnel) . Évalué à 5.
Le terme partition s'entend au sens ensembliste de la chose (donc c'est le bon terme mais en se plaçant dans le "bon" système de pensée) : une décomposition en sous-ensemble deux à deux disjoints et recouvrant l'ensemble d'entrée. Il rajoute en plus la condition qu'ils doivent être de taille "aussi équivalente que possible".
[^] # Re: On ne comprend pas bien
Posté par solsTiCe (site web personnel) . Évalué à 2. Dernière modification le 06 janvier 2012 à 15:37.
En effet, il aurait été bon de préciser que partition s'entend au sens mathématique du terme. Et là, ça devient tout à coup beaucoup plus clair.
Parce que tout le monde entend partition au sens informatique: partition faisant parti de la table de partition du disque.
[^] # Re: On ne comprend pas bien
Posté par lolop (site web personnel) . Évalué à 4. Dernière modification le 06 janvier 2012 à 15:33.
Vu le contexte informatique de la chose, et la connotation forte de partition vs les disques durs... tu devrais utiliser un synonyme dans les docs / présentations (sous-sélection, découpage, regroupement, etc... le concours est ouvert).
Et tu devrais être plus explicite dans la description sur le côté travail sur les fichiers, car au début j'ai confondu avec les "par file" qui est un moyen de découper un gros binaire (un partition par exemple :-) en plusieurs fichiers plus petits, avec de la redondance afin que l'altération d'un des fichiers n'empêche pas la reconstruction.
Sinon, bonne idée.
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: On ne comprend pas bien
Posté par skeespin (site web personnel) . Évalué à 2.
perso, j'aurais opté pour un nom comme splitdir...
[^] # Re: On ne comprend pas bien
Posté par Ganael Laplanche (site web personnel) . Évalué à 1.
Le nom fpart provient du "problème de partition", expliqué ici en anglais : http://en.wikipedia.org/wiki/Partition_problem
C'est vrai que le contexte informatique n'aide pas à comprendre. Dans le README, je parle de "bags" (sacs), ce qui est peut-être plus explicite. J'aurais peut-être dû reprendre ce terme ici...
[^] # Re: On ne comprend pas bien
Posté par Grunt . Évalué à 4.
Tu le lances en root avec --force sur un système en prod, tu verras bien.
THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.
[^] # Re: On ne comprend pas bien
Posté par Grunt . Évalué à 3.
Edit (merde, trop tard): c'est juste le bon jour et la bonne heure, en plus.
THIS IS JUST A PLACEHOLDER. YOU SHOULD NEVER SEE THIS STRING.
# Je pinaille
Posté par Zenitram (site web personnel) . Évalué à 3.
4.4 Gio (1G = 1000*1000*1000, 1Gi = 1024*1024*1024)
Voir le tableaux des préfixes
Et pour un DVD, tu as de grandes chances que ça ne passe pas, suivant le DVD, car la limite officielle est 4.7 Go (soit 4.37 Gio).
bref, prend un peu moins si le but est un DVD ;-).
[^] # Re: Je pinaille
Posté par Ganael Laplanche (site web personnel) . Évalué à 2.
Effectivement, je m'étais basé sur 4.4 Gio, ce qui est juste au dessus de l'espace réellement utilisable. Merci pour ces précisions !
[^] # Re: Je pinaille
Posté par gUI (Mastodon) . Évalué à 1.
Bin justement, avec 4.4Go (environ 4.1Gio) ça passe non ? Puisque tu dis toi-même que c'est 4.7Go la limite...
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Je pinaille
Posté par Zenitram (site web personnel) . Évalué à 4. Dernière modification le 06 janvier 2012 à 16:54.
Il a ensuite mis le chiffre qu'il pensait... Il ne pensait pas à 4.4 Go en écrivant 4.4 Go. Relis.
Allez : 4724464025 octets. Ca ne fait pas 4.4 Go, ni 4.1 Gio, mais 4.4 Gio (d'où ma remarque 4.4 Gio).
[^] # Re: Je pinaille
Posté par gUI (Mastodon) . Évalué à 2.
Ah oui au temps pour moi, je suis allé un peu vite :)
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# Exemple complet
Posté par jbdenis . Évalué à 9.
Pour les personnes essayant le programme sous GNU/Linux, pensez à éditer les CFLAGS dans le Makefile (voir commentaires).
Il faut comprendre partition comme sous ensemble d'une (ou plusieurs) arborescence.
Voici un exemple où je veux créer 3 listes ("partitions") de fichiers à partir de /usr/share/doc et /usr/local/share/doc :
Résultat : 3 fichiers (doc-parts.0/1/2) contenant un peu près le même nombre d'entrées (des fichiers avec les options par défaut de fpart). Si on additionne la taille de chacun des fichiers pointés par les chemins de chaque fichier, on obtient 3 groupes de même taille environ.
Si vous avez une grosse verrue de 1T noyée au milieu de 1000 fichiers de 1 Mo, ça ne fera pas de magie, vous obtiendrez une liste de fichiers avec une seule entrée de 1T et deux autres listes dont la somme des entrées feront chacun 500 Mo.
Ça peut être très pratique lorsqu'on utilise rsync sur une arborescence et qu'on souhaite lancer plusieurs rsync en parallèle (à partir de montages différents par exemple) : il suffit de lancer 3 rsync avec l'option --files-from et hop, on est assuré que chaque rsync s'occupera de transférer le même volume de données.
Il y a plein d'options sympa, il faut fouiller. On peut par exemple limiter la profondeur de calcul des tailles, changer la granularité pour ne s'occuper que des dossiers et non des fichiers (on a des fichiers de sorties beaucoup plus petit), limiter le nombre de fichiers par partition, limiter la taille des partions etc...
Chouette programme, je ne connais pas d'équivalent.
[^] # Re: Exemple complet
Posté par Ganael Laplanche (site web personnel) . Évalué à 3.
Merci pour cet exemple détaillé !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.