1. 简介
rsync是一种文件同步的工具,也是一种算法。
2. 算法原理
背景:计算机 α \alpha α 上有文件 a
, 计算机 β \beta β上有文件b
。要对这两个文件进行同步。
- β \beta β将文件
b
分成大小为S
字节的若干块,最后一份可能不足S
字节 - 对于
b
中的每一块, β \beta β计算两个哈希值;一个32位的弱滚动哈希,一个128位的MD5强哈希。 - β \beta β将这些哈希值发给 α \alpha α
- α \alpha α计算每
S
弱哈希值,并在 β \beta β传来的表中进寻找这个弱哈希值。若找到了再计算强哈希值进行比较,强哈希值相同,右移S
字节;否则右移一个字节计算新的弱哈希值。弱哈希值比较失败也是右移一个字节,计算新的弱哈希值。 - 这样我们就得到了一个列表, α \alpha α中有 β \beta β中也有的, β \beta β中有 α \alpha α中没有的。这样一来,两个文件就能进行同步了。
查找算法图见知乎
3. 参考
zhihu
rsyn-algorithm
rsync
geek-for-geeks-rsync