rsyncがローカルファイルにデルタ転送を使用しないのはなぜですか?


25

現在、スペース予約をオンにしたトレントクライアントによってダウンロードされている大きなisoイメージがあります。つまり、(4 Mib)の一部のチャンクがダウンロードのために常に変化している間、ファイルサイズは変化しません。

90%のダウンロードで、後で時間を節約するために最初のrsyncを実行します。

$ rsync -Ph DVD.iso / media / another-hdd /
増分ファイルリストの送信

DVD.iso
       2.60G 100%40.23MB / s 0:01:01(xfer#1、to-check = 0/1)

送信2.60Gバイト受信73バイト34.59Mバイト/秒
合計サイズは2.60Gで、高速化は1.00です。

次に、ファイルが完全にダウンロードされたら、再びrsyncを実行します。

total size is 2.60G   speedup is 1.00

Speedup = 1は、デルタ転送が使用されなかったことを示しますが、ファイルの90%は変更されておらず、ターゲットディレクトリは別のFS上にあり、コピーには数分かかります。転送を高速化しないのはなぜですか?!rsyncデルタ転送を強制的に使用するにはどうすればよいですか?


6
あなたがしていることは意味をなしません。rsyncの目的は、ローカルではなく、ネットワークを介したファイルの転送を高速化することです。違いを見つけるには、ソースと宛先の両方を読み取る必要があります。宛先をローカルで読み取って違いを見つけるのにかかる時間で、通常のコピーを実行することもできます。ファイルをコピーするのではなく、最初の場所にダウンロードするだけです。
-psusi

1
ローカルで作業しているため、ハッシュを計算するよりもコピーする方が速いため、delta-xferは使用しません。はいの場合—回答を投稿して
くださいplz

9
特定の状況では、読み取りはローカルディスクに書き込むよりも高速です。また、SSDの摩耗を減らすこともできます。これは確かに有効な質問であり、答えは私にとって非常に貴重です。
HRJ

2
@psusiは、上記のHRJのコメントとは別に、ターゲットファイルが参照リンクされた場合(たとえば、btrfsまたはocfs2上)を考慮します。同期中の書き込みを最小限に抑えると、全体的なスペース使用量に大きな違いが生じる可能性があります。

回答:


20

マンページによると、psusiは正しい:

-W、--whole-file:ソースと宛先のマシン間の帯域幅がディスクへの帯域幅よりも大きい場合(特に「ディスク」が実際にネットワーク化されたファイルシステムである場合)このオプションを使用すると、転送が速くなります。これは、ソースと宛先の両方がローカルパスとして指定されている場合のデフォルトですが、バッチ書き込みオプションが有効になっていない場合のみです。


10
ああ、ありがとう!私はこの行を推測しました:) delta-trasferを有効にするには、-no-W
-kolypto

1
私のシステムで-no-Wは長いオプションだけでは動作しません-no-whole-file。このスイッチが必要な理由は、バックアップを設定していて、同じ修正時間のない大きなファイル(画像など)がある場合です。ローカルファイルシステムでデルタ転送を使用してこれらのファイルを同期するには、はるかに高速で、スピードアップは163.26です。
風の放浪者ジェシー

6
@JessetheWindWanderer、長いオプションは--no-whole-file--先頭のダブルに注意してください)。
エディC.

私は私達の方法を見つけ出すことができれば感謝エディC.私は私のコメントの編集をいただきたい:-(
ジェシー風のワンダラー

17

この質問に対する簡単な答えは次のとおりです。

--no-Wフラグを使用して、ローカルまたはリモートに関係なく、デルタ圧縮を強制します。

更新:ストーリーにはまだまだあるようです。delta compression唯一のrsyncの受信と送信プロセスの間で有効になっているようです。ファイルをファイルシステムに出力するときrsync、デルタ圧縮がオンになっていても、ファイル全体を書き出すことがあります。

「若かん短歌」の調査はこちらをご覧ください


2
--no-W私の場合、常にファイル全体を転送します。unix.stackexchange.com/questions/291156/を
和漢短歌

@WakanTankaそれは面白い!回答を更新しました。
HRJ

3

デフォルトでは、さまざまな安全上の理由から、rsyncは最初にターゲットファイルの新しいコピーを作成してから置き換えます。--inplaceと共に指定することでこれをオーバーライドできます--no-whole-file。これにより、rsyncはターゲットファイルのインプレース編集を行い、マニュアルページに記載されているさまざまなリスク(通常、この状況では軽微)を受け入れます。


0

デフォルトrsyncでは、宛先にファイルのコピーを作成し、元のファイルを新しいコピーで自動的に置き換えます。これは安全上の理由で行われます。あなたが探しているのは、ソースに関連して変更された宛先ファイルの部分のみを変更する--inplaceオプションrsyncです。

OPのユースケースでは、事前割り当てもオフにすることをお勧めします。これにより、スパースコピーを同期でき、はるかに高速になります。ダウンロードの場合、VFATのような非常に古いファイルシステムを使用していない限り、断片化について心配する必要はありません。特にメディアファイルはストレージメディアの最大パフォーマンスで読み取られないため、最適化は無駄な作業です。

ダウンロードディレクトリをまんべんなくコピー先ボリュームにコピーするには、次の順序でこれらのフラグと操作をお勧めします。

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

最初のパスは新しいファイルを宛先にまばらにコピーします2番目のパスは既存のファイルをその場で更新し、変更のみをコピーします

スパースコピーとインプレースデルタコピーを行うため、余分なIOを発生させることなくこれを繰り返し実行できます。20のtorrentを同時に実行している場合でも、宛先で書き込みを増幅したり、ソース/宛先ボリュームをスラッシングしたりすることはありません。


ここで「まばらに」とはどういう意味ですか、ウィル?私の知る限り、実際の単語の意味を反映していません。
ジュリアス

@Julius:それはまさにそれが意味するものを意味します-スパース割り当てを完全にサポートしてファイルをコピーするので、例えば、40GB HDRムービーはソースでよりもデスティネーションでそれ以上のスペースを占有しません。VirtualBoxディスクイメージでも同じです。前述のように、OPが機能するには事前割り当てを無効にする必要があります。
ウィル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.