我的应用程序使用 rsync 将文件从网络驱动器复制到本地作为缓存以提高性能。
但由于我的应用程序可能会并行运行,因此 rsync 也是如此,可能会出现 2 个同步针对同一源和目录并行运行。
我遇到了一个问题,即目标无法完全同步(留下一个子目录为空)。所以我怀疑这是一个 rsync 的问题,所以
- rsync 是否可以安全地将文件从同一源并行复制到同一目的地?
- 是否有任何选项可以确保此类操作的正确性。
我使用的选项是:
rsync -a --copy-unsafe-links --delete
答案1
并行运行 rsyn 可能比较安全,但效率不高,因为 rsync 在开始时会列出要传输的文件列表,因此很可能文件会被传输两次。当然,两个 rsync 同时传输同一个文件的可能性很小,但之后的内容应该相同。
为了防止重复运行,我通常会编写一个脚本来检查是否存在锁定文件,否则touch
会生成一个锁定文件,最后将其删除。作为一种选择,您可以在脚本中使用一个陷阱来清理锁定文件,如果您中断脚本或出现错误(在 shell 中使用“help trap”)。据我所知,rsync 本身没有这样的锁定机制(无论如何这很难实现)。