某些文件夹下的文件更改列表,内容庞大,子文件夹多级(性能不错)

某些文件夹下的文件更改列表,内容庞大,子文件夹多级(性能不错)

我问同样的问题: 如何列出在一定时间范围内更改过的文件?

但。有一个转折:

我有 10 个内容丰富的文件夹(13Tb)和多个文件夹,其中包含多个级别的子文件夹。我想为每个文件夹获取一段时间内已更改的文件列表,并具有良好的性能(在几分钟内返回,而不是几小时内...)

目录树示例如下: 文件夹repository1 有26 个文件夹,A - Z ,这26 个文件夹中的每一个都有26 个文件夹作为子文件夹。这样一直到100级以上。上面指定的每个文件夹至少有大约 >100 个大约 300kb - 1mb 的图像

最后,我们希望同步不同数据中心的 2 个系统并进行增量更改。我们尝试了 Rsync,它需要几个小时才能检测到更改,而且它远远超出了 SLA...

我要求任何带有时间戳的linux命令或文件索引,我可以查询一段时间内更改的文件列表。这样我就可以对单个文件进行 Rsync。

如果您能为这项工作推荐任何开源工具,我也很乐意。

答案1

这取决于您选择的文件系统以及文件系统如何维护此信息。您现在拥有什么文件系统?如有必要,您可以更改它吗?

如果您有传统的文件系统(例如 UFS 或 EXT),则不会为时间戳或更改维护单独的索引。找到更改的唯一方法是访问每个索引节点并检查时间戳。当文件系统很大(> 10M inodes)时,查询将需要一段时间。如果您的磁盘速度很快,您可能可以通过拆分搜索并运行多个线程来稍微提高速度。如果您的磁盘速度很慢或者 IOP 已经受到限制,那么多个线程可能不会改善任何情况。

其他文件系统(例如 BTRFS 或 ZFS)可以维护一段时间内所有更改的记录,并可以将这些更改传输到副本位置。您可以快速将增量差异发送到副本位置,而无需使用 rsync。

目录树示例如下:

除了更容易拆分为多个命令之外,结构根本不重要。对于传统文件系统(尤其是 NFS 客户端),您所能做的就是搜索每个文件。这意味着运行一个或多个 find/rsync 进程并等待其完成。

我的文件系统是 NFS。

您当前正在使用 NFS 访问其他文件系统。如果这就是您所能做的,那么您将不得不访问每个文件。

另一方面,可能有任何东西为 NFS 服务。如果它是一个 netapp 设备,那么它可以将更改的块发送到另一个 netapp(假设您有另一个 netapp 和正确的许可证)。

Netapp 确实有一个供应商 API 来收集有关已更改块的信息 (snapdiff),但您无法使用它。

相关内容