如何加快rsync?


44

我正在运行rsync将目录同步到我的外部USB HDD上。大约有150个演出的数据。我猜有5万多个文件。

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

这是我使用的选项:

rsync -avz --progress /mysourcefolder /mytargetfolder

我正在运行Ubuntu Server 9.10。


2
您确定要连接USB2吗?(非rsync)复制或其他写入操作是否以正常速度运行?如果不是,您是否尝试过使用另一个USB端口/电缆进行复制/其他写操作?
quack quixote 2010年

另请参阅serverfault.com/questions/43014/…-人们也建议使用两个管道tar命令或cpio
Blaisorblade

Answers:


38

对于第一次同步,只需使用

cp -a  /mysourcefolder /mytargetfolder

仅当目标为空时,rsync才会增加开销。

-z选项也可能会降低性能,如果不通过慢速链接传输数据,则不应该使用它。


3
之所以这么称呼rsync是因为它用于远程同步,并且由于这个原因,它实际上不适用于本地连接的卷。
msanford 2010年

6
它应该也可以用于本地转移,并且更加灵活。第一次同步可能只是过分杀伤力。
Blaisorblade

1
rsync也是一种单向同步。非常适合备份到服务器或从服务器备份。但是,如果要将本地两路同步到可移动驱动器,则可能要签出csync csync.org/get-it,不要与完全不同的项目csync2混淆。
Jesse the Wind Wanderer

3
rsync -avz --progress /mysourcefolder/ /mytargetfolder否则,您将获得而不是镜像内容的mysourcefolder内部副本mytargetfolder
编辑者

2
该答案不能回答问题。问题是关于如何优化rsync-而不是用cp命令替换它。
oemb1905

38

如果您将rsync与快速网络或同一台计算机上的磁盘到磁盘一起使用,

使用压缩-z

并使用--inplace

加快其速度以达到硬盘驱动器或网络的性能

压缩占用大量CPU

使用就地会使硬盘驱动器大量跳动(在创建最终文件之前会使用临时文件)

压缩和不使用就地比较适合通过Internet(慢速网络)进行压缩

新:请注意目标位置...如果启用了NTFS“压缩” ...这会严重减慢大文件(我说200MB +)的速度,rsync似乎停滞了,这是由此引起的。


大文件的NTFS压缩速度很慢
Scott Kramer

我在手册页上看不到有关“ --inline”的任何内容
Anthony

1
是“就地”
Scott Kramer

26

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

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

现在rsync应该和一样快cp


6
小注释:-z仅适用于低速网络流量。如果您的网络速度足够快,它将使速度变慢,因为您将受到CPU的限制。
WhyNotHugo 2013年

3
这些技巧极大地加快了我在两个NAS设备之间传输文件的速度,谢谢!
djhworld 2013年

2
但是请注意,根据手册页所述-W:“当将源和目标都指定为本地路径时,这是默认设置,但前提是没有有效的批写选项。”
GuoLiang Oon

13

首先-在这种情况下,文件数量将成为主要因素。每个文件的平均大小为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”。


1
关于第7项,我可以通过使用“ blockdev --setra 8192 / dev / sdX”扩展预读缓冲区,使用传统HDD作为源来提高性能。因此,我打算减少寻头游戏。
user2480144

2

您没有说文件的大小分布。如果有许多小文件,则该工具将打开新文件,并且操作系统会保留目录条目和其他元数据(例如文件系统的日志,如果使用的话),这会通过增加源驱动器和目标驱动器中的磁头移动延迟来降低总体传输速率。元数据日志记录,例如ext3 / ext4和NTFS,默认情况下是最新的)。当进行简单的批量传输时,文件复制过程仅对较大的对象“有效”。


0

您肯定想尝试rclone。这东西快疯了:

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

$ sudo rclone sync / 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,以使其更快。


0

避免

  • -z/ --compress:压缩将只加载CPU,因为传输不是通过网络而是通过RAM。
  • --append-verify:恢复中断的传输。这听起来像是个好主意,但它有一个危险的失败案例:任何大小等于或大于源的目标文件都将被忽略。同样,它在最后检查整个文件,这意味着--no-whole-file在添加危险的失败案例时不会明显加快速度。

使用

  • -S/ --sparse:将空序列变成稀疏块
  • --partial或者-P--partial --progress:保存任何部分传输的文件以供将来恢复。注意:文件不会有临时名称,因此请确保在整个副本完成之前,没有其他期望使用目标的文件。
  • --no-whole-file这样需要重新发送的任何内容都会使用增量传输。读取部分传输的文件的一半通常比重新写入要快得多。
  • --inplace 避免文件复制(但前提是在整个传输完成之前没有任何内容读取目标)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.