Alex的博客

本博客的文章均为原创,是本人从事行业多年来所遇见一些小问题的解决心得,希望可以帮助到大家!



bbcp多线程传输工具(copy)

bbcp 是由SLAC(斯坦福直线加速器中心)的Andy Hanushevsky创立的点对点网络文件拷贝工具。经过简单测试,发现速度比 scp 快了10倍左右,因此推荐大家采用bbcp来取代scp等老家伙 :)
bbcp默认使用5031端口进行传输数据,使用多线程是最大的优势并且支持压缩.bbcp使用ssh来建立认证,但不会加密数据流

一.源主机和目标上机都要安装:

  wget http://www.slac.stanford.edu/~abh/bbcp/bin/amd64_rhel60/bbcp -O /usr/bin/bbcp


  chmod a+x /usr/bin/bbcp

二.实例:

  #简单测试

  bbcp -v -4 -P 1 -w 8m -s 10 -v CentOS-6.5-x86_64-bin-DVD1.iso root@172.28.2.36:/root/

  #设置目标ssh认证,bbcp默认使用ssh认证参数"ssh –x –a –oFallBackToRsh=no %4 %I –l %U %H bbcp"

  bbcp -k -a /tmp/bbcp_checkpoint -r -P 2 -V -f -w 9m -s 16 -4 -T "ssh -x -a -p 22 -oFallBackToRsh=no -i /home/hjun/.ssh/id_rsa -l hjun hjun.in /usr/bin/bbcp" CentOS-6.5-x86_64-bin-DVD1.iso hjun@hjun.in:/tmp/

   

  bbcp -a -w 128k -s 16 -P 1 -4 -V -k -f -T "ssh -x -a -p 22 root@172.28.2.36 -oFallBackToRsh=no /usr/local/sbin/bbcp"  CentOS-6.5-x86_64-bin-DVD1.iso root@172.28.2.36:/root/

  #内网传输

  bbcp -a -w 128k -s 16 -P 1 -4 -V -k -f CentOS-6.5-x86_64-bin-DVD1.iso root@172.28.2.36:/root/

三.参数详解:
view source

  -4 使用ipv4IP地进行传输,经测试这个一定要指定

  -k 强制保留未传输完成的文件到磁盘上,而不是直接删除文件当第二次执行重传时会接着第一次未完成的地方接着传输当使用-f后即使加了-k也会全部重传.一般与-a一起使用.默认不使用-k时当传输未完成就中断传输时会删除没有传输完的目标文件.

   

  -c 使用压缩减少网络上传输的字节但需要额外的CPU资源,如果CPU资源不足,性能会非常差.bbcp使用zip对数据进行压缩传输压缩级别1-9,1速度最快,9最大压缩率速度最慢.

  -d 多目录复制,可以使用多个源以空格隔开。如:/usr/abh/data dir1/data1 dir2/data2

  -a 保留checkpoint信息用于校验文件的完整性.如果文件不存在就cp如果文件存在就跳过,如果目标文件比源文件大或者小则目标文件被删除.如果文件只传输到一半就中断传输后目标文件就是不完整的这时bbcp使用-a再次执行传输时会删除不完整的目标文件然后重传.

  -r 递归传输指定路径下的所有文件

  -P 2 每两秒显示传输的进程

  -V 打印调试信息

  -f 强制复制,如果目标文件与源文件不一样清除目标文件后重新复制源文件否则跳过.默认情况下,如果目标已经存在源文件,拷贝失败.使用-f更能保证目标数据与源数据的相同性.经测试当不使用-f时删除目标文件并新创建一个相同的空的文件名时在进行重传时bbcp会跳过这个空的目标文件名.

  -w 设置Disk (I/O) buffers. 算法为(window = netspeed/8*RTT = 1000Mb/8*74ms = 1000/1000/8*74 = 9.25 M)

  千M网卡(1000Mbit/s)转换成ms=1000/1000=1Mbit/ms为什么要转换成ms呢?因为RTT以ms为单位. 根据这个公式算出在内网RTT等于1ms时-w的值为128k

  -s 16 设置并发数为16

  -T "ssh -x -a -p 22 -oFallBackToRsh=no -i /home/hjun/.ssh/id_rsa -l hjun hjun.in /usr/bin/bbcp"

      指定远端主机的认证方式

      采用-p 22指定端口

      设置-oFallBackToRsh=no减少ssh响应时间

      设置-i /home/hjun/.ssh/id_rsa指定SSH Key

      设置-l hjun指定登陆用户

      hjun.in为远程主机地址

      /usr/bin/bbcp为远程主机的bbcp路径

  --port pn1 指定接收数据端口,默认5031

   

  -Z pn1:pn2 指定接收数据端口范围
浏览1506  评论0  Alex于 2016-3-24 15:25
发言