包含一百万个文件的 Rsync 文件夹,但每日增量更新非常小

Rsync folder with a million files, but very small incremental daily updates

我们 运行 一个大文件夹上的 rsync。这里面有将近一百万个文件,包括 html、jsp、gif/jpg 等。我们当然只需要增量更新文件。此文件夹中仅更新了几个 JSP 和 HTML 文件,我们需要此服务器 rsync 到不同的服务器,相同的文件夹。

最近 rsync 有时 运行ning 很慢,所以我们的一位 IT 团队成员创建了这个命令:

find /usr/home/foldername \
-type f -name *.jsp -exec \
grep -l <ssi:include src=[^$]*${ {} ;`

这仅查找具有 JSP 扩展名且包含特定类型文本的特定文件,因为这些是我们需要 rsync 的文件。但是这个命令消耗了大量内存。我认为这是一种愚蠢的 rsync 方式,但有人告诉我事情就是这样进行的。

一些谷歌搜索表明这也适用于此文件夹:

rsync -a --update --progress --rsh --partial /usr/home/foldername /destination/server 

我担心这每天都会太慢,但我无法想象为什么这会比我们的 IT 人员推荐的愚蠢的查找选项慢。关于现实世界中大目录 rsync 的任何想法?

一个find命令不会rsync扫描快,grep命令肯定比[=12慢=] 因为它需要阅读 所有 所有 .jsp 文件中的文本。

查找和 grep 可以更快的唯一方法是 if

  1. 您文件上的时间戳不匹配,因此rsync 必须对内容进行校验和(两边!)

    这似乎不太可能,因为您正在使用 -a 来正确同步时间戳(因为 -a 意味着 -t)。但是,如果不同机器上的文件系统允许不同的时间戳精度(例如 Linux 与 Windows),则可能会发生这种情况,在这种情况下,您需要 --modify-window 选项。

  2. 更改的文件比您关心的文件多得多,rsync 也在传输这些文件。

    如果是这种情况,那么您可以将传输限制为 .jsp 个文件,如下所示:

    --include '*.jsp' --include '*/' --exclude '*'
    

    (包括所有 .jsp 个文件和所有目录,但排除其他所有内容。)

  3. rsync 先进行扫描,然后进行比较(可能使用大量 RAM),然后进行传输,而 find/grep/copy 则进行 现在.

    这曾经是个问题,但 rsync 应该进行增量递归扫描,只要本地和远程版本都是 3.0.0 或更高版本,并且您不使用任何花哨的删除或延迟强制执行预先扫描的选项(请参阅文档中的 --recursive)。