首页 > 代码库 > nc结合bash并发拷贝大量的小文件

nc结合bash并发拷贝大量的小文件

生产环境的一台服务器硬盘有问题,需要更换服务器,其中有16480个小文件,总共11G左右的数据需要迁移,数据中断限制在5分钟内,拷贝数据必须限制到2分钟之内完成

尝试过用nfs、scp的方法时间消耗都比较长,最后决定用nc,2分钟之内搞定,简单记录下过程


1、新服务器1000M以太网

# ethtool em1

Settings for em1:
Supported ports: [ TP ]
Supported link modes:   10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Half 1000baseT/Full 
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes:  10baseT/Half 10baseT/Full 
                        100baseT/Half 100baseT/Full 
                        1000baseT/Half 1000baseT/Full 
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Link partner advertised link modes:  10baseT/Half 10baseT/Full 
                                     100baseT/Half 100baseT/Full 
                                     1000baseT/Full 
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: off
Supports Wake-on: g
Wake-on: d
Current message level: 0x000000ff (255)
       drv probe link timer ifdown ifup rx_err tx_err
Link detected: yes

2、服务端需要开16个shell等待客户端传输数据,经测试,nc服务端进程不能放在后台,必须放在前台


nc -l 990 |tar -C /home/serverrrd/ -zxf - 
nc -l 991 |tar -C /home/serverrrd/ -zxf - 
nc -l 992 |tar -C /home/serverrrd/ -zxf - 
nc -l 993 |tar -C /home/serverrrd/ -zxf - 
nc -l 994 |tar -C /home/serverrrd/ -zxf - 
nc -l 995 |tar -C /home/serverrrd/ -zxf - 
nc -l 996 |tar -C /home/serverrrd/ -zxf - 
nc -l 997 |tar -C /home/serverrrd/ -zxf - 
nc -l 998|tar -C /home/serverrrd/ -zxf - 
nc -l 999 |tar -C /home/serverrrd/ -zxf - 
nc -l 9910 |tar -C /home/serverrrd/ -zxf - 
nc -l 9911 |tar -C /home/serverrrd/ -zxf -
nc -l 9912 |tar -C /home/serverrrd/ -zxf - 
nc -l 9913 |tar -C /home/serverrrd/ -zxf -
nc -l 9914 |tar -C /home/serverrrd/ -zxf - 
nc -l 9915 |tar -C /home/serverrrd/ -zxf -
netstat -ntlup| grep nc


3、客户端开16个并发同时向服务端提交传输数据

cat batch-client.sh

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 0 a b c d e f
do
   {
     expr $i "+" 10 &> /dev/null
     if [ $? -eq 0 ]; then
     port=$i
     else
      port=1`echo $i| tr "a-z" "0-5"`
     fi
     #echo $port
     #echo $i*.rrd
     tar -zcf - $i*.rrd |nc 172.30.4.219 99$port
   } &
done
wait
echo "done"



本文出自 “小鱼的博客” 博客,谢绝转载!

nc结合bash并发拷贝大量的小文件