rsync在并发文件访问时的行为是怎样的?

3
我正在使用rsync每天备份我的机器两次,但当它搜索我文件的修改时,需要花费十到十五分钟的时间,这使得一切都变得很慢,让我感到烦恼。
现在我想使用内核的inotify接口(我正在运行Linux)编写一个小型后台应用程序,收集有关修改文件的通知,并将其路径添加到列表中,然后通过调用rsync定期处理该列表。
由于该进程定义上总是在我刚刚工作并且可能仍在工作的文件上进行操作,所以我想知道当rsync在我写入文件时复制文件时,是否会导致大量损坏/部分更新的文件出现在我的备份中。
我在手册中找不到任何信息,并且在Google中也没有成功地找到答案。我可以阅读源代码,但这可能需要很长时间。有人知道如何在rsync内处理并发文件访问吗?
2个回答

3

这并没有得到处理:rsync打开文件,尽可能地读取并复制。

所以这取决于你的应用程序如何处理:它们是重写文件(而不是创建新文件),还是在所有数据被写入后创建临时文件并将其重命名(正常情况下应该如此)。

在第一种情况下,你几乎无能为力:如果两个进程在没有任何同步的情况下访问相同的数据,则结果将会很混乱。你可以做的是延迟N分钟的rsync,假设写入过程最终会在此之前完成。如果在此时间限制内再次更改文件,则重新安排文件。

在第二种情况下,你必须告诉rsync忽略临时文件(*.tmp,*~等)。


2

这个问题没有得到任何处理。如果这是一个问题,你可以使用例如LVM快照,并从快照中备份。这并不能保证文件本身一定是可用的状态,但它确保了,正如名称所示,这是在特定时间的快照。

请注意,这与您是否让rsync自己处理更改检测或者使用自己的应用程序无关。您的应用程序或rsync本身只会产生已更改的文件列表,然后对于每个文件,运行rsync二进制差分算法。问题是如果在rsync算法运行时文件被更改,而不是在生成文件列表时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接