Comment paralleliser rsync avec fpsync

Bonjour,

L’installation ou l’utilisation de Nextcloud nĂ©cessite souvent de transfĂ©rer de grandes quantitĂ©s de donnĂ©es. Personnellement je suis amenĂ© Ă  gĂ©rer des donnĂ©es scientifiques et ce sont des centaines de milliers de fichiers et des To de donnĂ©es Ă  balader d’un disque Ă  un autre ou d’un serveur Ă  un autre.

Travaillant sous Linux mon outil favori pour le transfert des donnĂ©es est “rsync” qui est installĂ© par dĂ©faut dans la plupart des distributions Linux.

Les utilisateurs de Windows 10 (il y en a
) peuvent aussi dĂ©sormais l’utiliser puisqu’il est possible d’utiliser bash sous Windows 10. Ils peuvent ainsi disposer d’un outil autre que le copier/coller de Windows
 et open source.

Mais mĂȘme avec rsync, transfĂ©rer des grandes quantitĂ©s de donnĂ©es peut s’avĂ©rer trĂšs loooooong.

Une maniĂšre d’accĂ©lerer les transferts est donc de parallĂ©liser rsync, c’est Ă  dire de lancer plusieurs processus rsync en mĂȘme temps.

C’est lĂ  qu’intervient fpsync, un outil qui fait partie du logiciel fpart dĂ©veloppĂ© par Ganael Laplanche, qu’il soit ici remerciĂ© pour les heures de transferts Ă©pargnĂ©es


Comment ça marche ?
Avec mes mots à moi je dirai que fpart découpe les données à envoyer en morceaux puis fpsync envoi les morceaux en parrallÚle vers la destination.

Comment on l’installe ?
C’est trùs simple, il faut d’abord installer fpart. Par exemple sous Ubuntu on fait

 sudo apt install fpart

Je vous conseillerais tout de mĂȘme d’installer le logiciel depuis les sources pour avoir la derniĂšre version avec toutes les fonctionnalitĂ©s. C’est pas compliquĂ© et tout est expliquĂ© sur la page Github de fpart.

Comment on s’en sert ?
VoilĂ  un exemple simple :

  • La commande rsync “classique” (les options inplace, size-only et vrWO sont utilisĂ©es car je synchronise vers un montage s3fs, mais c’est une autre histoire)

    rsync --inplace --size-only -vrWO /source/ /mnt/destination/
    
  • La commande fpsync pour lancer 4 processus rsync simultanĂ©s

    fpsync -n 4 -o "--inplace --size-only -vrWO" /source/ /mnt/destination/
    

On peut vĂ©rifier que ça envoi du lourd


grep '/bin/sh -c  /usr/bin/rsync'
root      4216  0.0  0.0   4340   760 ?        S    08:20   0:00 /bin/sh -c  /usr/bin/rsync --inplace --size-only -vrWO  -r --files-from="/tmp/fpsync/parts/1548702468-5506/part.1263" --from0  "/source/  "         "/mnt/destination //"
root      4272  0.0  0.0   4340   728 ?        S    08:20   0:00 /bin/sh -c  /usr/bin/rsync --inplace --size-only -vrWO  -r --files-from="/tmp/fpsync/parts/1548702468-5506/part.1264" --from0  "/source/  "         "/mnt/destination //"
root      7694  0.0  0.0   4340   760 ?        S    08:22   0:00 /bin/sh -c  /usr/bin/rsync --inplace --size-only -vrWO  -r --files-from="/tmp/fpsync/parts/1548702468-5506/part.1265" --from0  "/source/  "         "/mnt/destination //"
root     14019  0.0  0.0   4340   772 ?        S    08:25   0:00 /bin/sh -c  /usr/bin/rsync --inplace --size-only -vrWO  -r --files-from="/tmp/fpsync/parts/1548702468-5506/part.1266" --from0  "/source/  "         "/mnt/destination //"

Bonus
Pour envoyer la commande et faire en sorte qu’elle continue Ă  s’exĂ©cuter quand on ferme le terminal :

nohup fpsync -n 4 -o "--inplace --size-only -vrWO" /source/ /mnt/destination/ &

Conclusion
Je n’ai pas tout testĂ© et je n’ai pas encore tout compris dans les options mais c’est clairement un gain de temps Ă©norme pour les transferts avec rsync.

Il y a d’autres outils mais je ne me suis pas encore penchĂ© sur la question, si vous avez des retours je suis preneur


https://github.com/jbd/msrsync --> moins complet mais ne requiert que rsync et python
http://moo.nac.uci.edu/~hjm/parsync/ --> LĂ  c’est pour des trĂšs gros volumes avec une Ă©norme bande passante (cluster de calcul)
https://github.com/pftool/pftool --> lĂ  encore on est plutĂŽt dans le monde HPC

2 Likes

hi. My rsync looks like this (doing this from the new NextCloud server):
rsync -Aavxt --exclude ‘nextcloud.log’ --exclude ‘updater-*’ oldnc_server.com:/media/nextcloud/ /media/nextcloud/

I am trying to make it go faster with fpsync. It looks like this:
fpsync -n 4 -o “-Aavxt --exclude ‘nextcloud.log’ --exclude ‘updater-*’” oldnc_server.com:/media/nextcloud/ /media/nextcloud/

but it doesn’t work. :frowning: Can you spot errors with my ‘fpsync’ line?

Thanks,
Nick