Инкрементальный backup

Аватар пользователя slavaz

скрипт:

#!/bin/sh

MAIN_DIR="/opt/backup"
WORK_DIR="/usr/local/backup"

[ -z "$1" ] && exit 1

BACKUP_TYPE=$1; shift
IP_FROM_BACKUP=$1; shift
LIST_BACKUPS=$@
BACKUP_TIME_DIR=manually_`date +%Y-%m-%d_%H:%M:%S`
if [ "$BACKUP_TYPE" = "hourly" ]; then
    BACKUP_TIME_DIR=hourly_`date +%Y-%m-%d_%H:%M`
elif [ "$BACKUP_TYPE" = "daily" ]; then
    BACKUP_TIME_DIR=daily_`date +%Y-%m-%d`
fi
[ -z "BACKUP_TIME_DIR" ] && exit 1

RSYNC_OPTS="-azc --delete --ignore-errors  --force --backup --backup-dir=../"${BACKUP_TIME_DIR}
# ------------------------------------------------------------------------------
[ ! -d ${MAIN_DIR}/${IP_FROM_BACKUP} ] && \
    mkdir -p ${MAIN_DIR}/${IP_FROM_BACKUP} || \
    touch ${MAIN_DIR}/${IP_FROM_BACKUP}

for bckp in $LIST_BACKUPS; do

    [ ! -d ${MAIN_DIR}/${IP_FROM_BACKUP}/${bckp}/root ] && \
        mkdir -p ${MAIN_DIR}/${IP_FROM_BACKUP}/${bckp}/root || \
        touch ${MAIN_DIR}/${IP_FROM_BACKUP}/${bckp}/root
    EXCL_OPT=""
    [ -f ${WORK_DIR}/${IP_FROM_BACKUP}/exclude-${bckp} ] && EXCL_OPT="--exclude-from="${WORK_DIR}/${IP_FROM_BACKUP}/exclude-

    rsync ${RSYNC_OPTS}  ${EXCL_OPT} ${IP_FROM_BACKUP}::${bckp} ${MAIN_DIR}/${IP_FROM_BACKUP}/${bckp}/root
done

Использование: /путь/к/скрипту/backup.sh ...
где - тип бэкапа (manually,hourly, daily)
- это IP-адрес компа, с которого брать бэкап
, , ... - это области, разрешённые для синхронизации rsync-сервером.

Необходимые условия: на компах, с которых брать бэкап, должен быть запущен rsync-сервер. Пускается так:
/etc/xinetd.d/rsync

service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon -v
        log_on_failure  += USERID
}

/etc/rsyncd.conf

list = no
use chroot = yes
log file = /var/log/rsync.log
hosts allow = 

[BCP1]
   path = /path/to/some/dir
   uid = root
   gid = root
   read only = true
   comment = backup service
   max connections = 2

после этого killall -HUP xinetd
и rsync-сервер запущен

Аватар пользователя voland

Re: Инкрементальный backup

Не столь обширный и мощный скрипт, но тоже может пригодиться. Бэкапит текущую директорию, если не указан аргумент путь_к_директории. Сохраняет архивы в виде -backup-$(date +%m-%d-%Y).tar.gz в папке, которую архивировали. Печатает помощь по аргументу -h или --help Улыбка

ВложениеРазмер
backupdir.sh.tar.gz 521 байт
Аватар пользователя IsakovAN

Re: Инкрементальный backup

Мой скрипт делает полную резервную копию в воскресенье, а в остальные дни diffы:

#!/bin/bash
day=`date +%w`
pushd $1/$2/
if [ "$day" == "0" ]; then
    rsync -azc $1:/$2 0/
    tar c 0 | bzip2 -c -9 > `date +%d.%m.%Y`.tar.bz2
else
    mkdir $day -p
    rsync -azc 0/ $day/
    rsync -azc $1:/$2 $day/
    diff 0 $day | bzip2 -c -9 > `date +%d.%m.%Y`.diff.bz2
fi
popd

К сожалению скрипт очень прожорливый по дисковому пространству! Грустный
Есть ли у кого-нибудь идеи по его(скрипта Улыбка ) совершенствованию?

Аватар пользователя voland

Re: Инкрементальный backup

А, может, сносить бэкапы двухнедельной давности или около того?

Аватар пользователя IsakovAN

Re: Инкрементальный backup

Старые backupы удаляются. Суть в том, что данные хранятся в двойном комплекте!

Аватар пользователя Bircoph

Re: Инкрементальный backup

Имхо, но использовать rsync небезопасно! (равно как и rcp). Лучше либо использовать scp либо устанавливать ssh-соединение и внутри него делать почти всё, что хочется. Впринципе, самом rsync можно заставить использовать ssh (присер в man rsync).

А если вы будете просто использовать rsync внутри небезопасной сети, то ваши данные будут как минимум перехвачены, а в принципе возможен и взлом системы. Я, например, нахожусь в агрессивном сетевом окружении Поражён

Аватар пользователя slavaz

Re: Инкрементальный backup

Современный rsync внутри shh пускается по умолчанию

RSS-материал