我有一個「大量」需要每天覆制的數據量。 (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]
當你說「如果我們以正確的方式提問」,到底什麼是「正確的方式」?我認爲線程架構嚴重依賴於此。 – NPE 2012-01-27 13:33:12
這可能聽起來很愚蠢,但是在你的複製腳本中,你不能在_parallel_中執行復制操作嗎?這可以確保您的複製操作將有效地帶寬您的帶寬。當然,你必須權衡你並行與性能等相關的操作數量,但你明白了。 – 2012-01-27 13:37:11
「正確的方式」對我來說是未知的。我知道它以惡意的方式處理隨機IO。它喜歡有很多請求和很多事情要做...如果你要求複製一個大文件,它只是不能給你IO。 – AaronJAnderson 2012-01-27 13:50:52