2012-01-27 66 views
1

我有一個「大量」需要每天覆制的數據量。 (6TB)需要Linux的多線程文件副本

它是從SAN上通過光纖通道提供的15個磁盤並複製到由22個主軸組成的本地陣列。

sources are 
/mnt/disk1 
/mnt/disk2 
/mnt/disk3 

destination is 
/mnt/Data/SystemBackup/ 

由於我們SAN的性質,單線程文件拷貝速度不是很快;但如果我們以正確的方式提出這個問題,它的速度是非常快的。 :)我需要一種方法來產生文件副本中的多個線程。有很多方法可以在Windows中執行此操作...但我找不到可用於Linux的任何本地方法。

像Python或Perl的東西可以幫助嗎?有什麼我失蹤?你怎麼看?

編輯: (請注意,我用的gnutils CP的修改版本。)在這裏閱讀更多的信息:http://www.usenix.org/event/lisa10/tech/slides/kolano.pdf

EDIT2:代碼

#!/bin/bash 

# Declare the foo 
OPTIONS="-r --double-buffer --threads=8" 
dstdir="/mnt/Data/PrUv2Backup/" 
mcp=/root/mcp 

# Cleanup old timestamp file 
rm -rf PrUv2CopyTimes.log 

# Declare array of source locations 
srcdirs=(
PrUv2-home 
PrUv2-trax 
PrUv2-trax2 
PrUv2-trax3 
PrUv2-traxnl 
PrUv2-traxnl2 
PrUv2-traxnl3 
PrUv2-traxnl4 
PrUv2-traxnv 
PrUv2-traxnv2 
PrUv2-ulog 
PrUv2-zmops 
PrUv2-zmops2 
PrUv2-zmops3 
PrUv2-zmops4 
) 


for srcdir in "${srcdirs[@]}" 

do 
     echo `date +"%r"` $srcdir start >> PrUv2CopyTimes.log 
     $mcp $OPTIONS /mnt/$srcdir/ $dstdir 
     echo `date +"%r"` $srcdir finish >> PrUv2CopyTimes.log 
done 

# email results 
cat PrUv2CopyTimes.log | mailx -r LouPrBoxen001 -s "Backup Complete" [email protected] 
+1

當你說「如果我們以正確的方式提問」,到底什麼是「正確的方式」?我認爲線程架構嚴重依賴於此。 – NPE 2012-01-27 13:33:12

+0

這可能聽起來很愚蠢,但是在你的複製腳本中,你不能在_parallel_中執行復制操作嗎?這可以確保您的複製操作將有效地帶寬您的帶寬。當然,你必須權衡你並行與性能等相關的操作數量,但你明白了。 – 2012-01-27 13:37:11

+0

「正確的方式」對我來說是未知的。我知道它以惡意的方式處理隨機IO。它喜歡有很多請求和很多事情要做...如果你要求複製一個大文件,它只是不能給你IO。 – AaronJAnderson 2012-01-27 13:50:52

回答

0

不太確定這是否適用於原始問題,因爲SAN並不完全是主機,只是網絡存儲陣列。也許你可以找到一個靠近SAN的主機來充當一個額外的主機。

如果您需要通過網絡將大量小文件從一臺主機複製到另一臺主機,您會發現需要很長時間。每個文件一個接一個地被複制,並且帶寬幾乎沒有變化。有一種技術可以實時壓縮文件和目錄,並通過接收主機正在偵聽的原始網絡端口管理它們,然後在目標上進行解壓縮。這會導致複製過程創建一個重定向到網絡端口的巨大單個文件,並且會很好地使網絡飽和。結果是它會加快速度,並且您不需要源主機上的額外肘部空間,因爲壓縮永遠不會碰到磁盤,而是通過管道重定向到原始網絡端口。這種方法運行良好,是使用USB Linux系統啓動筆記本電腦並將數據提取到遠程主機的好方法。或從遠程服務器複製。

收件人:

nc -l 3245 | bunzip2 -vvv | tar -x

發件人:

tar -c folder/bzip2 -vv9 | nc 10.1.1.5 3245

也可以創建一個ssh隧道並在該加密隧道上使用netcat。

根據單個文件的大小,複印時間可以節省多達40%或更多。如果你有大文件,那麼每個文件都有時間自行飽和網絡帶寬並不重要。這對於很多小文件來說是非常有用的。