小さなファイルのrsyncを高速化する方法


15

次のコマンドを使用して、あるサーバーから別のサーバーに何千もの小さなファイルを転送しようとしています。

rsync -zr --delete /home/user/ user@10.1.1.1::backup

現在、転送には時間がかかります(時間を計りませんでした)。これを速くする方法はありますか?別のツールを使用する必要がありますか?rsyncプロトコルを使用するのではなく、ssh経由でrsyncを使用する必要がありますか?


それは本当に数百人だけですか?数千以下のように?
ゾレダチェ

それ以上... 475,576合計9.3GB-

これは、ファイルシステムレベルで動作するほとんどすべてのツールを使用するのに苦労します。プロファイリングを行うと、かなりの時間をかけて電話をかけることになりstat()ます。
ゾレダチェ

なぜない-aけど-r
カマエ

回答:


13

ボトルネックを特定する必要があります。rsyncではありません。ネットワーク帯域幅ではないでしょう。@Zoredacheは、それが最も可能性の高いすべてによって生成されたIOPSの膨大な数である提案stat()のコール。同期ツールはすべて、ファイルを統計する必要があります。同期実行中iostatに確認します。

質問は次のようになります。統計を最適化する方法は?2つの簡単な答え:

  1. より高速なディスクサブシステムを取得します(必要に応じて両方のホストで)。
  2. ファイルシステムを調整します(例:ext3でのマウントnoatimeとの追加dir_index)。

偶然にディスクiopsが制限ではない場合、dirツリーを複数の個別のツリーに分割して、複数のrsyncを実行してみてください。


1
おかげで、私はdir_indexを調べて、どのように進むかを確認します(すでにnoatimeを使用しています)。disk ioがボトルネックのようですが、すでにRAID 5で15k SASドライブを実行しています。次のステップはSSDですが、ホスティング会社はまだそのオプションを提供していません。

5

圧縮は、小さなファイル(100バイト未満など)にはあまり役立ちません。小さなファイルの場合、圧縮バージョンが元のファイルよりも大きくなる場合があります。フラグrsyncなしでコマンドを試してください-z

sshセキュリティには適していますが、転送は高速になりません。実際、暗号化/復号化が必要なため、転送が遅くなります。

rsync転送するデータが大量にあるため、最初の実行時に高速に見えない場合があります。ただし、このコマンドを定期的に実行することを計画している場合、rsync変更されていないファイルを転送しないのが賢明なので、後続の実行ははるかに高速になる可能性があります。


rsyncクライアントを使用するだけの場合、舞台裏でSSHを使用します。rsyncを使用するときは、暗号化を無効にする必要があります。参照:stackoverflow.com/a/1821574/64911
mlissner

1

どのバージョンのrsyncを使用していますか?3.0.0より古いもの(両端)には、大量の転送を高速化する増分ファイルリスト機能がありません。


両方のサーバーでrsync 3.0.5を使用します。

1

-v --progressrsyncコマンドラインに追加します

rsyncは2つのステップで実行されます。

  1. 両方のプラットフォーム上のすべてのファイルを詳細に参照して、サイズとデータを比較します
  2. 実際の転送を行う

ネストされたディレクトリにある何千もの小さなファイルをrsyncしている場合、rsyncがこの時間のほとんどをサブディレクトリに移動してすべてのファイルを見つけることに費やされている可能性があります

ブラウジングに時間がかかっていない場合、その時間は、単に新しいファイル転送の開始ごとにすべてのレイテンシーが追加されたことが原因である可能性があります。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.