假设我有一个大小为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的限制是什么?
答案 0 :(得分:0)
简短回答是“是”rsync主要避免将范围i + s复制到n + s。它将发送端的文件分成块并计算每个块的校验和。然后使用rolling checksum迭代接收方文件。这样,如果发送方存在的块存在于接收方的任何地方,则不会再次复制。
这允许块之间的偏移(i + s .. i + n)为任何大小。 i + s到n + s范围内唯一可以再次复制的数据是已修改的块内的数据。因此,重新复制的数据是块大小的函数,如果不使用--block_size指定它,则取决于file size。最糟糕的情况是,如果您在一个位置插入数据,那么主要包含接收器端存在的数据的两个块已被复制。