Rsync

算法

rsync实用程序使用由澳洲计算机程序师安德鲁·垂鸠（Andrew Tridgell）发明的算法，在当接受端计算机已经有相同结构（例如文件）但不同版本时，有效的将结构传输过通信连线。
接受端将文件拷贝打散成固定大小为的不重叠片段，并对每个片段计算两个校验和：MD4散列函数与一个较弱的轮替校验和（rolling checksum）。它将这些校验和送给发送者。通信协议版本30（与rsync版本3.0.0一并发行）现在使用MD5散列函数以替代MD4。
发送者对位于其版本的文件中每个大小为的片段计算轮替校验和，即使是重叠的片段。这可被有效的计算透过特别知识产权的轮替校验和算法：如果比特到的轮替校验和是，从比特到的轮替校验和可从，比特，以及比特计算出而不需要真正去检验中间的比特。因此，如果比特1到25的轮替校验和已被算出，那计算比特2到26的轮替校验和可完全依靠之前的校验和与比特1与比特26算出。
rsync使用的轮替校验和是根据马克艾德勒（Mark Adler）的alder-32校验和算法。该算法也被用于zlib，而它本身也基于弗莱彻校验和（Fletcher's checksum）算法。
发送者其后以接收者送来的一组轮替校验和比较它自己的轮替校验和以决定是否任何匹配存在。如果是的话，它便透过计算匹配区块的MD4校验和与接受端送来的MD4校验和比较来验证匹配。
发送者稍后发送给接收者不与接收者方任何区块匹配的文件的那些部分，以及如何合并这些区块到接收者版本的组装指令。在实际上，这产生了与发送者端文件一模一样的拷贝。然而，在原则上是可能接收者的拷贝在这一点上不同：这可能发生在当两个文件有不同的区块但有着相同的MD4散列函数与轮替校验和；这种事情发生的机率在现实上极端罕见。
如果发送者与接收者文件版本有许多区块相同，该公用程序只需发送相对小部分的数据以将文件同步。
在rsync算法构成rsync应用程序核心并最优化两台计算机间TCP/IP的传输同时，rsync应用程序也支持其他种显著增进文件传输或备份的重要功能。他们包括在发送端与接收端个别利用zlib进行区块区块间压缩解压缩，以及支持通信协议如ssh。该协议让加密传输兼具压缩与效率，透过rsync算法产生的差分数据变得可能。除ssh以外，stunnel亦可被利用于创造加密通道以保全被传输的数据。

使用

rsync的撰写是用来取代rcp与SCP。rsync最早期程序的其中之一是用来实现透过rsync/ssh与标准Unix账号，从多重Unix客户端镜像或者备份到中央Unix服务器。与如Cron类似的调度应用程序配合，任何人皆可调度介于多台计算机与中央服务器间自动加密过、基于rsync的镜像备份。

变种

一个叫做rdiff的公用程序利用rsync的算法产生文件A与文件B间不同的差分文件（与公用程序diff类似，不过不同的差分文件格式）。差分文件可稍后被应用到文件A，转成文件B（类似patch公用程序）。
不像diff，产生差分文件的进程有两步：首先产生文件A的签名档，然后这个（相对较小）的签名档与文件B被用来产生差分档。又与diff相异的是，rdiff可适用于二进制文件。
利用rdiff，自由软件作者们写了一个叫做rdiff-backup的公用程序，它可以跨过网络维护位于另一台服务器某个文件或者目录的备份镜像。rdiff-backup存储备份以及递增的rdiff差分档。这种方式让回溯到任何备份点成为可能。
duplicity是rdiff-backup的一个变种，它利用单一存储服务（像Amazon S3）达成不需要与存储服务器合作的备份。它透过产生预先产生每个区块的散列函数，将它们加密，并送到服务器存储，然后当进行递增备份时取回。剩下的数据为满足保全需求也被加密存储。

历史

rsync首度发布于1996年6月19日。原始作者为安德鲁·垂鸠（Andrew Tridgell）与保罗·麦可拉斯（Paul Mackerras）。
rsync 3.0于2008年3月1日发行。