file - 如果 rsync 正在备份的文件在此过程中被更新,它会如何表现?

标签 file concurrency synchronization rsync race-condition

目前正在做一些有关文件同步的研发,我最终偶然发现了 rsync(谁不会呢?)。

上下文:有一个服务器用作中央文件存储库,仅由管理员更新。一些用户从中央存储库同步他们的文件系统。它是单向同步,这意味着用户永远不会更新存储库。更新是通过rsync进行的。

让我们考虑一个小场景:

  1. 用户开始从服务器更新文件并下载文件 A
  2. 管理员更新服务器上的文件 A 和 B,创建 A' 和 B'

问题:第三步是什么?

  • 用户下载 B'。他有A和B',导致文件之间状态不一致
  • 用户下载 B。他有 A 和 B,导致状态一致但过时
  • 用户下载 B' 和 A',从而获得一致且最新的状态
  • 还有什么吗?

最佳答案

据我所知,这是你的第一个选择:用户将有 A 和 B'。避免这种情况的唯一方法是在 rsync 之前对文件系统进行快照,但不知何故,这感觉像是巨大的杀伤力。

其他解决方案可能是

  • 将 A 和 B 放在一个 zip/tar 文件中(管理员/更新者必须执行此操作;否则文件仍然可以在添加第一个和第二个文件之间更新
  • 使用 git(或其他 VCS)作为中央存储库

关于file - 如果 rsync 正在备份的文件在此过程中被更新,它会如何表现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10244061/

相关文章:

concurrency - 如何并行制作阻塞调用列表并以先到先得的方式获得结果?

c - 在一种方法中使用两个信号量

java - 如何验证具有有效扩展名的文件?

Flash ProgressEvent 未显示总大小

c++ - scanf(), std::cin 在多线程环境下如何表现?

mysql - MySql MASTER MASTER复制不能正常工作没有错误

javascript - Promise.all 没有按预期工作

Java 文件和 ByteArray 或 InputStream

python - 如何通过 Python 创建和打开文件?

java - HashMap 上的双重检查锁定 - 线程安全?