2012-01-27 11 views
1

私は毎日コピーする必要がある「大量の」データを持っています。 (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] 
+1

「正しい方法で質問すれば」と言うと、「正しい方法」は正確に何ですか?私はスレッディングアーキテクチャがそれに批判的に依存していると思います。 – NPE

+0

これはばかげているかもしれませんが、コピースクリプトで_parallel_でコピー操作を実行できませんでしたか?これは、あなたのコピー操作があなたの帯域幅よりも効果的に最大限になることを保証します。もちろん、パフォーマンスと並行して実行している操作の数に重みを付ける必要がありますが、あなたはその考えを得ています。 –

+0

「正しい道」は私には分かりません。私はそれが邪悪な速い種類の方法でランダムIOを処理することを知っています。たくさんのリクエストとたくさんのことが好きです...一つの大きなファイルをコピーするように頼んだら、IOを与えることはできません。 – AaronJAnderson

答えて

0

だけultracopierを持って、あなたは可能試してみる。

0

SANが正確にホストではなく、ネットワークストレージアレイだけであるため、これが元の質問に対して機能するかどうかはわかりません。たぶん、あなたは追加のホストとしてSANの近くにホストを見つけることができます。

ネットワーク上のあるホストから別のホストに多数の小さなファイルをコピーする必要がある場合、非常に時間がかかることがわかります。それぞれのファイルが順番にコピーされ、帯域幅はほんの一瞬になります。その場でファイルとディレクトリを圧縮し、受信側のホストがリスンしている宛先のネットワークポートを介してそれらをパイプする技術があります。これにより、コピープロセスはネットワークポートにリダイレクトされた巨大な単一ファイルを作成し、ネットワークをきれいに飽和させます。その結果、速度が上がり、圧縮がディスクに到達することはありませんが、パイプ経由で未加工のネットワークポートにリダイレクトされるため、ソースホスト上に余分なエルボールームは必要ありません。これは非常にうまく動作し、USB Linuxシステムでラップトップを起動し、データをリモートホストに抽出するのに最適です。またはリモートサーバーからコピーします。

受信者:

nc -l 3245 | bunzip2 -vvv |タール-x

送信者:

タール-cフォルダ/ | bzip2 -vv9 | nc 10.1.1.5 3245

sshトンネルを作成し、その暗号化されたトンネルでnetcatを使用することもできます。

個々のファイルのサイズによっては、コピー時に40%以上を節約することができます。大きなファイルがある場合、各ファイルがネットワーク帯域幅を飽和させる時間があれば問題はありません。これは、小さなファイルがたくさんある場合に最も便利です。

関連する問題