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

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

ネットワーク経由で転送するのに時間がかかる非常に大きな画像ファイル(わずか数ピクセルだけ)にわずかな変更が加えられています。

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

答え1

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

説明する

Rsyncは、高速でさまざまなファイルコピーツールです。リモートシェルを介して別のホストに/からローカルにコピーしたり、リモートrsyncデーモンに/からコピーしたりできます。これは、動作のさまざまな側面を制御するための多くのオプションを提供し、コピーするファイルセットを指定する際の優れた柔軟性を可能にします。元のファイルと宛先にある既存のファイルの差だけを転送してネットワークに転送されるデータ量を減らす増分転送アルゴリズムとして知られています。。 Rsyncはバックアップとミラーリングに広く使用され、日常的な使用のための拡張コピーコマンドとして使用されます。

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

-W、--フルファイル

このオプションは、転送されたすべてのファイルがそのまま転送されるようにするrsyncの増分転送アルゴリズムを無効にします。ソースコンピュータとターゲットコンピュータ間の帯域幅がディスク帯域幅より高い場合(特に「ディスク」が実際にネットワークファイルシステムの場合)、このオプションを使用すると転送速度が速くなる可能性があります。これは、ソースと宛先の両方がローカルパスとして指定されている場合はデフォルトですが、一括書き込みオプションが適用されていない場合にのみ当てはまります。

ファイルがどれだけ変更されたかを知っている場合は、デルタブロックのサイズを変更してデルタ転送の動作を最適化することもできます。

-B, --blocksize=ブロックサイズ

これは、rsyncの増分転送アルゴリズムで使用されるブロックサイズを固定値に強制します。通常、更新する各ファイルのサイズに応じて選択されます。詳しくは、テクニカルレポートをご覧ください。

アルゴリズム自体についてさらに詳しく知りたい場合は、ここで見つけることができます。再同期アルゴリズム

答え2

あなたが探しているもの--partial--inplaceオプションです。ネットワーク経由で100 GBから300 GBまでの単一のファイルを更新する必要があったので、昨日これを見つけました。また、最新バージョンのrsyncでも最適です。 cygwinにあるのはまったく機能しないようです。しかし、準現代的なLinuxからLinuxに至るまでの制限要因は、ネットワークではなく、各エンドで転送されたファイルを読み取ることができる速度です。

特に私はこれを使用します:

rsync -avPHx --inplace --partial src/foo remote_host:/target/path/

編集 - ソースはhttps://fedoramagazine.org/copying-large-files-with-rsync-and-some-misconceptions/---append原文で述べたように、ファイルが増えて途中で変化が生じると、--append山が予想通りに動作しなくなり危険になることがありますのでご注意ください。基本的には、--appendログファイルに追加するなどの操作にのみ使用されます。

答え3

rsyncの仕組みについては、すべてが正しいです。ただし、画像の小さな変更がファイルの小さな変更を引き起こす可能性がある唯一の形式は、rawビットマップ形式(.bmp、.pnm、いくつかの種類の.tif)です。通常、.png、JPEG、Gimp、Photoshop .xcf、または.psdファイルはすでに圧縮されているため、小さな画像の変更でもディスク上にほぼ完全に異なるファイルが生成される可能性があります。これが、rsyncのデルタアルゴリズムがやや非効率的に見える理由です。

関連情報