rsync是否可以更新仅部分更改而无需完全重新传输的大文件?


15

我正在对一个非常大的文件图像文件(仅相差几个像素)进行细微更改,这需要很长时间才能通过网络传输。

rsync是否有办法识别文件中的差异并仅通过网络发送较小的差异?


3
通过网络复制时rsync,默认情况下会表现为这种方式。只要较小的更改是对文件的较小更改,并且链接的两侧都已经存在文件(几乎相同的版本),则传输的数据应大大小于文件的总大小。在手册页的第一段中:“它以增量传输算法而著称,该算法通过仅发送源文件与目标中现有文件之间的差异来减少通过网络发送的数据量。”
user4556274

嗯,好的,您应该将其发布为答案而不是评论。rsync的行为并不明显,但是基于这种期望,我将假定文件的更改超出了我的预期,并研究了原因。图像压缩过程可能会更改整个文件中的原始字节值。
大卫·帕克斯

Answers:


11

rsync默认情况下,增量传输算法会执行此操作。引用rsync联机帮助页

描述

Rsync是一种快速且用途广泛的文件复制工具。它可以通过任何远程Shell在本地复制到另一个主机,或从另一个远程复制到另一个rsync守护程序。它提供了大量选项,可控制其行为的各个方面,并允许非常灵活地指定要复制的文件集。它以其增量传输算法而著称,该算法通过仅发送源文件与目标中现有文件之间的差异来减少通过网络发送的数据量。Rsync被广泛用于备份和镜像,并作为日常使用的改进复制命令。

如果要禁用它,则必须使用-W--whole-file选项。

-W,-整个文件

此选项禁用rsync的增量传输算法,该算法导致所有传输的文件全部发送出去。如果源计算机和目标计算机之间的带宽大于磁盘的带宽(特别是当“磁盘”实际上是网络文件系统时),则使用此选项时,传输可能会更快。当将源和目标都指定为本地路径时,这是默认设置,但是仅当没有批写入选项有效时才使用。

如果您真的知道文件做了多少更改,您甚至可以通过调整增量块大小来优化此增量传输行为:

-B,--block-size = BLOCKSIZE

这将强制rsync的增量传输算法中使用的块大小为固定值。通常根据要更新的每个文件的大小来选择它。有关详细信息,请参见技术报告。

如果您想了解有关算法本身的更多信息,可以在这里找到:Rsync算法


公平地讲,联机帮助页中“文件”的复数形式是模棱两可的:“仅发送源文件和现有文件之间的区别……”我将“文件”表示为单个文件的集合,并且rsync将发送(整个)不同的文件。这应该澄清。
罗斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.