如何加快小型文件的rsync


15

我正在尝试使用以下命令将数千个小文件从一台服务器传输到另一台服务器:

rsync -zr --delete /home/user/ user@10.1.1.1::backup

目前,传输需要很长时间(我还没有计时)。有没有办法使它更快?我应该使用其他工具吗?我应该在ssh上使用rsync而不是使用rsync协议吗?


真的只有几百个吗?不超过几千?
Zoredache'3

还有更多……475,576总计9.3GB
Noodles

使用几乎所有在文件系统级别上运行的工具都将使这种情况变得糟透了。我怀疑如果您进行了一些分析,您会发现将大量时间花费在打电话上stat()
Zoredache'3

为什么不-a但是-r
kamae 2012年

Answers:


13

您需要确定瓶颈。它不是rsync。可能不是您的网络带宽。正如@Zoredache所暗示的,很可能是所有stat()调用都产生了大量的iops 。任何同步工具都需要统计文件。在同步运行时iostat进行验证。

于是问题变成了;如何优化统计信息?两个简单的答案:

  1. 获得更快的磁盘子系统(如果需要,在两个主机上)并且
  2. 调整文件系统(例如,使用进行ext3挂载noatime并添加dir_index)。

如果不是您的磁盘iops达到了极限,那么您可以尝试将dir树拆分为多个不同的树并运行多个rsync。


1
谢谢,我将研究dir_index并看看如何进行(我们已经使用过noatime)。磁盘io似乎是瓶颈,但是我们已经在RAID 5中运行了15k SAS驱动器。下一步将是SSD,但是我们的托管公司尚未提供该选项。
Noodles'3

5

压缩对于小文件(例如少于100个字节)不是很有用。对于小文件,有时压缩版本可能甚至大于原始文件。尝试rsync不带-z标志的命令。

ssh对安全性有好处,但不会加快传输速度。实际上,由于需要加密/解密,这会使传输变慢。

rsync第一次运行时可能看起来并不快,因为要传输的数据很多。但是,如果计划定期运行此命令,则由于rsync不传输未更改的文件很明智,因此后续运行可能会更快。


如果仅使用rsync客户端,它将在后台使用SSH。使用rsync时,必须竭尽全力禁用加密。请参阅:stackoverflow.com/a/1821574/64911
mlissner,

1

您正在使用哪个版本的rsync?3.0.0之前的任何版本(两端)均不具有增量文件列表功能,该功能可加快大型传输速度。


在两台服务器上都使用rsync 3.0.5。
Noodles'3

1

添加-v --progress到您的rsync命令行

rsync分两个步骤完成:

  1. 深入浏览两个平台上的所有文件以比较它们的大小和日期
  2. 进行实际转移

如果您要同步嵌套目录中的数千个小文件,则可能只是rsync将大部分时间用于子目录并查找所有文件

如果没有花费时间进行浏览,那么时间可能仅仅是由于添加了所有延迟,开始了每个新文件的传输。


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.