J'utilise un rsyncscript pour synchroniser les données d'un hôte avec les données d'un autre hôte. Les données contiennent de nombreux fichiers de petite taille qui contribuent à près de 1,2 To.
Afin de synchroniser ces fichiers, j'ai utilisé la rsynccommande comme suit:
rsync -avzm --stats --human-readable --include-from proj.lst /data/projects REMOTEHOST:/data/
Le contenu de proj.lst est le suivant:
+ proj1
+ proj1/*
+ proj1/*/*
+ proj1/*/*/*.tar
+ proj1/*/*/*.pdf
+ proj2
+ proj2/*
+ proj2/*/*
+ proj2/*/*/*.tar
+ proj2/*/*/*.pdf
...
...
...
- *
Comme test, j'ai récupéré deux de ces projets (8,5 Go de données) et j'ai exécuté la commande ci-dessus. Étant un processus séquentiel, il nécessite 14 minutes 58 secondes pour terminer. Ainsi, pour 1,2 To de données, cela prendrait plusieurs heures.
Si je pouvais plusieurs rsyncprocessus en parallèle (en utilisant &, xargsou parallel), cela me ferait gagner du temps.
J'ai essayé avec la commande ci-dessous avec parallel(après cding dans le répertoire source) et cela a pris 12 minutes 37 secondes pour s'exécuter:
parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ ::: .
Cela aurait dû prendre 5 fois moins de temps, mais ce ne fut pas le cas. Je pense que je me trompe quelque part.
Comment puis-je exécuter plusieurs rsyncprocessus afin de réduire le temps d'exécution?
rsyncs est notre première priorité.
rsyncs en parallèle est désormais l'objectif principal.