web-dev-qa-db-ja.com

純粋なcpまたはscpに比べて、rsyncが非常に遅いのはなぜですか?

マウントされた共有を介してLinuxからWindows 7にファイルを転送しています(共有はマウントされていますfromWindowson Linux)。LAN内の古いマシンから新しいマシンに大量のデータ(つまり、ほぼTB)をコピーしています。 100MBitしか持っていないのでもう十分残念です。当然私は盲目的にrsyncを使用しましたが、なぜそれがそんなに遅いと感じたのか、1日後にはすでに疑問に思いました。プログレスメーターを有効にすると、転送速度が約2MB /秒であることがわかりました。

そこで、妥当な大きなファイル(800MB)を取り、転送タイミングを追跡しました(1)。

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

1)各実行の間にファイルを削除しました
2)localhostを介してscpで同じLinuxマシンに直接共有します。まったく役に立たないが、進行状況メーターを提供

テストは簡単でした

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

Scpのホスト/ポート以外の特別な引数はありません。 rsyncの-Wスイッチを試しましたが、10分後にキャンセルしました。 rsyncはLenny上で動作する3.0.3です。いつでもコピープロセスを中断して再開できるようにするには、rsyncに進みますが、今はこの要件を真剣に再検討する必要があると思います。

どうしてそんなに大きな違いがあるのでしょうか?

更新/解決:

rschulerのおかげで問題を解決できました。効率上の理由から、smbマウントの代わりにrsyncデーモンを使用してください。上記のDeltaCopyは機能しますが、いくつかのことに注意する必要があります

  • それは素晴らしいGUIラッパーですが、何かがうまくいかない場合は、それを修正する方法を知っていると良いでしょう。初めて間違ったrsyncサービスを実行するためのユーザー資格情報を入力したようですが、GUIでは新しい資格情報を設定できませんでした。私はそれがサービスとして実行されていることを理解し、適切な資格情報をそこに設定することができました
  • 接続を許可するには、ポートをファイアウォールに手動で追加する必要があります
  • 個人的な好み:共有がパスワードで保護されていることを確認するか、パスワードが保護されていない場合は、サービスがWindowsで自動的に開始されないようにしてください。念のため
  • ラップされたrsyncバイナリはネイティブのWindowsポートではなく、cygwin上に構築されています。ただし、含まれているcygwin DLLは、UTF8を適切に処理せず、非ASCII文字を破損します。 http://www.okisoft.co.jp/esc/utf8-cygwin/ から固定DLLを取得します。

その後、転送レートは2MB/sから最大8MB/sに急上昇しました。本当に素敵!

15
mark

(共有はLinux上のWindowsからマウントされます)

それがあなたの問題です。 rsyncは宛先を介してローリングチェックサムを実行しています。ウィンドウは共有します。チェックサムを計算するために、ネットワーク経由ですべてのデータをプルしています。 (おそらく2回以上)。

両方のマシンでrsyncを実行する必要があります。こうすることで、違い(およびチェックサム)のみがネットワークケーブル経由で転送されます。 DeltaCopy はウィンドウ化されたrsyncです。それはあなたを始めるのに十分なドキュメントがあります。

Rsyncを誤用している可能性があると私が思う理由についてのより良い説明は、これに対する賛成票 質問 を参照してください。

18
Rodney Schuler