web-dev-qa-db-fra.com

Comment accélérer rsync?

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.

38
Jake Wilson

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.

35
user23307

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

pas en utilisant la compression -z

et en utilisant --inplace

l'accélère aux performances des disques durs ou du réseau

la compression utilise beaucoup de CPU

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

la compression et le fait de 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.

36
Scott Kramer

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

Supprimez également l'option -z. Ceci n’est utile que pour la compression du trafic réseau.

rsync devrait maintenant être aussi rapide que cp.

22
vdboor

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. - no-compress pourrait vous accélérer. Cela pourrait avoir le plus gros impact ... mon test portait sur 13 000 fichiers, taille totale 200 Mo, et en 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 cela par ce billet sur stackexchange.com.
  3. -W pour copier des fichiers entiers - utilisez-le toujours si vous ne voulez pas qu'il compare 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 pour gérer fichiers fragmentés bien - cela ne fait pas de mal si vous n'avez pas de fichiers fragmentés.
  5. - exclude-from ou quelque chose de similaire , pour exclure des fichiers dont vous n'avez peut-être pas besoin, le temps sera réduit, mais la vitesse de transfert ne sera pas augmentée.
  6. C’est possible si vous envoyez la sortie dans un fichier tel que celui-ci rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err - le premier> imprime essentiellement un fichier avec tout ce que vous verriez normalement, et le 2> fait référence aux messages d’erreur.
  7. Enfin, exécuter plusieurs instances de rsync pour différentes parties de votre transfert pourrait être d'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 fixes et h pour les informations lisibles par l'homme.

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

Bonus - Voici la page de manuel de rsync , et si vous souhaitez 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".

8
Fin Hirschoff

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.

2
David Spillett