在我们日常工作中,有很多的时候需要进行文件迁移,但是诸如10T之类的大文件(里面包含若干小文件的时候),我们如果单单使用CP的命令进行迁移的话,

那么他的效率经过测试,1分钟最多也就1G之内的效率。所以如何提高迁移效率呢?我们就需要使用并发执行的方式进行

比如说/data目录中有100个文件夹需要迁移到本机器的/data2目录下。如何开展?

简单的来说:cp -r /data/ /data2 即可。但是这样迁移的话,就会消耗大量的时间,因为在/data下面还有很多文件夹,逐级目录,然后散列的一些小文件。

据统计,效率应该在1G每分钟,那么在线迁移10T消耗大约为10000分钟,约为7天,不包含之间有效率降低。

那么怎么做才能加快迁移效率呢?很显然那就是多开CP命令,将服务器的IO全部调用起来。

如何开?

首先/data目录下面有几百个目录,那么我们可以进行目录的提取如ls -l |awk '{print $9}' >> Folder.txt

编写批量迁移脚本

#!/bin/bash

cat Folder.txt.txt|while read line

do

{

cp -r $line /data2/

}&

done

这个脚本就是进行并发执行CP命令。如果是不在后面加&那么时间还和CP 一样,但是加了& 就以后台进程方式执行, 迅速执行下一个CP命令。

如果100个文件夹,那么我们可以把时间缩短10倍。

这样是不是很简单的呢?

同时迁移完成之后怎么进行文件一致性校验的呢?这里介绍一个MD5文件校验。

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5 全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。

在Linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。

#!bin/sh

cat Folder.txt|while read line

do

{

find $line -type f -not \( -name '.*' \) -exec md5sum {} \; >>$line.txt

}&

done

这样每个文件夹会生产一个文件,里面包含了所有文件的信息,

然后2个目录的文件进行 diff对比即可。

是不是简单,方便很多的呀!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28869493/viewspace-2138701/,如需转载,请注明出处,否则将追究法律责任。

Logo

更多推荐