J'utilise un rsync
script 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 rsync
commande 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 rsync
processus en parallèle (en utilisant &
, xargs
ou parallel
), cela me ferait gagner du temps.
J'ai essayé avec la commande ci-dessous avec parallel
(après cd
ing 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 rsync
processus afin de réduire le temps d'exécution?
rsync
s est notre première priorité.
rsync
s en parallèle est désormais l'objectif principal.