rsync:ファイルの末尾に行を追加すると、--no-whole-fileは機能しません。

rsync:ファイルの末尾に行を追加すると、--no-whole-fileは機能しません。

私の問題はrsyncが増分転送を実行しない理由質問。

まず、1GBファイルを作成し、/targetrsyncを使用してフォルダに転送します。後でdooファイルの末尾に s 文字列を追加しました。同じファイルを/targetフォルダに転送したときに、更新された部分だけではなくファイル全体が転送されたことがわかりました。

[尋ねる]rsyncがファイルの更新された部分のみを増分転送するように強制するにはどうすればよいですか?可能ですか、それともファイル全体を再送信する唯一のオプションですか?

例:

$ mkdir target
$ fallocate -l 1G target/temp_1GB_file
$ rsync --inplace --no-whole-file  --size-only --progress temp_1GB_file doo
temp_10GB_file
  1073741824 100%  227.30MB/s    0:00:04 (xfer#1, to-check=0/1)

sent 131163 bytes  received 229425 bytes  48078.40 bytes/sec
total size is 1073741824  speedup is 2977.75

$ echo 'doo' >> temp_10GB_file
$ rsync --no-whole-file  --size-only --progress temp_1GB_file doo # Here complete file has been transferred all over again.
  temp_10GB_file
  1073741828 100%  226.44MB/s    0:00:04 (xfer#1, to-check=0/1)

sent 131171 bytes  received 229418 bytes  48078.53 bytes/sec
total size is 1073741828  speedup is 2977.74

ベストアンサー1

ファイル全体を転送するわけではありません。

sent 131171 bytes  received 229418 bytes  48078.53 bytes/sec
total size is 1073741828  speedup is 2977.74

詳細出力は、2回目の呼び出しでファイルの一部のみが送信されたことを示していますrsync

rsync送信者のサブプロセスと受信者のサブプロセスが開始され、これらのサブプロセスはチェックサムとデータをやり取りします。

rsyncチェックサム彫刻ファイル。デフォルトでは、ブロックサイズはファイルサイズによって異なります。送信側と受信側のブロックチェックサムが一致しない場合、ブロック全体が送信されます。最後のブロックは文字列を追加することで変更されたため、送信する必要がありました。そのため、ファイル内で実際に変更されたバイト数ではなく、131171バイトが転送されるようにマークされます(この特定のファイルのブロックサイズは約130KBです)。

-Bマニュアルのオプションも参照してくださいrsync

おすすめ記事