маштабируемый инкрементальный бэкап

Доброе время суток. Нужна небольшая консультация.
Раньше делал полный бэкап нужных каталогов и никогда не парился, но тут появилась необходимость делать инкрементальный бэкап на удалённый публичный сервер. (всё упёрлась в скорость канала но это вторично...)
1) решил отделаться малой кровью, сначала идя была такова сделать инкременталку через tar он вроде как позволяет, после проверки оказалось что не всё изменённые файлы верифицируются им как изменённые. Даже не стал разбираться т.к. утеря файлов критична.
2) через rsync получилась сделать полностью рабочую структуру. Однако ему для инкрементального бэкапа нужна эталонная директория с файлами относительно которой происходит верификация. А хотелось чтобы был только файлик с хэшем.
3) написал небольшой скрипт, по времени получается дольше но это не критично:
bname="`hostname`-`date +%m-%d-%y`-inc"
bname01="`hostname`-`date +%m-01-%y`-full"
bpasswd="passwd"
ssh_host="user@local"
ssh_path="/srv/backup/"
ssh_key_path="/home/admin/.ssh/local/id_rsa"

exclude="backup/*|cache/*|temp/*"

include=(
#dir
    /srv/http/*/
#work
    /home/*/work/doc/
)

opt_tar=(
    --create
    --gzip
    --one-file-system
    --recursion
    --preserve-permissions
    --sparse
    --dereference
)

opt_ssh=(
    -o UserKnownHostsFile=/dev/null
    -o StrictHostKeyChecking=no
    -i $ssh_key_path
)

opt_cp=(
    --archive
    --one-file-system
    --parents
}

cd $(cd $(dirname $0) && pwd)

if [[ ! -e $bname01.sum || `date +%d` == "01" ]];then
    bfile=$bname01 && mkdir -p $bname01
    find ${include[*]} -type f | grep -Ev "$exclude" | while read fname; do
        fhash=`sha256sum "$fname"`
        echo "$fhash" >> $bname01.sum
        cp ${opt_cp[*]} "$fname" $bname01
    done
else
    bfile=$bname &&  mkdir -p $bname
    find ${include[*]} -type f | grep -Ev "$exclude" | while read fname; do
    fhash=`sha256sum "$fname"`
        if [[ -z `grep -w "$fhash" $bname01.sum` ]]; then
            echo "$fhash" >> $bname01.sum
            cp ${opt_cp[*]} "$fname" $bname
        fi
    done
fi

cd $bfile && tar ${opt_tar[*]} --file=../$bfile.tar.gz . && cd ..

openssl enc -aes-256-cbc -in $bfile.tar.gz -out $bfile.enc -k $bpasswd

scp ${opt_ssh[*]} $bfile.enc $ssh_host:$ssh_path

bverlocal=($(sha256sum "$bfile.enc"))
bverssh=`ssh ${opt_ssh[*]} $ssh_host 'sha256sum '$ssh_path'/'$bfile'.enc' | awk '{print $1}'`
if [[ "$bverlocal" == "$bverssh" ]]; then
    rm -rf $bfile
    rm -f $bfile.tar.gz
    rm -f $bfile.enc
else
    echo checksum not match!!!
fi

вобщем вопрос, не "фигнёй" ли я занимаюсь?? И вообще какие варианты существуют?, а то google либо примитив выдаёт, либо научные диссертации... "среднечка" так и не нашёл. Заранее спасибо.

p.s. и да я тут поспрашивал у своих, не надо советовать программы которых нет в офф репозиториях.
p.p.s. если кто подскажет что то по оптимизации скрипта, буду непомерно благодарен.
Ошибки в тексте-неповторимый стиль автора©
есть unison, работает поверх rsync. В отличие от последнего умеет делать реальную двустороннюю синхронизацию (для Вашей задачи не актуально), как следствие - в отличие от rsync хранит индекс файлов, следовательно, сравнивает редакции быстро (на плохом канале пока на медленном удаленном rsync КАЖДЫЙ раз просмотрит сколько-то десятков тысяч файлов времени проходит много, соединение может упасть).


unison /home/что  ssh://юзер@адрес:порт//где   -batch -ui text  -times  -prefer /главное_при_конфликте_версий  -ignore 'Name *~' -ignore 'Name .*~' -ignore 'Name *#'  -ignore 'Name *.tmp' -ignore 'Path *d/игнорируемый_директорий_указывается_с_конца_пути'  -ignore 'Name *.log'  -ignore 'Name .~*.*'    -backup 'Name *.*' -backupsuffix .bak.'$VERSION' -backupprefix ""
сори читканул man что то я не нашёл как указать относительно чего проводить верификацию?

p.s. чтоб было понятно что я хочу.
rsync: --compare-dest
tar: -incremental
и тп.
Ошибки в тексте-неповторимый стиль автора©
Что то писать и давать совет такому спецу как то не удобно..... попробую просто дать ссылку на одно старое-старое обсуждение на одном из форумов (как ни странно ссылка рабочая....)
Ошибки не исчезают с опытом - они просто умнеют
indeviral
через rsync получилась сделать полностью рабочую структуру. Однако ему для инкрементального бэкапа нужна эталонная директория с файлами относительно которой происходит верификация.
Что-то не пойму. В чем тут проблема?
Lupus pilum mutat, non mentem.
vasek
спасибо, посмотрим.

jim945
Что-то не пойму. В чем тут проблема?
да никаких проблем, просто меня не устраивает необходимость держать большие объёмы чужих данных. (тем более хз что там будет может ещё и с шифрованием прийдётся возится если на долго надо будет оставлять...)
разве не удобнее его один раз в месяц прогнать заархивировать и отправить подальше, а себе оставить файлик с хэшами?
Ошибки в тексте-неповторимый стиль автора©
indeviral
сначала идея была сделать инкременталку через tar ….., после проверки оказалось что не всё изменённые файлы верифицируются им как изменённые.
indeviral
разве не удобнее его один раз в месяц прогнать заархивировать и отправить подальше, а себе оставить файлик с хэшами?
Инкременталку tar делает нормально, но там есть заморочки по использованию файла метаданных (от этого и зависит разница, можно получать даже разницу от разницы, + эту опцию рекомендуют прописывать даже при восстановлении) — мне тогда показалось это замороченным, пробовать не стал....... испугался что напутаю .....но некоторые только это и используют и считают, что лучше ничего нет......
Ошибки не исчезают с опытом - они просто умнеют
vasek
сча придумаем как его хорошо протестировать , может конечно я что то с исключениями намудрил но эт врядли.
Ошибки в тексте-неповторимый стиль автора©
backup-manager не подойдет?
indeviral
да никаких проблем, просто меня не устраивает необходимость держать большие объёмы чужих данных. (тем более хз что там будет может ещё и с шифрованием прийдётся возится если на долго надо будет оставлять...)
разве не удобнее его один раз в месяц прогнать заархивировать и отправить подальше, а себе оставить файлик с хэшами?
Может и удобнее. Но я опять не понимаю суть проблемы.
Надо раз в месяц бекапить чужие данные. Так?
Зачем хранить их копию\хеш у себя, если они доступны раз в месяц?
Lupus pilum mutat, non mentem.
 
Зарегистрироваться или войдите чтобы оставить сообщение.