rsyncファイルリストの計算を高速化/回避


12

私はrsync 3.1.1を使用して2つのディスクの同期をとっています。1つはネットワーク上にあり、samba共有としてマウントされてい/mnt/ROUTER_WD_2TB/ます。これはソースであり、ネットワークの制限により、速度は最大30〜40MB / sです。もう1つは宛先で、ローカルにマウントされ(ピーク110MB / s)、です/mnt/BACKUP_HITACHI_2TB/

次のrsyncコマンドを使用します。

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

ディスクには多くのファイルが含まれ、そのほとんどは小さいです。

問題は、rsyncはかなり長い時間(10〜20メートル)を取るある前に、任意のファイルを移動し始め、それは小さなファイルの非常に大きな数の計算、ファイルリストに持っているので、私は推測します。この期間中、ファイルの転送速度は約40MB / sですが、新規ネットワークの使用率は200〜500KB / sと低いです。

通常、rsyncは最終的にコピーする必要のあるものを見つけるのに約15分かかり、それをコピーするのに5秒かかり、さらに5分間コピーする他のファイルをチェックし続けます。全体として、5秒のファイルコピーは最終的に20分間続きます。

フォルダを除外する以外に、ファイルをコピーする前にこの長い期間を回避するために取ることができる手段はありますか?rsyncがすべてのファイルリストを最初から再構築する必要がないように実装できる「キャッシュ」の種類はありますか?


1
このスレッドから解決策を試しましたか?unix.stackexchange.com/questions/189878/...
UVV

@UVV私はそれをしていません。私はそれを行うかもしれませんが、1)何らかの理由で、rsyncが私のケースですでにフルコアを使用していないようです(= CPUが制限されているのか、それとも他の場所に制限があるのか​​わからない)および2)これはデュアルコアCPUの場合、2倍の改善があったとしても、改善の余地はかなりあります。
AF7

ええ、これは私には狂ったように見えます、なぜこれでrsyncがとても遅いのですか?「--size-only」を使用しても、rsyncが増分ファイルリストを作成するには、時間がかかるようです。どうして?ファイルサイズを手動で確認して、どれがはるかに速く変更されたかを確認できます これほど多くの時間を無駄にしているのは何ですか。また、これらの機能をオフにするにはどうすればよいですか。編集:ああ、気にしないで、私は誤って「c」フラグを設定しました。チェックサムがないと、これは非常に高速です。
ベンファーマー

回答:


5

これまでのようにrsync、それは(それが有名であるために、そのデルタアルゴリズムを含む)の最適化のほとんどを無効にしますので、あなたは2つのローカルファイルツリー間でコピーしている懸念しています。rsyncリモートサーバーでを実行できる場合(ネットワーク全体で真のクライアントサーバーシナリオが得られる場合)、かなりの量の牽引力が得られます。

それにもかかわらず、ここに考慮すべき他のオプションがあります

  1. 古いファイルを削除することを心配せずにコピーします。これにより、より高速な転送をより頻繁に実行し、遅いクリーンアップを1日1回だけ行うように委任できます。

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. rsyncのデフォルトの削除アルゴリズムのバリエーションを使用して、転送前にファイルの完全なリストを作成しないようにします。

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. トップレベルのディレクトリを別々のタスクに分割し、それらを並行して実行します。ディスクがIOにバインドされている場合、これは実際には効果がなく、プラッターを回転させると、ほぼ確実に事態が悪化することがあります。

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

これらの提案のいずれも役に立たない場合は、それが何--verbosersyncしているかを確認するために別の提案を追加する価値があります。変更されていないすべてのファイルを処理しているのではないかと思います。十分なファイルがある場合、これには単に長い時間がかかります。


--delete --delete-during私のためにそれをしませんでした—それはまだインクリメンタルなファイルリストを送信しました— --delete --delete-beforeに直接行きました:building file listこれは大きな進歩のようです。おもう。
mlissner 2018

いいえ、それは逆です、私は恐れています。あなたが使用している場合は--delete-before、その後、rsync削除用とコピーするための次の:ファイルツリー全体で二つのパスを実行します。
roaima

ありがとう。その場合...増分ファイルリストの作成を回避する方法はありますか?
mlissner

@mlissnerそれはいくつかの異なる要因に依存します。最大の問題は、ローカルからローカルへのコピーか、ローカルからリモートへのコピーかです。
roaima

私にとってローカルからローカルまでですが、ローカルの1つはUSBディスクですか?
mlissner

-2

-vvログ全体を表示するために使用できますrsync


2
これはどのように質問に答えますか、つまり、これはどのようにスピードアップしますか?
クサラナンダ

ログを見るだけで、rsyncの開始に非常に時間がかかった理由がわかります。rsyncからスキップして時間を短縮できるファイルがある可能性があります。
namaiiee
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.