我经常发现自己经常镜像一组服务器文件,其中包含了数千个1kb-3kb的小文件。所有服务器都连接到1 1Gbps端口,通常分布在各种数据中心。
SCP一个接一个地传输这些小文件,需要很长时间,我觉得我在浪费我拥有的漂亮的网络资源。
我有一个想法:创建一个脚本,它将文件分成等量,然后启动5-6个scp线程,理论上这些线程的完成速度会快5-6倍,不是吗?但是我没有任何linux脚本的经验!
发布于 2011-10-31 22:56:58
我会这样做:
tar -cf - /manyfiles | ssh dest.server 'tar -xf - -C /manyfiles'
根据您要传输的文件,在tar
命令中启用压缩是有意义的:
tar -czf - /manyfiles | ssh dest.server 'tar -xzf - -C /manyfiles'
您也可以为ssh
命令选择一个对CPU更友好的密码(比如arcfour):tar -cf - /manyfiles | ssh -c arcfour dest.server 'tar -xf - -C /manyfiles'
。
或者将两者结合起来,但这确实取决于瓶颈是什么。
显然,如果您执行增量同步,rsync
会快得多。
发布于 2011-10-31 22:04:54
使用rsync
而不是scp
。您可以像使用rsync
一样轻松地在ssh
上使用scp
,并且它支持“文件传输的流水线化,以减少延迟成本”。
提示:如果数据是可压缩的,则启用压缩。如果不是,就禁用它。
https://serverfault.com/questions/326490
复制相似问题