Nous utilisons rsync pour mettre à jour un miroir de notre serveur de fichiers principal vers un serveur de sauvegarde colocalisé hors site. L'un des problèmes que nous rencontrons actuellement est que notre serveur de fichiers contient plus de 1 To de fichiers de petite taille (de l'ordre de 10 à 100 Ko), et lorsque nous transférons autant de données, la connexion est souvent interrompue plusieurs heures après le transfert. Rsync n'a pas de fonction de reprise/répétition qui se reconnecte simplement au serveur pour reprendre là où il s'est arrêté - il faut passer par le processus de comparaison de fichiers, qui finit par être très long avec la quantité de fichiers que nous avons.
La solution recommandée pour contourner ce problème est de diviser votre gros transfert rsync en une série de transferts plus petits. J'ai trouvé que la meilleure façon de le faire est d'utiliser la première lettre du nom des répertoires de premier niveau, ce qui ne nous donne pas une distribution parfaitement égale, mais c'est suffisant.
J'aimerais savoir si ma méthode est saine ou s'il existe un moyen plus simple d'atteindre cet objectif.
Pour ce faire, j'itère à travers A-Z, a-z, 0-9 pour choisir un caractère unique. $prefix
. Au départ, je pensais simplement exécuter
rsync -av --delete --delete-excluded --exclude "*.mp3" "src/$prefix*" dest/
(--exclude "*.mp3" est juste un exemple, car nous avons une liste d'exclusion plus longue pour supprimer des choses comme les fichiers temporaires)
Le problème est que tous les répertoires de premier niveau dans dest/ qui ne sont plus présents dans src ne seront pas pris en compte par --delete. Pour contourner ce problème, j'essaie plutôt ce qui suit :
rsync \
--filter 'S /$prefix*' \
--filter 'R /$prefix*' \
--filter 'H /*' \
--filter 'P /*' \
-av --delete --delete-excluded --exclude "*.mp3" src/ dest/
J'utilise le show
y hide
sur include
y exclude
car sinon, le paramètre --delete-excluded supprimera tout ce qui ne correspond pas à $prefix.
Est-ce le moyen le plus efficace de diviser le rsync en petits morceaux ? Existe-t-il un outil plus efficace, ou un drapeau que j'ai manqué, qui pourrait rendre cela plus simple ?