如何加快小文件的rsync

我试图使用以下命令将数千个小文件从一台服务器转移到另一台服务器:

rsync -zr --delete /home/user/ [email protected]::backup

目前转移需要很长时间(我还没有计时)。 有没有办法让这个更快? 我应该使用其他工具吗? 我应该通过ssh使用rsync而不是使用rsync协议吗?

你需要确定瓶颈。 这不是rsync。 这可能不是你的networking带宽。 正如@Zoredache所说的,它很可能是所有stat()调用产生的大量iops。 任何同步工具将需要统计文件。 同步运行iostat进行validation。

所以问题就变成了 如何优化统计? 两个简单的答案:

  1. 得到一个更快的磁盘子系统(如果需要的话,在两台主机上)和
  2. 调整你的文件系统(例如ext3挂载noatime并添加一个dir_index )。

如果有机会,它不是你的磁盘iops是限制,那么你可以尝试将目录树分成多个不同的树,并运行多个rsyncs。

压缩对于小文件(例如less于100字节)不是很有用。 对于小文件,有时压缩版本可能比原来的更大。 尝试没有-z标志的rsync命令。

ssh对安全性好,但不会使传输速度更快。 事实上,由于需要encryption/解密,它会使传输速度变慢。

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

你使用的是什么版本的rsync? 任何老3.0.0(两端)没有增量文件列表function,这加快了大型传输。

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

rsync分两步完成:

  1. 深入浏览两个平台上的所有文件,以比较它们的大小和更新
  2. 做实际的转移

如果您在嵌套目录中rsync数以千计的小文件,那么rsync可能会花费大部分时间进入子目录并查找所有文件

如果不花时间浏览,时间可能仅仅是由于每个新文件传输开始时增加了所有延迟。

如果涉及到ext3或ext4文件系统,请检查是否启用了dir_indexfunction ! 在我的情况下,这是rsync吞吐量的三倍。

在我的答案中查看详细信息: https : //serverfault.com/a/759421/80414