87 votes

Comment accélérer rsync ?

J'exécute rsync pour synchroniser un répertoire sur mon disque dur externe USB. Il y a environ 150 gigas de données. 50000+ fichiers je suppose.

Il exécute sa première synchronisation en ce moment, mais il copie les fichiers à un taux de seulement 1-5 MB/s. Cela semble incroyablement lent pour un boîtier USB 2.0. Il n'y a pas d'autres transferts en cours sur le lecteur non plus.

Voici les options que j'ai utilisées :

rsync -avz --progress /mysourcefolder /mytargetfolder

J'utilise Ubuntu Server 9.10.

62voto

Scott Kramer Points 720

Si vous utilisez rsync avec un réseau rapide ou de disque à disque dans la même machine,

pas en utilisant la compression -z

et en utilisant --inplace

l'accélère en fonction des performances des disques durs ou du réseau.

la compression utilise beaucoup de CPU

pas l'utilisation de l'inplace fait beaucoup de dégâts sur le disque dur (il utilise un fichier temporaire avant de créer le fichier final).

la compression et l'absence d'utilisation de l'inplace sont préférables à l'utilisation sur Internet (réseau lent).

NOUVEAU : Faites attention à la destination... si la "compression" NTFS est activée... cela ralentit sévèrement les gros fichiers (je dirais 200MB+) rsync semble presque bloqué, c'est causé par cela.

46voto

baash05 Points 1554

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

Retirez également le -z option. Cette option n'est utile que pour la compression du trafic réseau.

Maintenant rsync devrait être aussi rapide que cp .

45voto

user23307 Points 6595

Pour la première synchronisation, utilisez simplement

cp -a  /mysourcefolder /mytargetfolder

rsync n'ajoute des frais généraux que lorsque la destination est vide.

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

40voto

Fin Hirschoff Points 500

Tout d'abord, le nombre de fichiers dans ce cas va être un facteur important. La taille moyenne de chaque fichier est de 3 Mo. Il y a probablement un goulot d'étranglement io qui influence la vitesse dans le cas de l'OP. Plus d'informations ici - C'est une lecture plutôt aride, mais la photo de couverture vaut le coup.

Donc, utiliser rsync pour copier dans un répertoire vide ? Voici quelques moyens d'accélérer le processus :

  1. Non -z - n'utilisez surtout pas -z comme dans l'OP.
  2. --no-compress pourrait vous accélérer. Cela pourrait avoir le plus grand impact ... mon test portait sur 13 000 fichiers, d'une taille totale de 200 Mo, et utilisait rsync 3.1.3. J'ai synchronisé vers une partition différente sur le même disque SSD interne. Avec --no-compress, j'obtiens 18 MBps, et sans cela j'obtiens 15 MBps. cp, d'ailleurs, obtient 16 MBps. La taille moyenne des fichiers est cependant beaucoup plus petite. Par ailleurs, je ne trouve aucune documentation sur la fonction --no-compress. Je l'ai appris grâce à cet article sur stackexchange.com.
  3. -W à copier des fichiers entiers - utilisez toujours ceci si vous ne voulez pas qu'il compare les différences ; ne tenez pas compte du fait que le but de rsync est de comparer les différences et de mettre à jour uniquement les changements.
  4. -S à gérer fichiers épars ça ne peut pas faire de mal si vous n'avez pas de fichiers épars.
  5. --exclude-from ou quelque chose de similaire pour exclure les fichiers dont vous n'avez peut-être pas besoin réduira le temps, mais n'augmentera pas votre vitesse de transfert.
  6. C'est possible si vous envoyez la sortie dans un fichier comme ceci rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err - la première > imprime essentiellement un fichier avec toutes les choses que vous verriez normalement, et la 2> fait référence aux messages d'erreur.
  7. Enfin, Exécution de plusieurs instances de rsync pour différentes parties de votre transfert pourrait être d'une grande aide.

Mon commandement serait :

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

Si tout semble bien, j'efface "--dry-run" et je laisse faire. A, X, et E couvrent les attributs étendus et les permissions non couvertes par -a, l est pour les liens souples, H est pour les liens durs, et h est pour lisible par l'homme.

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

Bonus - 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 .


*Ce billet a presque dix ans, mais les moteurs de recherche l'apprécient et je continue à le voir. C'est une bonne question, et je ne pense pas que la réponse principale à "comment accélérer rsync" devrait être "utilisez cp à la place".

4voto

Frédéric N. Points 41

Vous voulez certainement donner rclone un essai. Cette chose est follement rapide :

$ tree /usr [...] 26105 répertoires, 293208 fichiers

$ sudo rclone sync /usr /home/fred/temp -P -L --transferts 64

Transféré : 17.929G / 17.929 GBytes, 100%, 165.692 MBytes/s, ETA 0s Erreurs : 75 (réessayer peut aider) Vérifications : 691078 / 691078, 100% Transférés : 345539 / 345539, 100% Temps écoulé : 1m50.8s

Il s'agit d'une copie locale depuis et vers un SSD LITEONIT LCS-256 (256GB).

Vous pouvez ajouter --ignore-checksum lors de la première exécution pour le rendre encore plus rapide.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X