我每天都需要复制“大量”数据。 (6TB)
它是通过光纤通道从SAN呈现的15个磁盘,并被复制到由22个磁盘组成的本地阵列。
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" me@us.com
答案 0 :(得分:0)
刚刚获得ultracopier,您可以尝试一下。
答案 1 :(得分:0)
不确定这是否适用于原始问题,因为SAN不是主机,只是网络存储阵列。也许您可以找到SAN附近的主机作为额外的主机。
如果您需要通过网络将大量小文件从一个主机复制到另一个主机,您会发现需要很长时间。一个接一个地复制每个文件,带宽几乎没有。有一种技术可以动态压缩文件和目录,并通过接收主机正在侦听的原始网络端口进行管道传输,然后在目标上进行解压缩。这会导致复制过程创建一个重定向到网络端口的巨大单个文件,这将很好地使网络饱和。结果是它会加速它并且您不需要源主机上额外的肘部空间,因为压缩永远不会到达磁盘但是会通过管道重定向到原始网络端口。这非常有效,是使用USB Linux系统启动笔记本电脑并将数据提取到远程主机的好方法。或者从远程服务器复制。
接收者:
nc -l 3245 | bunzip2 -vvv | tar -x
发件人:
tar -c文件夹/ | bzip2 -vv9 | nc 10.1.1.5 3245
也可以创建一个ssh隧道,并在该加密隧道上使用netcat。
根据单个文件的大小,这可以节省多达40%或更多的复制时间。如果你有大文件,这并不重要,因为每个文件都有时间自己饱和网络带宽。这对于许多小文件最有用。