比scp更快的传输工具bbcp介绍
简介
bbcp是由SLAC(斯坦福直线加速器中心)的Andy Hanushevsky创立的点对点网络文件拷贝工具。
官网:http://www.slac.stanford.edu/~abh/bbcp/
下载:https://www.slac.stanford.edu/~abh/bbcp/bin/
文档:https://docs.nersc.gov/services/bbcp/
注意:如果你的服务器启用防火墙了,注意
需要开放 5031 端口
。例如,要从 172.16.66.65 拷贝文件到 172.16.66.66,则目标服务器上做如下规则:
1 | iptables -A INPUT -s 172.16.66.65 -p tcp --dport 5031 -j ACCEPT |
源服务器上不需要添加相应的规则。
scp是单线程拷贝的,而bbcp是实现多线程,并且采用移动窗口的机制实现,相同条件下会比较快。
如果在拷贝文件时,在远程机器使用ps -elf | grep bbcp 看。
1 2 3 | # ps -elf | grep bbcp | grep -v grep 0 S oracle 7398 7397 1 81 0 - 12251 wait 17:04 ? 00:00:00 bbcp SNK 1 S oracle 7427 7398 68 76 0 - 22495 184466 17:04 ? 00:00:13 bbcp SNK |
会有2个进程。
源端进程:
下载使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -- 下载,注意:源端和目标端都需要下载安装bbcp wget http://www.slac.stanford.edu/~abh/bbcp/bin/amd64_rhel60/bbcp -O /usr/local/bin/bbcp && chmod +x /usr/local/bin/bbcp wget https://www.slac.stanford.edu/~abh/bbcp/bin/amd64_rhel50/bbcp -O /usr/local/bin/bbcp && chmod +x /usr/local/bin/bbcp -- 从本地拷贝到远程 bbcp -v -s 8 -F -f -z -w 10m -P 5 table_0220.dmp root@192.168.243.16:/soft/ -- 从远程拷贝到本地 bbcp -v -s 8 -F -f -z -w 10m -P 5 root@192.168.60.53:/u01/rman_bk/expdp01_20211114.dmp . -- 修改端口 bbcp -v -s 8 -F -f -z -w 10m -P 5 --port 6666 /data/* root@192.168.243.16:/data/ bbcp -v -s 8 -F -f -z -w 10m -P 5 -Z 2000:3000 /data/* root@192.168.243.16:/data/ |
参数介绍
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 参数详解: -4 使用ipv4 IP地进行传输 -k 保留所有未传输完成的文件,并允许在重试时进行覆盖,使用-f后即使加了-k也会全部重传,一般与-a一起使用,默认不使用-k时当传输未完成就中断传输时会删除没有传输完的目标文件 -a 保留checkpoint信息用于校验文件的完整性 -r 递归传输指定路径下的所有文件 -c 使用压缩减少网络上传输的字节但需要额外的CPU资源,如果CPU资源不足,性能会非常差。bbcp使用zip对数据进行压缩传输压缩级别1-9,1速度最快,9最大压缩率速度最慢 -d 多目录复制,可以使用多个源以空格隔开。如:/home/ddroot/data dir1/data1 dir2/data2 -P 2 每两秒显示传输的进程 -v 显示拷贝信息 -V 打印调试信息 -f 强制清除远程主机上传输失败的数据 -F 不检查目标服务器的剩余空间 -w 设置Disk (I/O) buffers 算法为(window = netspeed/8*RTT = 1000Mb/8*74ms = 1000/1000/8*74 = 9.25 M) 对应链接:http://www.slac.stanford.edu/~abh/bbcp/#_Toc332986061 -s 16 设置并发数为16 参考官方建议:http://www.slac.stanford.edu/~abh/bbcp/#_Streams_(-s) -T "ssh -x -a -p 1222 -oFallBackToRsh=no -i /home/ddroot/.ssh/id_rsa -l ddroot 172.16.66.66 /usr/bin/bbcp" 指定远端主机的认证方式: 采用-p 1222指定端口; 设置-oFallBackToRsh=no减少ssh响应时间; 设置-i /home/ddroot/.ssh/id_rsa指定SSH Key; 设置-l ddroot指定登陆用户; 172.16.66.66为远程主机地址; /usr/bin/bbcp为远程主机的bbcp路径; --port pn1 指定接收数据端口,默认5031 -Z pn1:pn2 指定接收数据端口范围 |
加速scp
若要加速scp,则可以加上-c aes192-cbc
参数,例如:
1 | scp -r -c aes192-cbc /home2/backup/ root@110.10.24.99:/home/sites/ |
若是内网传输,其实不用很严格的加密算法的。
bbcp常见错误
bbcp: Unable to allocate more than 0 of 8 data streams.
1 2 | bbcp: Connection refused unable to connect to port localhost:2000 bbcp: Unable to allocate more than 0 of 8 data streams. |
解决:命令中去掉“-z”参数即可!
bbcp: Invalid login ack sequence.
原因:端口被占用,默认为5031,请使用--port或-Z更换端口。
解决:
1 | yum install -y openssl098e |
bbcp放后台执行
目前测试只能使用screen或tmux命令来操作。
可以参考:https://www.xmmup.com/linuxzhiscreenminglinghoutaiyunxing.html