rsync 是否检查网络上的差异?

rsync 是否检查网络上的差异?

我正在尝试使用 rsync 和 ssh 设置一个简单的备份脚本,该脚本应该将我的东西备份到服务器。

为了节省服务器驱动器中的空间,我将 --link-dest 选项与最新备份一起使用,以便重复的文件只是硬链接到以前的文件,因此实际的 rsync 命令将如下所示

rsync -av -e ssh --link-dest=user@server:/home/user/backups/previous /home/user/tobackup/ user@server:/home/user/backups/current

这只是“解释”,因为脚本负责备份哪些文件以及如何处理“当前”和“上一个”目录。

我的问题是,由于给定文件的比较是与服务器中支持的文件进行比较,我猜 rsync 需要首先实际发送它,然后比较它,然后保存它(如果它是新的或更改的),或者删除它并如果硬链接未更改,则保存它吗?或者是否以某种方式在不发送文件的情况下进行了比较?

我的问题的原因是,如果备份很大,我希望不必发送大的未更改的文件,却发现它们没有更改。我不知道 rsync 是如何做到这一点的,并且无法在其文档中找到它,所以很高兴知道它是否做到了这一点,并且我可以期望每次备份的所有文件都通过网络发送,或者 rsync 是否只发送未更改的内容。

显然,如果我最初的想法由于某种原因从一开始就有缺陷,那么替代方法是受欢迎的。

答案1

你的标题问题的答案是肯定的“是”。 rsync,无论是通过网络,从驱动器到驱动器,还是从文件夹到文件夹,都会检查现有文件并仅更新已更改的文件。

man rsync

Rsync 使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法查找大小或上次修改时间已更改的文件。当快速检查表明文件的数据不需要更新时,将直接在目标文件上对其他保留的属性(根据选项的请求)进行任何更改。

rsync 的功能比描述的还要强大,因为它可以检测文件内的差异并更新这些差异。有关此示例,请参阅 Ubuntu 测试页面,您可以在其中 rsync 每日 .iso 构建以进行测试。

一些轻松阅读材料:

如何在 Linux 中使用 Rsync 同步新文件或更改/修改的文件。
rsync 是如何工作的。
rsync 手册。

如果您阅读其中任何一页,最后一页可能是最重要的。它准确地显示了该应用程序的真正多功能性。

答案2

或者是否以某种方式在不发送文件的情况下进行了比较?

rsync将要不是曾经发送文件进行比较。默认算法检查大小或上次修改时间是否发生变化,以确定是否需要传输文件。

但是您可以更严格,例如使用 进行校验和检查(许多算法可供选择),-c或者更放松,仅使用 来检查大小--size-only。这些只是其中两个选项,请查看手册页以获取完整列表。

相关内容