rsync

rsync
rsync is a software application and network protocol for Unix-like and Windows systems which synchronizes files and directories from one location to another while minimizing data transfer using delta encoding when appropriate.

rsync的同步算法
问题:文件A、B分别位于机器1、2上,如何使用最少的网络传输量来同步文件1和2?
1. 机器2将文件B按固定大小S分割成一组不重叠的数据块,最后一块可能会比S小。每块都计算出一个32位的滚动哈希值和128位的MD4(或MD5)值
2. 机器2将这些校验结果发给机器1
3. 机器1通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),首先查看是否是否命中A给的某个哈希值,若一致,则表明B文件中得这块内容和对应的A的那块内容可能是一致的,但是32位的哈希值强度不够,还需要计算MD4(或MD5)值,若还是一致,则确定是一致内容,机器2发送给1匹配的段号,若使不匹配的内容,则发送给机器1原始内容
4. 机器1得到机器2给的匹配信息,构造一个与B一致的复本:若是匹配的块,则拷贝原A文件中对应的块,若是不匹配内容则追加之。

滚动哈希值基于Adler-32算法,改算法在zlib中也得到使用。为了计算第2~K+1字节的哈希可以根据1~K字节哈希和1、K+1字节的内容快速计算得到。

你可能感兴趣的:(rsync)