この簡単な例では、rsyncはどのように機能しますか?

この簡単な例では、rsyncはどのように機能しますか?

たとえば、

  • aランダムバイトを含む256MBファイル。
  • b~である同じファイル追加の先行バイトがあることを除いて、0

これのおかげで回答rsync、次の2つのファイル間の「バイナリdiffパッチ」を計算する機能が見つかりました。

rsync --only-write-batch=patch b a

この例では、patchファイルは... 65KBにすぎないのでかなり良いです。

簡単に言えば、rsync変更された作文がほとんどないことをどのように検出しますか?最初は以下と比較すると思いました。

  • a[0:k] および b[0:k]
  • a[k+1:2k] および b[k+1:2k]
  • a[2k+1:3k] および b[2k+1:3k]
  • ...
  • a[Nk:N] および b[Nk:N]

k の異なる値に対して可能な最も高い 2 の累乗 (2^j) を表し、一致しない場合は 2^(j-1)、次に 2^(j-2) などです。

しかし、これらのファイルaとその場合は1バイトしか移動されないため、同様のブロックがまったくないbため、完全に失敗します。もしそうなら、我々はそれが256MBになると予想します。bapatch

bしかし、ここではよりスマートな方法で動作します。この単純な例(バイトがコンテンツに関連付けられている)では、アルゴリズムはどのように機能しますかa

ベストアンサー1

これについてもっと知っている人は他の答えを投稿するかもしれませんが、追加の調査ではrsyncアルゴリズムの核心がその段落で詳しく説明されているようです。「ファイルのどの部分が変更されたかを確認する」:ローリングハッシュ

もう一つの有用な材料:https://moinakg.wordpress.com/tag/rolling-hash/

比較:


もう一つの便利なリソース:http://tutorials.jenkov.com/rsync/overview.html

おすすめ記事