Comment accélérer rsync?

36

J'utilise rsync pour synchroniser un répertoire sur mon disque dur USB externe. C'est environ 150 Go de données. Plus de 50000 fichiers, je suppose.

Il est en train de lancer sa première synchronisation pour le moment, mais sa copie s'effectue à un taux de seulement 1 à 5 Mo / s. Cela semble incroyablement lent pour un boîtier USB 2.0. Il n'y a pas d'autre transfert sur le lecteur non plus.

Voici les options que j'ai utilisées:

rsync -avz --progress /mysourcefolder /mytargetfolder

J'utilise Ubuntu Server 9.10.

Jake Wilson
la source
2
êtes-vous sûr d'obtenir une connexion USB2? une copie (autre que rsync) ou une autre opération d'écriture s'exécute-t-elle à une vitesse normale? Si non, avez-vous essayé une opération de copie / autre écriture avec un autre port / câble USB?
quack quixote
Voir également serverfault.com/questions/43014/… - il existe également des personnes qui utilisent deux canalisations tar commandes ou cpio.
Blaisorblade

Réponses:

32

Pour la première synchronisation, utilisez simplement

cp -a  /mysourcefolder /mytargetfolder

rsync n’ajoute de surcharge que lorsque la destination est vide.

aussi .. l'option -z tue probablement votre performance, vous ne devriez pas l'utiliser si vous ne transférez pas de données sur un lien lent.

user23307
la source
3
rsync est appelé ainsi parce que c'est pour éloigné synchronisation et n’est pas vraiment approprié pour un volume connecté localement pour cette raison même.
msanford
4
Il est censé être utilisable également pour les transferts locaux et est beaucoup plus flexible. Ce n'est probablement que trop pour la première synchronisation.
Blaisorblade
1
rsync est également une synchronisation à sens unique. Très bon pour la sauvegarde sur un serveur ou à partir d'un serveur. Toutefois, si vous souhaitez une synchronisation locale à deux voies vers un lecteur amovible, vous pouvez consulter csync. csync.org/get-it ne pas confondre avec csync2 qui est un projet complètement différent.
Jesse the Wind Wanderer
3
rsync -avz --progress /mysourcefolder/ /mytargetfolder ou vous obtiendrez une copie de mysourcefolder à l'intérieur de mytargetfolder plutôt que de refléter le contenu
editor
1
Cette réponse ne répond pas à la question. La question était de savoir comment optimiser rsync - ne pas le remplacer par la commande cp.
oemb1905
34

Si vous utilisez rsync avec un réseau rapide ou un disque à l’autre sur le même ordinateur,

ne pas en utilisant la compression -z

et en utilisant --inplace

accélérez les performances des disques durs ou du réseau

la compression utilise beaucoup de CPU

ne pas utiliser inplace rend le disque dur thrash beaucoup (il utilise un fichier temporaire avant de créer le fichier final)

compression & amp; ne pas utiliser inplace est préférable pour le faire sur Internet (réseau lent)

NOUVEAU: soyez conscient de la destination ... s'il existe une "compression" NTFS activée ... cela ralentit considérablement les gros fichiers (je dirais plus de 200 Mo) rsync semble presque bloqué, c'est à cause de cela.

Scott Kramer
la source
La compression NTFS est lente sur les gros fichiers
Scott Kramer
Je ne vois rien à propos de '--inline' sur la page de manuel
Antoine
1
C'est '--inplace'
Scott Kramer
21

Utilisez le -W option. Ceci désactive les comparaisons delta / diff. Lorsque la durée et la taille du fichier diffèrent, rsync copie l'intégralité du fichier.

Enlevez aussi le -z option. Ceci n’est utile que pour la compression du trafic réseau.

À présent rsync devrait être aussi rapide que cp.

vdboor
la source
4
Note mineure: -z n'est utile que pour faible vitesse trafic réseau. Si votre réseau est suffisamment rapide, les choses ralentiront, car vous serez limité par le processeur.
WhyNotHugo
3
Ces conseils ont considérablement accéléré le transfert de mes fichiers entre deux périphériques NAS, merci!
djhworld
1
mais notez que selon la page de manuel dit pour -W: "Ceci est la valeur par défaut lorsque la source et la destination sont spécifiées en tant que chemins locaux, mais uniquement si aucune option d'écriture par lot n'est en vigueur."
GuoLiang Oon
4

Premièrement, le nombre de fichiers dans ce cas va être un facteur majeur. C'est une taille moyenne de 3 Mo chacun. Il y a probablement un goulot d'étranglement qui influence la vitesse dans le cas du PO. Plus ici - C'est une lecture plutôt sèche, mais la photo de couverture en vaut la peine.

Alors, en utilisant rsync pour copier dans un répertoire vide? Voici quelques moyens pour l'accélérer:

  1. Non -z - n'utilisez certainement pas -z comme dans l'OP.
  2. - Pas de compression pourrait vous accélérer. Cela pourrait avoir le plus grand impact ... mon test portait sur 13 000 fichiers, taille totale 200 Mo, et utilisant rsync 3.1.3. J'ai synchronisé avec une partition différente sur le même lecteur SSD interne. Avec --no-compress, j'obtiens 18 Mbps et sans elle, 15 Mbps. cp, en passant, obtient 16 Mbps. C'est une taille de fichier moyenne beaucoup plus petite cependant. Aussi - je ne trouve pas de documentation pour --no-compress. J'ai appris à ce sujet de ce post sur stackexchange.com.
  3. -W à copier des fichiers entiers - utilisez toujours ceci si vous ne voulez pas comparer les différences; Qu'à cela ne tienne, l'objectif de rsync est de comparer les différences et de ne mettre à jour que les modifications.
  4. -S à gérer fichiers clairsemés bien - ne peut pas nuire si vous n'avez pas de fichiers rares.
  5. --exclude-from ou quelque chose de similaire exclure des fichiers inutiles réduira le temps, mais n'augmentera pas la vitesse de transfert.
  6. Ses possible si vous envoyez la sortie dans un fichier comme celui-ci rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err - le premier & gt; En gros, imprime un fichier avec tout ce que vous verriez normalement, et le 2 & gt; fait référence aux messages d'erreur.
  7. Finalement, exécuter plusieurs instances de rsync pour différentes parties de votre transfert pourrait être une grande aide.

Ma commande serait:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

Si tout semblait bien aller, je supprimerais "--dry-run" et le laisserais tomber. A, X et E couvrent les attributs étendus et les autorisations non couvertes par -a, l pour les liens symboliques, H pour les liens concrets et h pour les informations lisibles.

La mise à jour d'un répertoire déjà synchronisé sur un lecteur USB, le même lecteur ou un réseau nécessite des commandes rsync différentes pour optimiser la vitesse de transfert.

Prime - voici la page de manuel rsync et si vous voulez tester la vitesse de votre disque dur, bonnie ++ est une bonne option, et pour la vitesse de votre réseau, essayez iperf .


* La publication a presque dix ans, mais les moteurs de recherche l’apprécient, et je la vois toujours. C'est une bonne question, et je ne pense pas que la meilleure réponse à "comment accélérer rsync" devrait être "utiliser cp à la place".

Fin Hirschoff
la source
1

Vous ne dites pas quelle est la distribution de taille de vos fichiers. S'il y a beaucoup de petits fichiers, cela réduira le taux de transfert global en augmentant le temps de latence des mouvements de la tête dans les lecteurs source et cible, à mesure que l'outil ouvre de nouveaux fichiers et que le système d'exploitation conserve les entrées de répertoire et autres métadonnées (telles que le journal du système de fichiers utilisé). la journalisation de métadonnées comme ext3 / ext4 et NTFS le fait par défaut) à jour pendant le transfert. Un processus de copie de fichier n'entraînera sa progression que pour les objets volumineux, lorsqu'un simple transfert en masse est en cours.

David Spillett
la source