我有一个“大量”需要每天复制的数据量。 (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