我每天都有“大量”数据需要复制。 (6TB)
它是通过光纤通道从 SAN 提供的 15 个磁盘,并复制到由 22 个轴组成的本地阵列。
sources are
/mnt/disk1
/mnt/disk2
/mnt/disk3
destination is
/mnt/Data/SystemBackup/
由于我们SAN的性质,单线程文件复制不是很快;但如果我们以正确的方式要求的话,它的速度可以达到 600+mb/秒。 :) 我需要一种在文件副本中生成多个线程的方法。在 Windows 中有很多方法可以做到这一点......但我找不到任何可用于 Linux 的本机方法。
Python 或 Perl 之类的东西有帮助吗?我有什么遗漏的吗?你怎么看?
编辑: (请注意,我使用的是 gnutils cp 的修改版本。)请阅读此处了解更多信息:http://www.usenix.org/event/lisa10/tech/slides/kolano.pdf
编辑2:代码
#!/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]
刚拿到ultracopier,你可以尝试一下。
不太确定这是否适用于最初的问题,因为 SAN 并不完全是一个主机,只是一个网络存储阵列。也许您可以在 SAN 附近找到一台主机作为附加主机。
如果您需要通过网络将大量小文件从一台主机复制到另一台主机,您会发现这需要很长时间。每个文件都被一个接一个地复制,并且带宽几乎不存在。有一种技术可以动态压缩文件和目录,并将它们通过接收主机正在侦听的原始网络端口进行管道传输,然后在目标上解压缩。这会导致复制过程创建一个重定向到网络端口的巨大单个文件,这将使网络相当饱和。结果是它会加快速度,并且您不需要源主机上的额外空间,因为压缩永远不会到达磁盘,而是通过管道重定向到原始网络端口。这工作得很好,是启动带有 USB Linux 系统的笔记本电脑并将数据提取到远程主机的好方法。或者从远程服务器复制。
接收者:
nc -l 3245 | Bunzip2-vvv|焦油-x
发件人:
tar -c 文件夹/ | bzip2 -vv9 | bzip2 -vv9 |数控 10.1.1.5 3245
也可以创建 ssh 隧道并在该加密隧道上使用 netcat。
根据各个文件的大小,这可以节省高达 40% 或更多的复制时间。如果您有大文件,这并不重要,因为每个文件都有时间自行饱和网络带宽。这对于许多小文件最有用。