Mise à jour: Comme le délai d'attente semble se produire lorsque rsync crée les sommes de contrôle, voici différentes approches qui peuvent fonctionner.
Premièrement, pour ne garder qu’un seul rsync ouvert, vous pouvez (en plus des options mentionnées par Michael Kjörling) jouer avec l’option --sockopts
. Cela vous donne la possibilité de définir le même type d'options de socket que vous pouvez définir lors de la création d'un socket dans le code, par exemple SO_RCVTIMEOUT=0
pour désactiver les délais d'attente pour la réception de données.
Deuxièmement, l' --progress-file
option peut suffire à ne pas déclencher le délai d'attente, en renvoyant en permanence des informations de progression.
Troisièmement, vous pouvez faire une synchronisation fichier par fichier, par exemple comme ceci:
for i in ls /path/to/dir; do rsync -ca $i remoteserver:/path/to/dir; done
Quatrièmement, vous pouvez utiliser ssh comme mécanisme de transfert et utiliser ses options TCPKeepAlive
et ServerAliveInterval
/ ServerAliveCountMax
de manière appropriée pour maintenir la connexion active.
Réponse originale:
rsync déjà fait une approche fichier par fichier - il vérifiera chaque fichier dans la liste des fichiers à être synchronisés, et ne synchroniser ceux qui n'existent pas sur le système cible, ou qui sont différents de ces fichiers sur le système cible.
Ce que vous pouvez faire pour réduire le temps de transfert est d’utiliser l’option -z
qui compressera pendant le transport et le drapeau --partial
pour que, si le transfert est interrompu, vous conserviez tout fichier partiellement synchronisé afin que rsync puisse continuer où il était. Les options --timeout et --ontimeout mentionnées par Michael Kjörling seraient également utiles.