parallel-rsync – Empiler les rsync en parallèle sans galère

Vous synchronisez 4 ou 5 dossiers vers plusieurs serveurs avec rsync ? Alors vous connaissez ce sketch quand un job mouline pendant que les autres font la queue, parce que rsync de base c’est mono-thread et ça avance en file indienne.
Hé bien y’a un petit utilitaire Python qui dégoupille tout ça, pondu par overflowy. Ça s’appelle
parallel-rsync
et le nom annonce la couleur !
L’idée c’est de pouvoir empiler plusieurs jobs rsync en parallèle, avec une config YAML pour piloter le tout. Vous décrivez vos sources et destinations dans sync.yml, vous lancez parallel-rsync -c sync.yml --workers 4 --max-per-host 2, et hop, ça parallélise.
Le bougre tourne sur un ThreadPoolExecutor Python 3 qui spawn N processus rsync système avec un cap global et un cap par hôte. Et pendant ce temps, des barres de progression vous affichent l’avancement de chaque transfert sans que la console parte en sucette.

La dernière fois, je vous parlais de
rsyncy
qui collait juste une barre de progression à un rsync solo mais là, on monte clairement d’un cran avec une orchestration multi-cibles.
--workers cap c’est donc le nombre total de processus rsync simultanés (4 par défaut). --max-per-host limite la concurrence par destination (2 par défaut, histoire de ne pas saturer un seul serveur, parce que oui, balancer 8 rsync sur la même machine c’est juste se tirer une balle dans le pied côté I/O).
--timeout met une laisse à chaque rsync, --dry-run ajoute le flag à toutes les commandes pour tester avant de tirer, et --no-progress débraye les barres si vous voulez juste les logs. Côté logging, --log-file et --log-level font également le job.
Par contre y’a pas de retry automatique donc si une session SSH coupe en plein transfert, faudra relancer à la main. C’est logique mais un peu dommage.
Sur un homelab, ce genre de config YAML permet de résoudre le problème des synchros récurrentes avec un seul fichier centralisé au lieu de 8 scripts shell.
Notez aussi que le repo build un binaire universel via
cosmofy
, qui empaquette le tout en un exécutable cross-platform Windows, macOS et Linux d’un coup. Du coup, pas besoin d’installer Python sur la machine cible. Carrément pratique pour distribuer sur des serveurs où vous n’avez pas envie de gérer un environnement Python complet avec pip et un venv.
Petit point d’attention quand même : rsync lui-même doit être installé sur la machine qui lance le binaire, ce qui est natif sous macOS et Linux mais nécessite WSL ou Cygwin sous Windows.
Y’avait déjà
msrsync
qui découpe les transferts en buckets,
parsyncfp
qui s’appuie sur fpart pour grouper par taille, et la classique combine find . -type f | parallel -j10 rsync que tout sysadmin a bricolée un jour pour gratter de la bande passante. De son côté, overflowy se place plutôt sur le créneau "config déclarative" pour orchestrer plusieurs rsync entre sources et cibles.
Le code est sous licence MIT et tout se passe sur le
repo GitHub
. À tester si vous orchestrez régulièrement plusieurs rsync à la main.
Source : korben.info