服务器写入大量小文件,nc结合bash并发拷贝大量的小文件

Posted 马雁飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了服务器写入大量小文件,nc结合bash并发拷贝大量的小文件相关的知识,希望对你有一定的参考价值。

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

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

1、新服务器1000M以太网

# ethtool em1Settings 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并发拷贝大量的小文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux - 大量小文件拷贝/同步的性能

如何高效地向Redis写入大量的数据

linux下删除大量小文件

如何高效地向Redis写入大量的数据

如何高效地向Redis写入大量的数据

Hive如何处理大量小文件