如何加速rsync?

Jak*_*son 77 usb rsync ubuntu-9.10 usb-flash-drive

我正在运行 rsync 以将目录同步到我的外部 USB 硬盘上。这是大约 150 演出数据。我猜有 50000 多个文件。

它目前正在运行它的第一次同步,但其复制文件的速度仅为 1-5 MB/s。对于 USB 2.0 外壳来说,这似乎非常慢。驱动器上也没有发生其他传输。

以下是我使用的选项:

rsync -avz --progress /mysourcefolder /mytargetfolder
Run Code Online (Sandbox Code Playgroud)

我正在运行 Ubuntu Server 9.10。

Sco*_*mer 60

如果您在同一台机器上使用具有快速网络或磁盘到磁盘的 rsync,

使用压缩 -z

并使用 --inplace

将其加速到硬盘或网络的性能

压缩使用大量 CPU

使用就地使硬盘震动很多(它在创建最终文件之前使用临时文件)

压缩和不使用就地更适合通过互联网进行(慢速网络)

新:注意目的地......如果启用了 NTFS“压缩”......这会严重减慢大文件(我会说 200MB+) rsync 几乎似乎停滞不前,这是由这个引起的。

  • 这是“--就地” (2认同)

use*_*307 42

对于第一次同步只需使用

cp -a  /mysourcefolder /mytargetfolder
Run Code Online (Sandbox Code Playgroud)

rsync 仅在目标为空时增加开销。

此外.. -z 选项可能会降低您的性能,如果您不是通过慢速链接传输数据,则不应使用它。

  • 这个答案没有回答这个问题。问题是关于如何优化 rsync - 而不是用 cp 命令替换它。 (13认同)
  • 它应该也可用于本地传输,并且更加灵活。对于第一次同步来说,这可能只是矫枉过正。 (12认同)
  • rsync 之所以这么叫,是因为它用于*远程* 同步,因此不适合本地连接的卷。 (4认同)
  • `rsync -avz --progress /mysourcefolder/ /mytargetfolder` 否则你会在 `mytargetfolder` 内得到一个 `mysourcefolder` 的副本,而不是镜像内容 (4认同)
  • rsync 也是一种单向同步。非常适合备份到服务器或从服务器备份。但是,如果您希望本地双向同步到可移动驱动器,您可能需要查看 csync https://www.csync.org/get-it/,不要与 csync2 混淆,这是一个完全不同的项目。 (2认同)

小智 42

使用该-W选项。这将禁用增量/差异比较。当文件时间/大小不同时,rsync 会复制整个文件。

同时删除该-z选项。这仅对压缩网络流量有用。

现在rsync应该一样快cp

  • 小注:``-z`` 仅对**低速** 网络流量有用。如果您的网络足够快,它会减慢速度,因为您将受到 CPU 的限制。 (7认同)
  • 这些技巧大大加快了我在两个 NAS 设备之间传输文件的速度,谢谢! (3认同)
  • 但请注意,根据手册页对 `-W` 的说明:“当源和目标都指定为本地路径时,这是默认值,但前提是没有批量写入选项有效。” (2认同)
  • `-W` 是我的案例中的关键(通过本地网络)。我从 ~3.5 MB/s 到 ~35 MB/s。一个 10 倍的因素!! (2认同)
  • “-W”对我来说也很有效。10 倍系数与注销完全相同。对于大文件尤其超级有用! (2认同)

小智 36

首先 - 在这种情况下文件的数量将是一个主要因素。每个文件的平均大小为 3MB。在 OP 的情况下,可能存在影响速度的 io 瓶颈。更多在这里- 这是一个非常枯燥的阅读,但封面图片是值得的。

那么,使用 rsync 复制到一个空目录?以下是一些加快速度的方法:

  1. 否 -z - 绝对不要像在 OP 中那样使用 -z。
  2. --no-compress 可能会加快您的速度。这可能会产生最大的影响……我的测试是 13,000 个文件,总大小为 200MB,并使用 rsync 3.1.3。我同步到同一内部 SSD 驱动器上的不同分区。使用 --no-compress,我得到 18 MBps,没有它我得到 15 MBps。顺便说一下,cp 获得 16 MBps。不过,这是一个小得多的平均文件大小。另外 - 我找不到任何关于 --no-compress 的文档。我是从 stackexchange.com 上的这篇文章中了解到的。
  3. -W复制整个文件- 如果您不想比较差异,请始终使用它;不要介意 rsync 的重点是比较差异并仅更新更改。
  4. -S 可以很好地处理稀疏文件- 如果您没有稀疏文件,就不会受到伤害。
  5. --exclude-from 或类似于排除您可能不需要的文件的东西会减少时间,但不会提高您的传输速度。
  6. 这是可能的,如果你的输出发送到这样的文件rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.err-第一>基本打印文件,所有你通常会看到的东西,和2>指的错误消息。
  7. 最后,为传输的不同部分运行多个 rsync 实例可能会有很大帮助。

我的命令是:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

如果一切看起来不错,我会删除“--dry-run”并放手。A、X 和 E 涵盖了 -a 未涵盖的扩展属性和权限,l 用于软链接,H 用于硬链接,h 用于人类可读。

在 USB 驱动器或同一驱动器上或通过网络更新已同步的目录,都需要不同的 rsync 命令来最大限度地提高传输速度。

奖励-这是 rsync 手册页,如果您想测试硬盘驱动器速度,bonnie++是一个不错的选择,对于您的网络速度,请尝试iperf


*这篇文章已经有将近十年的历史了,但搜索引擎肯定喜欢它,我一直在看它。这是一个好问题,我认为“如何加速 rsync”的最佳答案不应该是“改用 cp”。

  • 文字文本“--no-compress”不会出现在手册页中,因为它属于通用“--no-OPTION” (4认同)
  • 我发现 S(处理稀疏文件)实际上很慢。删除它使它更快 (2认同)
  • [rsync 手册页](https://linux.die.net/man/1/rsync) 中未提及 `--no-compress`。 (2认同)

小智 6

你肯定想尝试一下rclone。这件事太快了:

$ tree /usr [...] 26105 个目录,293208 个文件

$ sudo rclone 同步 /usr/home/fred/temp -P -L --transfers 64

已传输:17.929G / 17.929 GBytes、100%、165.692 MBytes/s、ETA 0s 错误:75(重试可能有帮助) 检查:691078 / 691078、100% 已传输:345539 ​​/ 345539、100% 已用时间:1m50.8s

这是 LITEONIT LCS-256 (256GB) SSD 的本地副本。

您可以在第一次运行时添加 --ignore-checksum 以使其更快。


Tom*_*ale 6

避免

  • -z/ --compress:压缩只会增加 CPU 的负载,因为传输不是通过网络而是通过 RAM。
  • --append-verify:恢复中断的传输。这听起来是个好主意,但它有危险的失败情况:任何与源文件大小相同(或更大)的目标文件都将被忽略。此外,它在最后对整个文件进行校验和,这意味着--no-whole-file在添加危险的故障情况时不会显着加快速度。

使用

  • -S/ --sparse:将空值序列转换为稀疏块
  • --partial或者-P--partial --progress:保存所有部分传输的文件以供将来恢复。注意:文件不会有临时名称,因此请确保在整个复制完成之前没有其他任何东西会使用该目标。
  • --no-whole-file以便任何需要重新发送的内容都使用增量传输。读取部分传输的文件的一半通常比再次写入要快得多。
  • --inplace避免文件复制(但前提是在整个传输完成之前没有任何内容正在读取目标)