AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 115945
In Process
MightyE
MightyE
Asked: 2010-02-24 11:26:17 +0800 CST2010-02-24 11:26:17 +0800 CST 2010-02-24 11:26:17 +0800 CST

同步非常大的文件夹结构

  • 772

我们的 Intranet 上有一个文件夹结构,其中包含大约 800,000 个文件,分为大约 4,000 个文件夹。我们需要将其同步到 DMZ 中的一个小型机器集群。结构的深度很浅(它永远不会超过两层深)。

大多数文件永远不会改变,每天有几千个更新文件和 1-2 千个新文件。数据是在源数据已被清除的地方维护的历史报告数据(即这些是源数据足够旧的最终报告,我们将其存档和删除)。每天同步一次就足够了,因为它可以在合理的时间范围内发生。报告在一夜之间生成,我们在早上同步第一件事作为计划任务。

显然,由于很少有文件定期更改,我们可以从增量复制中受益匪浅。我们已经尝试过 Rsync,但这可能需要长达八到十二个小时才能完成“构建文件列表”操作。很明显,我们正在迅速超出 rsync 的能力(12 小时的时间框架太长了)。

我们一直在使用另一个名为 RepliWeb 的工具来同步结构,它可以在大约 45 分钟内完成增量传输。然而,我们似乎已经超过了它的限制,它已经开始看到文件显示为删除而不是删除(也许某些内部内存结构已经用尽,我们不确定)。

有没有其他人遇到过这种大规模的同步项目?是否有设计用于处理像这样的大量文件结构以进行同步的东西?

synchronization backup rsync unison
  • 5 5 个回答
  • 9652 Views

5 个回答

  • Voted
  1. Ryan B. Lynch
    2010-02-24T13:00:07+08:002010-02-24T13:00:07+08:00

    如果您可以信任文件系统最后修改的时间戳,您可以通过将 Rsync 与 UNIX/Linux 的“查找”实用程序相结合来加快速度。“查找”可以组合显示过去一天内最后修改时间的所有文件的列表,然后仅将缩短的文件/目录列表通过管道传输到 Rsync。这比让 Rsync 将发送方上每个文件的元数据与远程服务器进行比较要快得多。

    简而言之,以下命令将仅对过去 24 小时内更改的文件和目录列表执行 Rsync:(Rsync 不会检查任何其他文件/目录。)

    find /local/data/path/ -mindepth 1 -ctime -0 -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
    

    如果您不熟悉“查找”命令,它会通过特定的目录子树进行递归,查找满足您指定的任何条件的文件和/或目录。例如,这个命令:

    find . -name '\.svn' -type d -ctime -0 -print
    

    将从当前目录(“.”)开始并递归遍历所有子目录,寻找:

    • 任何目录(“-type d”),
    • 命名为“.svn”(“-name '.svn'”),
    • 在过去 24 小时内修改了元数据(“-ctime -0”)。

    它在标准输出上打印符合这些条件的任何内容的完整路径名(“-print”)。选项“-name”、“-type”和“-ctime”称为“测试”,选项“-print”称为“动作”。“查找”的手册页包含完整的测试和操作列表。

    如果你想真正聪明一点,你可以使用 'find' 命令的 '-cnewer' 测试,而不是 '-ctime' 来使这个过程更容错和灵活。'-cnewer' 测试树中的每个文件/目录是否比某些参考文件更近地修改了元数据。在每次运行开始时使用“触摸”创建下一次运行的参考文件,就在“查找... | rsync...' 命令执行。这是基本的实现:

    #!/bin/sh
    curr_ref_file=`ls /var/run/last_rsync_run.*`
    next_ref_file="/var/run/last_rsync_run.$RANDOM"
    touch $next_ref_file
    find /local/data/path/ -mindepth 1 -cnewer $curr_ref_file -print0 | xargs -0 -n 1 -I {} -- rsync -a {} remote.host:/remote/data/path/.
    rm -f $curr_ref_file
    

    该脚本自动知道它上次运行的时间,并且它只传输自上次运行以来修改过的文件。虽然这更复杂,但它可以保护您免受由于停机或其他错误导致您可能错过运行作业超过 24 小时的情况。

    • 9
  2. Dave Cheney
    2010-02-24T12:47:24+08:002010-02-24T12:47:24+08:00

    试试unison,它是专门为解决这个问题而设计的,方法是在每个服务器本地保存更改列表(构建文件列表),加快计算增量的时间,以及之后通过线路发送的减少量。

    • 8
  3. Justin
    2010-02-24T15:18:41+08:002010-02-24T15:18:41+08:00

    http://oss.linbit.com/csync2/是为这类事情设计的,我会尝试一下。

    • 3
  4. Chris Thorpe
    2010-02-24T12:58:29+08:002010-02-24T12:58:29+08:00

    如果您在 rsync 上使用 -z 开关,请尝试在没有它的情况下运行。出于某种原因,我发现这甚至可以加快文件的初始枚举。

    • 2
  5. ryand32
    2015-01-26T18:44:01+08:002015-01-26T18:44:01+08:00

    从没有压缩的 rsync 命令中取出 -z 使“接收文件列表”运行得更快,我们不得不传输大约 500 GB。在使用 -z 开关需要一天的时间之前。

    • 2

相关问题

  • 文件复制到分支机构

  • 在本地同步 FTP 文件夹

  • 在 Windows Server 环境中跨 LAN 或 FTP 自动同步/备份文件?

  • 网络文件同步工具

  • 允许跨平台同步的密码管理器[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve