Rsync

rsync 在這個簡單的例子中是如何工作的?

  • February 3, 2020

比方說:

  • a是一個包含隨機字節的 256 MB 文件
  • b同一個文件,只是多了一個前導字節0

感謝這個答案,我發現rsync能夠計算這兩個文件之間的“二進制差異更新檔”:

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

在這個例子中,patch文件是……只有 65 KB,所以非常好。

**總之,rsyncdetect這麼少的byes怎麼改的?**我最初認為它會比較:

  • 一種$$ 0:k $$和 b$$ 0:k $$
  • 一種$$ k+1:2k $$和 b$$ k+1:2k $$
  • 一種$$ 2k+1:3k $$和 b$$ 2k+1:3k $$
  • 一種$$ N-k:N $$和 b$$ N-k:N $$

對於各種 k 值,例如 2 可能的最大冪 (2^j),如果不匹配,則為 2^(j-1),然後為 2^(j-2),等等。

但是對於這些文件ab,它會完全失敗,因為因為b只是a移動了一個字節,所以根本不會有類似的塊!然後我們會期望patch是… 256 MB。

但是在這裡它以一種更聰明的方式工作,在這個簡單的例子中算法是如何工作的b=一個字節與內容的連接a

也許更了解這一點的人可以發布另一個答案,但經過進一步研究,rsync 算法的關鍵似乎在“確定文件的哪些部分已更改”段落中有詳細說明:滾動雜湊

另一個有用的閱讀:https ://moinakg.wordpress.com/tag/rolling-hash/

與:


另一個有用的資源:http ://tutorials.jenkov.com/rsync/overview.html

引用自:https://unix.stackexchange.com/questions/565607