rsync在复制从中间增长的文件时是否有效?

时间:2015-05-01 16:19:43

标签: backup rsync database-backups

假设我有一个大小为n的文件,该文件已使用rsync复制到另一个位置。

Source
|-------------------------|
0                         n

Destination
|-------------------------|
0                         n

在源文件中,s字节插入位置i。

Source
|----------|-----|--------------|
0   Same   i    i+s    Same    n+s

Destination
|----------|--------------|
0   Same   i     Same     n

rsync是否通常会避免复制范围i + s ... n + s,因为它与目标中的i ... n相同?

如果是这样,在rsync必须复制大量(或全部)i + s ... n + s之前,i和s的限制是什么?

1 个答案:

答案 0 :(得分:0)

简短回答是“是”rsync主要避免将范围i + s复制到n + s。它将发送端的文件分成块并计算每个块的校验和。然后使用rolling checksum迭代接收方文件。这样,如果发送方存在的块存在于接收方的任何地方,则不会再次复制。

这允许块之间的偏移(i + s .. i + n)为任何大小。 i + s到n + s范围内唯一可以再次复制的数据是已修改的块内的数据。因此,重新复制的数据是块大小的函数,如果不使用--block_size指定它,则取决于file size。最糟糕的情况是,如果您在一个位置插入数据,那么主要包含接收器端存在的数据的两个块已被复制。