大批次檔案遷移解決方案

huangdazhu發表於2017-05-08
在我們日常工作中,有很多的時候需要進行檔案遷移,但是諸如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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章