来自 rsync 的手册页:
它以其增量传输算法而闻名,该算法通过仅发送源文件和目标中现有文件之间的差异来减少通过网络发送的数据量......
Rsync 使用 lqquick checkrq 算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明文件的数据不需要更新时,将直接在目标文件上执行其他保留属性(根据选项的要求)中的任何更改。
增量传输“源文件和目标中现有文件之间的差异”是否意味着:
- 源文件和目标文件是相同的文件,根据时间戳或校验和计算,因此不会被传输
- 与 1 一样,源文件和目标文件在二进制差异中很接近,因此只发送文件之间的差异
为什么 rsync 不对本地文件使用增量传输?说明 rsync 不对本地文件使用增量传输(在我的情况下,在 /home 和 /media 之间)。但如果我去掉 --no-W 或使用 -W,它仍然不会传输相同的文件吗?
增量传输是一种优化,可以加快跨网络重复复制已更改文件的速度。
它的工作原理是使用一个进程读取源文件,使用另一个进程读取目标文件,然后以某种方式对它们进行比较,使得发送方只需要传输目标中尚不存在的数据块。
如果您考虑在本地文件系统的两个部分之间进行复制,则需要完整读取两个文件才能确定要写入目标的内容。在一般情况下,完整读取后进行部分写入会更有效地被完整写入所取代。(这不考虑读取速度明显快于写入速度的存储介质,但该算法假设了一般情况。)
还有另一种与增量传输无关的优化,即
rsync
假设源和目标上具有相同相对名称、大小和修改时间戳的文件可能是同一个文件,并完全避免处理它。几乎唯一会中断这种情况的情况是,如果您有一个重置文件修改时间的应用程序 - 而很少有应用程序会这样做。几乎总是,不告诉
rsync
如何复制文件会导致最有效的复制方式。只需记住包含--times
(-t
) 标志即可。