Pourquoi mon rsync est-il si lent par rapport au cp pur ou même au scp?

15

Je transfère les fichiers de Linux vers Windows 7 via un partage monté (le partage est monté à partir de Windows sur Linux) .. Je copie beaucoup de données (c'est-à-dire près d'un To) de l'ancienne vers la nouvelle machine dans mon LAN . Je suis déjà assez malheureux pour ne disposer que de 100 Mo. Naturellement, j'ai utilisé aveuglément rsync mais je me suis déjà demandé après une journée pourquoi il se sentait si lent. L'activation du compteur de progression a montré un taux de transfert d'environ 2 Mo / s.

J'ai donc pris un gros fichier raisonnable (800 Mo) et suivi le timing du transfert (1):

cp : 05:33
scp (2): 06:33
rsync : 21:51

1) J'ai supprimé les fichiers entre chaque exécution
2) scp via localhost sur la même machine Linux directement sur le partage; complètement inutile mais fourni un indicateur de progression

Les tests étaient aussi simples que

(cp|scp|rsync) <source> <destination>

Pas d'arguments spéciaux à l'exception de host / port pour scp. J'ai même essayé le -Wcommutateur pour rsync mais j'ai annulé après dix minutes. rsync est 3.0.3 fonctionnant sur Lenny. Pour pouvoir interrompre le processus de copie à tout moment et reprendre, conduisez-moi à rsync, mais maintenant je pense que je dois sérieusement reconsidérer cette exigence.

Comment une telle différence est-elle possible?

Mise à jour / résolu:

Grâce à rschuler, j'ai pu résoudre le problème: utiliser le démon rsync au lieu du montage smb pour des raisons d'efficacité. Le dit DeltaCopy fonctionne, mais il faut faire attention à certaines choses

  • c'est une belle interface graphique, mais si quelque chose ne va pas, il est bon de savoir comment y remédier. Il semble que j'aie entré mes informations d'identification utilisateur sous lesquelles exécuter le service rsync, la première fois, mais l'interface graphique ne m'a pas permis d'en définir une nouvelle. J'ai compris qu'il fonctionnait en tant que service et que je pouvais y définir les informations d'identification appropriées
  • Nécessaire pour ajouter manuellement le port au pare-feu pour autoriser les connexions
  • Goût personnel: assurez-vous que les partages sont protégés par mot de passe ou, sinon, assurez-vous que le service ne démarre pas automatiquement avec Windows; Au cas où
  • Le binaire rsync encapsulé n'est pas un port Windows natif mais s'appuie sur cygwin. Cependant, la DLL cygwin contenue ne gère pas correctement UTF8 et les caractères non ascii modifiés. Obtenez une DLL fixe sur http://www.okisoft.co.jp/esc/utf8-cygwin/ .

Après cela, le taux de transfert est passé de 2 Mo / s à ~ 8 Mo / s; absolument fantastique!

marque
la source
Avez-vous supprimé le fichier de destination entre chaque exécution de votre test? Si le fichier de destination existait déjà et que les métadonnées n'étaient pas correctes, il faudrait alors additionner à la fois la source et la destination.
Zoredache
@Zoredache: J'ai supprimé les fichiers entre les runs; le -Wcommutateur est également censé ignorer cela
marquez

Réponses:

18

(le partage est monté à partir de Windows sur Linux)

Voilà votre problème. rsync effectue des sommes de contrôle glissantes sur la destination. Les fenêtres se partagent. Vous tirez toutes les données sur le réseau pour calculer les sommes de contrôle. (Peut-être plus d'une fois).

Ce que vous devez faire est d'exécuter rsync sur les deux machines. De cette façon, seules les différences (et les sommes de contrôle) seront transférées via le câble réseau. DeltaCopy est un rsync fenêtré. Il contient suffisamment de documents pour vous aider à démarrer.

Voir la réponse votée à cette question pour une meilleure explication pourquoi je pense que vous utilisez peut-être mal rsync.

Rodney Schuler
la source
Bingo, votre réponse ne pourrait pas être plus précise. Merci beaucoup, j'ai appris ma leçon.
marquez