私は毎日コピーする必要がある「大量の」データを持っています。 (6TB)Linux用のマルチスレッドファイルコピーが必要です
ファイバチャネルを介してSANから提示され、22個のスピンドルで構成されるローカルアレイにコピーされるディスク15枚です。
sources are
/mnt/disk1
/mnt/disk2
/mnt/disk3
destination is
/mnt/Data/SystemBackup/
SANの性質上、シングルスレッドファイルのコピーはそれほど高速ではありません。私たちが正しい方法でそれを求めれば、600 + mb/secという非常に能力があります。 :)ファイルコピーに複数のスレッドを生成する方法が必要です。 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
これはばかげているかもしれませんが、コピースクリプトで_parallel_でコピー操作を実行できませんでしたか?これは、あなたのコピー操作があなたの帯域幅よりも効果的に最大限になることを保証します。もちろん、パフォーマンスと並行して実行している操作の数に重みを付ける必要がありますが、あなたはその考えを得ています。 –
「正しい道」は私には分かりません。私はそれが邪悪な速い種類の方法でランダムIOを処理することを知っています。たくさんのリクエストとたくさんのことが好きです...一つの大きなファイルをコピーするように頼んだら、IOを与えることはできません。 – AaronJAnderson