当中间出现差异时,rsync如何修补文件?

当中间出现差异时,rsync如何修补文件?

我知道如何rsync运作。我的疑问是如何rsync修补源文件和目标文件之间不同的部分。

在计算出不同的块后,它将该部分发送到目的地。现在目标如何将其插入文件中间?它是否也会移动所有后续字节,因为我们无法在文件中间插入(附加)字节。

假设来源:ABCDEFGH

目的地 :ABCEFGH

假设 rsync 检测到 D 丢失,它将其发送到目的地。比如何将 D 插入到文件中。无论是在 C 之后插入并移动 EFGH 还是执行其他高效操作。因为在任何编程语言中,我们都不能在不替换的情况下在文件中间插入字节。

答案1

我只知道 的 C 实现rsync,它们适用于大多数底层文件系统的限制。这意味着只有当文件大小完全相同时,“中间”的数据才能更新。

但这无关紧要。出于安全原因,rsync制作更改数据的副本并将其移动到副本中仅当它完整时rsync通常不会尝试更新现有文件,如果进程中断,则存在损坏的风险。

您应该查看--delay-updates手册页中的 来了解更新过程。该选项允许您延迟重命名,直到一次运行中需要更改的所有文件都完成,然后重命名。

相关内容