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

Bai*_*ang 5 linux rsync file-transfer

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

但由于我的应用程序可能是并行运行的,因此 rsync 也是如此,并且可能存在 2 个rsync实例针对同一源和目录并行运行的情况。

我遇到了一个问题,即目标位置未完全同步(将一个子目录留空)。所以我怀疑这是rsync的问题,所以

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

我正在使用的选项是:

rsync -a --copy-unsafe-links --delete
Run Code Online (Sandbox Code Playgroud)

JvO*_*JvO 2

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

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