rsync 的核心算法
rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并适当利用查找文件中的不同块以减少数据传输。rsync中重要的特性就是对有变更的部分进行传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。
问题:
首先,我们来想一下rsync要解决的问题,如果我们要同步的文件只想传不同的部分,我们就需要对两边的文件做diff,但是这两个问题再两台不同的机器上,无法做diff。如果我们做diff,就要把一个文件传到另一台机器上做diff,但这样以来,我们就传了整个文件,这与我们只想传输不同部分的初衷相背。
算法:
rsync的算法如下:(假设我们同步源文件名为fileSrc,同步目的文件叫fileDst)
1)分块Checksum算法。首先,我们会把fileDst的文件平均切分成若干个小块,比如每块512个字节(最后一块会小于这个数),然后对每块计算两个checksum,一个叫rolling checksum,是弱checksum,32位的checksum,可以参考上一篇博客。另一个是强checksum,128位的,以前是用md4,现在用md5 hash算法的。

rsync通过分块Checksum算法和传输算法实现高效同步。它将目标文件切分为小块,计算rolling checksum和强checksum(如md5)。源端接收目标端的checksum列表,通过hash table进行快速查找,匹配相同文件块,减少传输的数据量。当源文件发生变化时,rsync能精确识别并仅传输差异部分,实现高效同步。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



