分布在三台计算机上的一个图书馆的最佳文件管理策略

分布在三台计算机上的一个图书馆的最佳文件管理策略

下面是我想整理的Linux下的文件管理问题。这不完全是版本控制的问题,而是计算机之间同步的问题。

情况

  • 有三台计算机(例如 A、B、C)。

  • 这些计算机并不总是同时打开

  • 这些计算机可以使用 NFS 协议快速相互连接

  • 通常但不严格地说,计算机的使用目的不同。

  • 我已将大量文件(二进制文件和纯文本)分类到三个目录树中:dir-A、dir-B、dir-C。作为起点,这三棵树位于每个三台计算机中的。更多详情

    • dir-A 包含我在计算机 A 上使用时通常处理的文档;
    • dir-A 也仅在计算机 A 上备份;
    • 的版本计算机 A 中的 dir-A应该是“主副本”。其他计算机中的同名副本是为了方便和冗余而存在的。
    • 同样,对于其他两对目录和计算机。

顺便说一句,文档分类非常好,因为我可以从命令行快速检索目录和文件。因此,我想坚持使用命令行和脚本,而不是借助打包软件来管理库。

意图

情况变得更加复杂,因为有时,当 B 和 C 关闭时在计算机 A 上工作时,

  1. 我收到符合 dir-B 和 dir-C 中类别的新文档,因此我将它们存储在它们的本地副本中;
  2. 我可能会在本地断断续续地重新排列 dir-B 和 dir-C 的内容以改进分类。这将归结为创建、删除、重命名、合并子目录、移动文件、删除混乱等等。

然而,目的是 dir-B (dir-C) 的“主副本”必须位于计算机 B (C) 中。因此,在选定的时刻,计算机 A 上所做的修改需要转移到计算机 B (C) 上。

最后,当我在 B 和 C 中编辑 dir-A 的便捷副本时,这也应该适用。

问题

我正在考虑在给定的限制条件下具有最大灵活性的最佳策略。任务 1 是一个简单的同步问题(我会使用rsync),但任务 2 更复杂。

因此,我想知道

  • Linux 中是否有可以用来实现任务 1 和 2 的工具/实用程序?
  • 你会如何解决这个问题?
  • 问题能真正得到解决吗?
  • 也许我应该放弃任何限制以使其可行?

答案1

这并不完全是 Unix/Linux 问题,您可以在任何操作系统上以任何复杂程度来完成此问题。

让我重申一下你的问题:

  • {1您有 N 台计算机,它们在任何给定时刻可能会或可能不会相互连接,通常被认为包含 1 个主机和多个从机
  • {2随着时间的推移,这些计算机上的资源会不同步、重命名等。
  • {3您一次在一台计算机上工作
  • {4您想要重新同步计算机

解决方案:

{1意味着当至少有两台计算机连接时,您需要以固定时间间隔运行批量协调作业。

{2意味着您必须跟踪重命名、重新分类等才能找到匹配的资源

{3} 得出这样的结论:权威记录是通过比较计算机之间的修改时间找到的。

  • 能够比较交易时间以找到最新、权威记录的关键先决条件是所有 N 台计算机上都有准确的时钟。NTP是你的朋友吗?

  • 修改记录由机制提供inotify

  • 在识别出 N 个文件列表中的冲突记录后,可以决定将哪些内容移动到哪里。我推荐 GNUdatamash作为这项任务的早期候选者。

  • 移动文件是最简单的任务。rsync足够多才多艺。

最后,由于我没有为此付费,所以我将把编写脚本的平凡任务留给读者作为练习。

相关内容