08.09.2014 18:22
OlegON
 
Коллеги задрали идеями о том, что хорошо бы мне бекап копировать параллельными потоками... В один поток на 10Гбитной сетке выходила скорость 40Мб/сек. Ппц. Ну и ладно, собрал скриптик, запускать

Код:
script /srcdir server:/remote/srcdir
Код:
#!/bin/bash
#rsync threads by olegon.ru

source=$1
target=$2

if [ $1 -n ]
then
exit
fi

cd "${source}"

find . -type f | while read dir
do
echo $dir
subfolder=$(echo "${dir}" | sed 's@^\./@@g')
TD=$(dirname $(echo ${target}/${subfolder} | cut -d':' -f2))
SD=$(echo ${target} | cut -d':' -f1)
ssh "oracle@$SD" "mkdir -p $TD" </dev/null
echo "${source}/${subfolder}" "${target}/${subfolder}"
rsync -a -v -e "ssh -c arcfour" "${source}/${subfolder}" "${target}/${subfolder}" &
done
while [ `ps -ef | grep -c [r]sync` -gt 1 ]
do
sleep 10
echo "Waiting for rsync ... "`ps -ef | grep -c [r]sync`
done
echo "DONE!"`date`
скрипт запустит по одному rsync на каждый файл, дождется завершения всех rsync в системе и выйдет. В тех же условиях скорость рывками подскакивает до 400Мб/сек.
08.09.2014 21:36
OlegON
 
Да, имейте ввиду, что если скрипт назовете как-то, что в имени будет rsync, то "-gt 1" надо поменять на "-gt 2"
29.04.2015 18:08
OlegON
 
Код:
#!/bin/bash

source=$1
target=$2

if [ $1 -n ]
then
exit
fi

cd "${source}"

find . -type f | while read dir
do
echo $dir
subfolder=$(echo "${dir}" | sed 's@^\./@@g')
TD=$(dirname $(echo ${target}/${subfolder} | cut -d':' -f2))
SD=$(echo ${target} | cut -d':' -f1)
ssh "oracle@$SD" "mkdir -p $TD" </dev/null
echo "${source}/${subfolder}" "${target}/${subfolder}"
rsync -a -v -e "ssh -c arcfour" "${source}/${subfolder}" "${target}/${subfolder}" &
done
while [ `ps -eopid,comm | egrep '^ +[0-9]+ rsync' | wc -l` -gt 0 ]
do
sleep 3
echo "Waiting for rsync ... "`pgrep rsync | wc -l`
done
echo "DONE!"`date`
поправил зависимость от названия скрипта и т.п.
07.12.2015 16:14
i8990
 
Почему порядка 40 метров в секунду скорость, В чём ограничение?
07.12.2015 17:03
OlegON
 
В железе, вестимо...

P.S. Иногда на древних системах есть смысл поставить нужное ограничение на количество потоков, скопировав цикл ожидания завершения внутрь цикла выполнения.
Часовой пояс GMT +3, время: 19:52.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.