rsyncに2つのローカルパスを渡すと、デフォルトでデルタ転送ではなく「--whole-file」が使用されます。したがって、探しているのは「--no-whole-file」です。「-c」を要求した場合も、デルタ転送を取得します。
確認方法は次のとおりです。
$ mkdir a b
$ dd if=/dev/zero of=a/1 bs=1k count=64
$ dd if=/dev/zero of=a/2 bs=1k count=64
$ dd if=/dev/zero of=a/3 bs=1k count=64
$ rsync -av a/ b/
sending incremental file list
./
1
2
3
sent 196831 bytes received 72 bytes 393806.00 bytes/sec
total size is 196608 speedup is 1.00
次に、ファイルをタッチして再同期します
$ touch a/1
$ rsync -av --inplace a/ b/
sending incremental file list
1
sent 65662 bytes received 31 bytes 131386.00 bytes/sec
total size is 196608 speedup is 2.99
「ls -li」を使用してiノードを再使用したことを確認できますが、64Kバイト全体が送信されていることに注意してください。--no-whole-fileで再試行してください
$ touch a/1
$ rsync -av --inplace --no-whole-file a/ b/
sending incremental file list
1
sent 494 bytes received 595 bytes 2178.00 bytes/sec
total size is 196608 speedup is 180.54
これで、494バイトのみを送信しました。straceを使用して、ファイルのいずれかが書き込まれたかどうかをさらに確認することもできますが、少なくともデルタ転送が使用されていることがわかります。
ローカルファイルシステムについて--whole-file
は想定されていることに注意(コメントを参照)(rsyncのマニュアルページを参照)。一方、ネットワーク全体--no-whole-file
が想定されるため--inplace
、それ自体はとして動作し--inplace --no-whole-file
ます。