2012-01-27 64 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%或更多。如果你有大文件,那么每个文件都有时间自行饱和网络带宽并不重要。这对于很多小文件来说是非常有用的。