我正在尝试使用以下命令将数千个小文件从一台服务器传输到另一台服务器:
rsync -zr --delete /home/user/ user@10.1.1.1::backup
目前,传输需要很长时间(我还没有计时)。有没有办法使它更快?我应该使用其他工具吗?我应该在ssh上使用rsync而不是使用rsync协议吗?
stat()
。
-a
但是-r
?
我正在尝试使用以下命令将数千个小文件从一台服务器传输到另一台服务器:
rsync -zr --delete /home/user/ user@10.1.1.1::backup
目前,传输需要很长时间(我还没有计时)。有没有办法使它更快?我应该使用其他工具吗?我应该在ssh上使用rsync而不是使用rsync协议吗?
stat()
。
-a
但是-r
?
Answers:
您需要确定瓶颈。它不是rsync。可能不是您的网络带宽。正如@Zoredache所暗示的,很可能是所有stat()
调用都产生了大量的iops 。任何同步工具都需要统计文件。在同步运行时iostat
进行验证。
于是问题变成了;如何优化统计信息?两个简单的答案:
noatime
并添加dir_index
)。如果不是您的磁盘iops达到了极限,那么您可以尝试将dir树拆分为多个不同的树并运行多个rsync。
压缩对于小文件(例如少于100个字节)不是很有用。对于小文件,有时压缩版本可能甚至大于原始文件。尝试rsync
不带-z
标志的命令。
ssh
对安全性有好处,但不会加快传输速度。实际上,由于需要加密/解密,这会使传输变慢。
rsync
第一次运行时可能看起来并不快,因为要传输的数据很多。但是,如果计划定期运行此命令,则由于rsync
不传输未更改的文件很明智,因此后续运行可能会更快。
rsync
客户端,它将在后台使用SSH。使用rsync时,必须竭尽全力禁用加密。请参阅:stackoverflow.com/a/1821574/64911
如果涉及到ext3或ext4文件系统,请检查是否都启用了dir_index功能!在我的情况下,这使rsync吞吐量增加了三倍。
请参阅我的答案中的详细信息:https : //serverfault.com/a/759421/80414