Concurrency rsync如何处理并发文件访问?

Concurrency rsync如何处理并发文件访问?,concurrency,locking,rsync,Concurrency,Locking,Rsync,我使用rsync每天运行两次我的机器备份,在十到十五分钟内它搜索我的文件进行修改,大大降低了速度,开始让我感到不安 现在,我想使用我的内核(我运行的是Linux)的inotify接口编写一个小型后台应用程序,该应用程序收集有关修改文件的通知,并将其路径名添加到列表中,然后通过调用rsync定期处理该列表 现在,由于根据定义,此过程始终适用于我刚刚(而且可能仍在)处理的文件,因此我想知道,当我在写文件时rsync复制文件时,是否会在备份中加载损坏/部分更新的文件 我在主页上找不到任何东西,但在谷歌

我使用rsync每天运行两次我的机器备份,在十到十五分钟内它搜索我的文件进行修改,大大降低了速度,开始让我感到不安

现在,我想使用我的内核(我运行的是Linux)的inotify接口编写一个小型后台应用程序,该应用程序收集有关修改文件的通知,并将其路径名添加到列表中,然后通过调用rsync定期处理该列表

现在,由于根据定义,此过程始终适用于我刚刚(而且可能仍在)处理的文件,因此我想知道,当我在写文件时rsync复制文件时,是否会在备份中加载损坏/部分更新的文件


我在主页上找不到任何东西,但在谷歌搜索答案时还是失败了。我可以去看资料,但那可能需要一段时间。有人知道rsync内部是如何处理并发文件访问的吗?

它不是以任何方式处理的。如果出现问题,您可以使用LVM快照等,并从快照中进行备份。这本身并不能保证文件处于可用状态,但它确实保证了,顾名思义,它是特定时间的快照


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

根本不处理它:rsync打开文件,尽可能多地读取并复制它

因此,这取决于应用程序如何处理:它们是重写文件(而不是创建新文件),还是创建临时文件并在写入所有数据后重命名该文件(它们应该这样做)

在第一种情况下,您几乎无能为力:如果两个进程访问相同的数据而不进行任何同步,那么结果将是一团糟。您可以做的是将rsync延迟N分钟,假设编写过程最终将在此之前完成。如果文件在此时间限制内再次更改,请重新计划该文件

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