rsyncは、完全に再送信せずに部分的にのみ変更された大きなファイルを更新できますか?


15

ネットワーク経由で転送するのに長い時間がかかる非常に大きなファイルイメージファイル(わずか数ピクセルの違い)に小さな変更を加えています。

rsyncがファイルの違いを識別し、ネットワーク経由で小さな差分のみを送信する方法はありますか?


3
ネットワーク経由でコピーする場合rsync、デフォルトでこのように動作します。マイナーな変更がファイルへのマイナーな変更であり、ファイルがリンクの両側にほぼ同一のバージョンで既に存在する限り、転送されるデータはファイルの合計サイズよりもはるかに小さいはずです。マニュアルページの最初の段落から:「ソースファイルと宛先の既存ファイルとの差分のみを送信することにより、ネットワーク経由で送信されるデータ量を削減するデルタ転送アルゴリズムで有名です。」
user4556274

ああ、それはコメントではなく答えとして投稿すべきです。rsyncがこのように動作していることは明らかではありませんでしたが、その期待を踏まえて、ファイルが予想以上に変更されたと思い、その理由を調べます。画像圧縮プロセスは、おそらくファイル全体で生のバイト値を変更します。
デビッドパークス

回答:


11

rsyncデルタ転送アルゴリズムはデフォルトでこれを行います。rsyncのマンページを引用:

説明

Rsyncは高速で非常に用途の広いファイルコピーツールです。ローカル、リモートシェルを介して別のホストとの間、またはリモートrsyncデーモンとの間でコピーできます。動作のあらゆる側面を制御し、コピーするファイルのセットを非常に柔軟に指定できる多数のオプションを提供します。デルタ転送アルゴリズムで有名です。これは、ソースファイルと宛先の既存ファイルとの差分のみを送信することにより、ネットワーク経由で送信されるデータ量を削減します。Rsyncは、バックアップとミラーリング、および日常的に使用するための改善されたコピーコマンドとして広く使用されています。

無効にしたい場合は、-Wまたは--whole-fileオプションを使用する必要があります。

-W、-whole-file

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

ファイルの変更量が本当にわかっている場合は、デルタブロックサイズを調整して、このデルタ転送動作を最適化することもできます。

-B、-block-size = BLOCKSIZE

これにより、rsyncのデルタ転送アルゴリズムで使用されるブロックサイズが固定値になります。通常、更新される各ファイルのサイズに基づいて選択されます。詳細については、テクニカルレポートを参照してください。

アルゴリズム自体の詳細が必要な場合は、ここで見つけることができます:Rsyncアルゴリズム


公平に言うと、マンページの「ファイル」の複数形はあいまいです。「ソースファイルと既存のファイルの違いだけを送信することで...」「ファイル」は、個々のファイルのコレクションを意味し、 rsyncは、異なる(全体の)ファイルを送信します。これを明確にする必要があります。
Russ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.