Rsync
rsync 在這個簡單的例子中是如何工作的?
比方說:
a
是一個包含隨機字節的 256 MB 文件b
是同一個文件,只是多了一個前導字節0
感謝這個答案,我發現
rsync
能夠計算這兩個文件之間的“二進制差異更新檔”:rsync --only-write-batch=patch b a
在這個例子中,
patch
文件是……只有 65 KB,所以非常好。**總之,
rsync
detect這麼少的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),等等。
但是對於這些文件
a
和b
,它會完全失敗,因為因為b
只是a
移動了一個字節,所以根本不會有類似的塊!然後我們會期望patch
是… 256 MB。但是在這裡它以一種更聰明的方式工作,在這個簡單的例子中算法是如何工作的
b
=一個字節與內容的連接a
?
也許更了解這一點的人可以發布另一個答案,但經過進一步研究,rsync 算法的關鍵似乎在“確定文件的哪些部分已更改”段落中有詳細說明:滾動雜湊。
另一個有用的閱讀:https ://moinakg.wordpress.com/tag/rolling-hash/
與: