3

我每天使用 rsync 对我的机器进行两次备份,它会在十到十五分钟内搜索我的文件以进行修改,这大大减慢了一切,开始让我紧张。

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

现在,因为根据定义,这个过程总是适用于我刚刚 - 并且可能仍在 - 工作的文件,我想知道我是否会在备份中获得大量损坏/部分更新的文件,因为 rsync 复制文件而我正在给他们写信。

我在联机帮助页中找不到任何内容,但在谷歌搜索中仍未成功。我可以去阅读源代码,但这可能需要相当长的时间。任何人都知道如何在 rsync 中处理并发文件访问?

4

2 回答 2

3

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

因此,这取决于您的应用程序如何处理此问题:他们是重写文件(而不是创建新文件)还是创建一个临时文件并在所有数据都写入后重命名(应该如此)。

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

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

于 2009-03-18T09:50:37.807 回答
2

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

请注意,这与您是让 rsync 自己处理更改检测还是使用自己的应用程序没有任何关系。您的应用程序或 rsync 本身仅生成已更改文件的列表,然后针对每个文件运行 rsync 二进制差异算法。问题是文件是否在 rsync 算法运行时更改,而不是在生成文件列表时更改。

于 2009-03-18T09:50:25.607 回答