需求:
公司有3.4T多的小文件需要copy到公司內部的nas存儲中,由於小文件太多,數據量太大,整盤copy時速度極慢;只能人工對3.4T多的數據分批次的導入,這對於搞計算機的來說是不能忍受的,於是產生了一個想法,把公司的nas存儲和原始文件主機的盤都掛載到linux服務器上,系統為CentOS7,通過for循環遍歷文件夾實現copy,理論存在,開始實施;
環境:
1、windows10電腦,上面有3.4T多的原始數據
2、公司內部的一套阿里nas存儲
3、公司內部的CentOS系統的服務器
實施:
1、將存有原始數據的windows10文件夾共享,權限為完全控制
2、將windows10共享的文件夾掛載到CentOS主機上
vim /etc/fstab //192.168.12.171/f /move-source cifs defaults,username=web1,password=123!@ 0 0
再執行mount -a命令,將其掛載
[root@movtile_com ~]# mount -a
[root@movtile_com ~]# df -h # 通過命令可以看出共享文件夾已經掛載
文件系統 容量 已用 可用 已用% 掛載點
devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs 7.8G 0 7.8G 0% /dev/shm
tmpfs 7.8G 326M 7.5G 5% /run
tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup
/dev/mapper/centos-root 472G 20G 428G 5% /
/dev/sda1 5.0G 168M 4.9G 4% /boot
/dev/sr0 4.4G 4.4G 0 100% /run/media/k8s/CentOS 7 x86_64
//192.168.12.171/f 11T 3.4T 7.6T 31% /move-source
3、將公司的nas存儲目標文件夾掛載到CentOS主機上
vim /etc/fstab //192.168.8.10/elements /move cifs defaults,username=server1,password=123!@ 0 0
再執行mount -a命令,將其掛載 [root@movtile_com ~]# mount -a [root@movtile_com ~]# df -h # 通過命令可以看出共享文件夾已經掛載 文件系統 容量 已用 可用 已用% 掛載點 devtmpfs 7.8G 0 7.8G 0% /dev tmpfs 7.8G 0 7.8G 0% /dev/shm tmpfs 7.8G 326M 7.5G 5% /run tmpfs 7.8G 0 7.8G 0% /sys/fs/cgroup /dev/mapper/centos-root 472G 20G 428G 5% / /dev/sda1 5.0G 168M 4.9G 4% /boot /dev/sr0 4.4G 4.4G 0 100% /run/media/k8s/CentOS 7 x86_64 //192.168.12.171/f 11T 3.4T 7.6T 31% /move-source # windows10 原始數據 //192.168.8.10/elements 240T 16T 225T 7% /move # 公司nas文件夾
現在可以看到windows10的3.4T多的共享文件夾和nas存儲都掛載到了CentOS主機上;
4、開始copy
具體是這么做的,統計了下需要上傳nas系統的文件夾共有300個之多;找了三台CentOS主機,通過上述方式將盤都掛載上;每台設備分配100個文件夾,再將每台設備的100個文件夾分成3份,這樣每台設備上可以跑3個copy程序,3台設備9個copy程序同時開始工作;
CentOS服務器1執行的for循序
for i in `cat 42-1.txt`;do rsync -av $i /move/Work/010/;done for i in `cat 42-2.txt`;do rsync -av $i /move/Work/010/;done for i in `cat 42-3.txt`;do rsync -av $i /move/Work/010/;done CentOS服務器2執行的for循環 for i in `cat 43-1.txt`;do rsync -av $i /move/Work/010/;done for i in `cat 43-2.txt`;do rsync -av $i /move/Work/010/;done for i in `cat 43-3.txt`;do rsync -av $i /move/Work/010/;done CentOS服務器3執行的for循環 for i in `cat 44-1.txt`;do rsync -av $i /move/Work/010/;done for i in `cat 44-2.txt`;do rsync -av $i /move/Work/010/;done for i in `cat 44-3.txt`;do rsync -av $i /move/Work/010/;done 上面循環的txt文件里面存放的是分配好的需要copy的目標文件夾的名稱;
然后將循環掛后台就開始copy了;
copy升級版本:可以先用split -l 20 A.txt 將目錄平均分割通過多進程一塊跑,速度更快了;每個分割的目錄數量可以根據CPU的核心數確定,否則過多會導致服務器負載巨高;
#!/bin/bash src_route=/move-source/data/A_ShotWork dest_route=/move/A_ShotWork for i in `cat xaa` do ( rsync -av -P $src_route/$i $dest_route/ &>> $i.log; if [ $? -eq 0 ];then echo $i is copy Complete!!! fi ) & done wait for i in `cat xab` do ( rsync -av -P $src_route/$i $dest_route/ &>> $i.log; if [ $? -eq 0 ];then echo $i is copy Complete!!! fi ) & done wait