Требуется многопоточная копия файла для Linux - PullRequest
1 голос
/ 27 января 2012

У меня есть «большой» объем данных, который нужно копировать каждый день.(6 ТБ)

Это 15 дисков, представленных из SAN через Fibre Channel и копируемых в локальный массив, состоящий из 22 шпинделей.

sources are 
/mnt/disk1
/mnt/disk2
/mnt/disk3

destination is
/mnt/Data/SystemBackup/

Из-за особенностей нашей сети хранения данных однопоточное копирование файлов выполняется не очень быстро;но он очень способен на 600 + мб / с, если мы зададим это правильно.:) Мне нужен способ порождения нескольких потоков в копии файла.Есть много способов сделать это в 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

Ответы [ 2 ]

0 голосов
/ 07 января 2015

Не уверен, что это сработает для исходного вопроса, поскольку SAN - это не просто хост, а просто сетевой массив хранения.Может быть, вы могли бы найти хост рядом с SAN, чтобы он действовал как дополнительный хост.

Если вам нужно скопировать большое количество небольших файлов с одного хоста на другой по сети, вы обнаружите, что это занимает очень много времени.Каждый файл один за другим копируется, и пропускная способность едва заметна.Существует метод, позволяющий на лету сжимать файлы и каталоги и направлять их через необработанный сетевой порт, где принимающий хост прослушивает, а затем распаковывать в месте назначения.Это приводит к тому, что процесс копирования создает огромный отдельный файл, перенаправленный на сетевой порт, и это очень хорошо насытит сеть.В результате он ускорит работу, и вам не понадобится дополнительное пространство на исходном хосте, так как сжатие никогда не попадет на диск, а будет перенаправлено через канал на необработанный сетевой порт.Это работает очень хорошо и является отличным способом загрузить ноутбук с системой USB Linux и извлечь данные на удаленный хост.Или скопируйте с удаленного сервера.

Получатель:

nc -l 3245 |bunzip2 -vvv |tar -x

Отправитель:

папка tar -c / |bzip2 -vv9 |nc 10.1.1.5 3245

Можно также создать туннель ssh и использовать netcat через этот зашифрованный туннель.

В зависимости от размера отдельных файлов это может сэкономить до 40% или более во время копирования.Если у вас большие файлы, это не будет иметь большого значения, так как каждый файл будет иметь время для насыщения пропускной способности сети самостоятельно.Это наиболее полезно с большим количеством маленьких файлов.

0 голосов
/ 05 сентября 2012

только что получил ультракопир , вы можете попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...