Je me demande s'il est possible pour rsync de copier un répertoire vers plusieurs destinations distantes en une seule fois, ou même en parallèle. (pas nécessaire, mais serait utile.)
Normalement, quelque chose comme ce qui suit fonctionnerait très bien:
$ rsync -Pav /junk user@host1:/backup
$ rsync -Pav /junk user@host2:/backup
$ rsync -Pav /junk user@host3:/backup
Et si c'est la seule option, je vais l'utiliser. Cependant, / junk est situé sur un lecteur lent avec pas mal de fichiers, et la reconstruction de la liste de fichiers d'environ ~ 12 000 fichiers à chaque fois est extrêmement lente (~ 5 minutes) par rapport au transfert / mise à jour réel. Est-il possible de faire quelque chose comme ça, d'accomplir la même chose:
$ rsync -Pav /junk user@host1:/backup user@host2:/backup user@host3:/backup
Merci d'avoir regardé!
remote destination is not allowed with --read-batch
-
pour un nom de fichier signifie lire à partir de l'entrée standard, et STDIN est également lufoo
dans l'exemple, un fichier local.Vous pouvez essayer d'utiliser à l' unisson . La création de la liste de fichiers devrait être beaucoup plus rapide car elle conserve un cache des fichiers.
la source
Le
rsync
--batch-mode
prend en charge la multidiffusion. Si cela est possible sur votre réseau, cela pourrait valoir la peine de l'examiner.la source
que diriez-vous de changer les systèmes de fichiers?
Il y a quelque temps, j'ai changé un FS multi-téraoctets d'ext3 en XFS. Le temps de scanner les répertoires (avec environ 600 000 fichiers la dernière fois que j'ai vérifié) est passé de 15 à 17 minutes à moins de 30 secondes!
la source
Ce n'est pas une réponse directe, mais si vous utilisez rsync version 3+, il commencera à être transféré avant de générer la liste de fichiers complète.
Une autre option, encore peu efficace, serait de les exécuter en tant que jobs donc quelques-uns s'exécutent en même temps.
Aussi, je viens de penser à cette étrangeté si cela ne vous dérange pas d'utiliser tar:
Où chaque hôte local serait bien sûr des serveurs différents (suppose une connexion par clé). Je n'ai jamais utilisé ce qui précède cependant.
la source
Que diriez-vous d'exécuter les tâches rsync à partir de host1, host2 et host3? Ou, exécutez un travail à copier sur host1, puis exécutez-le sur host2 et host3 pour l'obtenir à partir de host1.
la source
Une meilleure solution serait de créer un référentiel avec git et de simplement pousser vers les 3 hôtes. Plus rapidement, vous n'auriez pas besoin de la partie liste de fichiers et elle consomme moins de ressources.
Bonne chance,
João Miguel Neves
la source
.git/
bien que les poussées vers les télécommandes qui auraient déjà la plupart des données seraient plus rapides. git ne remplace pas rsync.http
,nfs
etafp
. GitHub est un site Web qui s'occupe de créer et de maintenir des dépôts git pour vous, et les rend publics (sauf si vous payez).En recherchant cette réponse moi-même, je pense que vous devez d'abord créer un lot à l'aide de rsync, puis l'envoyer à tous, ce qui rendrait la liste des fichiers nécessaire à la fois, et vous pourriez simplement fond les trois rsyncs pour les exécuter en parallèle.
la source
Une autre solution possible consiste à exécuter autant de processus rsync en parallèle que vous avez d'hôtes, c'est-à-dire fork.
la source