将同一源并行同步到同一目标是否安全

将同一源并行同步到同一目标是否安全

我的应用程序使用 rsync 将文件从网络驱动器复制到本地作为缓存以提高性能。

但由于我的应用程序可能会并行运行,因此 rsync 也是如此,可能会出现 2 个同步针对同一源和目录并行运行。

我遇到了一个问题,即目标无法完全同步(留下一个子目录为空)。所以我怀疑这是一个 rsync 的问题,所以

  • rsync 是否可以安全地将文件从同一源并行复制到同一目的地?
  • 是否有任何选项可以确保此类操作的正确性。

我使用的选项是:

rsync -a --copy-unsafe-links --delete

答案1

并行运行 rsyn 可能比较安全,但效率不高,因为 rsync 在开始时会列出要传输的文件列表,因此很可能文件会被传输两次。当然,两个 rsync 同时传输同一个文件的可能性很小,但之后的内容应该相同。

为了防止重复运行,我通常会编写一个脚本来检查是否存在锁定文件,否则touch会生成一个锁定文件,最后将其删除。作为一种选择,您可以在脚本中使用一个陷阱来清理锁定文件,如果您中断脚本或出现错误(在 shell 中使用“help trap”)。据我所知,rsync 本身没有这样的锁定机制(无论如何这很难实现)。

相关内容