J’ai un script qui génère des millions de tout petits fichiers sur une machine A. (de 4Go à 100Go de données en fichiers de 1 à 20ko …).
Et je dois les transférer sur une machine B.
Les machines sont sur le même réseau local donc pas de pb de ce coté la.
Le problème avec une telle masse de fichiers, ce sont bien sur les lecture/écriture disque.
Actuellement ma procédure est la suivante :
1 : générer les XGo de données.
2 : créer une archive tar du dossier (non compressée).
3 : supprimer les données.
4 : transférer l’archive sur le serveur B
5 : de-archiver les données.
C’est fonctionnel mais sûrement pas optimal… les étapes 2 et 3 sont très longues et coûteuse en IO.
Mon idée serait de générer directement les données dans une archive qui serait montée en tant que dossier inscriptible.
A la fin on démonte l’archive et on la transfère.
Pouvez vous me donner des pistes ou solutions pour mettre en oeuvre cette idée ?
Problème… je n’ai pas de droit root pour la machine A… ce qui empêche de faire un mke2fs et un mount … :’(
Pas d’accès a /etc/fstab non plus pour paramétrer une exception…
Edité le 22/03/2011 à 18:38
J’allais te proposer de faire carrement un dd effectivement. A mon avis, c’est la meilleure solution etant donné que tu ne compresses pas…
J’ai deja ete confronté a un probleme equivalent avec des centaines de milliers de minuscules fichiers a gerer. J’avais resolu ca en utilisant un serveur de stockage centralisé partagé en NFS. Ca fait un NAS quoi…
Je connais pas tes possibilités a ce niveau mais peut etre devrais tu envisager une solution de ce genre ?
[quote="murdoc_1_1"]
Problème… je n’ai pas de droit root pour la machine A… ce qui empêche de faire un mke2fs et un mount … :’(
Pas d’accès a /etc/fstab non plus pour paramétrer une exception…
[/quote]
Tu peux creer la partition “virtuelle” sur une autre machine et deplacer le fichier formé. Mais si tu peux pas faire de mount, ca craint
C’est le meme probleme… il ne cherche pas un moyen pour copier les datas mais un moyen pour eviter les etapes d’archivage/desarchivage (au moins desarchivage en tout cas) :neutre:
En effet je cherche un moyen d’éviter les étapes d’archivage / suppression.
Je cherche aussi du coté de l’étape 1.
C’est un programme python qui génère des millions de fichiers.
L’idéal serait de rediriger la sortie du programme directement dans une archive tar.
J’ai essayé avec des commandes du genre $> ./programme_python.py > tar rvf fichier_sortie.tar
la commande tar rvf permet d’ajouter un fichier à une archive, cependant ce type de redirection ne concerne que les messages affichés a l’écran et non les fichiers générés.
Edité le 23/03/2011 à 13:17
tes fichiers sont tous generés en une seule fois ?
Il vaudrait mieux utiliser un | plutot qu’un >
Et tu voudrais pas essayer de les concatener en un seul gros fichier texte ?
pourquoi ne pas écrire un programme indépendant chargé des transferts et de l’archivage ???
ton programme en python poste le nom du fichier généré dans un pipe .
Un programme avec un thread de lecture du pipe , et des threads de traitement
( ou un truc avec inotify ).