如何使来自远程服务器的 ~2M 文件的 rsync 具有高性能以进行定期备份

jim*_*x52 7 backup performance rsync

我们在远程服务器上有大量文件,我想定期备份到本地系统以获得额外的冗余。一些细节:

  • 远程系统不在我的控制之下。我只有 SSH/rsync 或 FTP 访问权限
  • 远程系统运行 rsync 2.6.6 且无法升级
  • 远程系统最多允许 25 个并发连接,5 个保留用于生产需求(因此,20 个可用)
  • 远程系统包含 2M 文件 - 其中大部分是 100-200K 大小
  • 文件存储在层次结构中

相似:

0123456789/
        0123456
            abc/
                1.fff
                2.fff
                3.fff
            xyz/
                9.fff
                8.fff
                7.fff
9877656578/
        5674563
            abc/
                1.fff
                2.fff
                3.fff
            xyz/
                9.fff
                8.fff
                7.fff
Run Code Online (Sandbox Code Playgroud)

成千上万的根文件夹仅包含一些内部文件夹/文件结构 - 但所有根文件夹都是数字(0-9)。

rsync -aP第一次用直线跑了,结果花了3196m20.040s. 部分原因是因为远程服务器在rsync2.6.6 上,我无法使用 3.xx 中的增量文件功能。编译文件列表需要将近 12 个小时 - 每 10 秒运行大约 500 个文件。我不认为后续运行会花费这么长时间,因为初始运行必须重新下载所有内容 - 然而,即使 12 小时仅用于文件列表也太长了。

文件夹命名分解如下:

$ ls | grep "^[^67]" | wc -l
295
$ ls | grep "^6" | wc -l
14167
$ ls | grep "^7" | wc -l
14414
Run Code Online (Sandbox Code Playgroud)

我已经rsync -aWP --delete-during通过使用--include="/0*/" --exclude="/*/"我同时运行其中的 80* 1* 2* 3* 4* 5* 8* 9*个以及我使用的 6 个和 7 个来分解它来测试运行它60*-69*并且70*-79*因为层次结构中的文件夹首当其冲以6or开头7(每个6?*or大约 1400 个7?*)。

一切,这不是一个6或7大约需要5分钟,总。6/7 目录(分解为 1/10)每个需要 15 分钟。

这是非常高效的,除了要运行这个作业,我必须同时运行 28 个并发rsync,这使可用连接数饱和——更不用说可能使网络饱和了。

有没有人推荐rsync我可以添加的另一种变体或一些附加选项,以防止它同时使用如此多的连接,而不必rsync在一端按顺序在2.6.6的范围内进行?

编辑 #1:我们确实为此外部提供商支付带宽费用,因此理想情况下,我们只会通过网络发送需要发送的内容,仅此而已。

jim*_*x52 3

在初始同步时间为 40 小时来下载和同步所有数据后,后续扫描和同步相同数据(只是为了获取更新)仅花费了 6.5 小时。用于运行的命令rsync是:

rsync -a --quiet USER@REMOTE_SERVER:ROOT/FOLDER/PATH/ /LOCAL/DESTINATION
Run Code Online (Sandbox Code Playgroud)

我认为我的初始下载时间是双重的:

  1. 初始数据集为 270GB 和约 2M 文件,需要通过互联网扫描和下载大量数据(在我们的示例中,我们有一个 100mbit 同步连接,并且连接到大型 CDN 提供商)

  2. 我在初始同步中启用了 -P 选项和 -v 选项,这导致大量本地控制台显示正在同步的每个文件和进度信息。

所以,答案在这里:只需使用rsync没有那么多冗长的选项(--quiet理想情况下),它就非常有效 - 即使对于巨大的数据集也是如此。