LINUX.ORG.RU
ФорумAdmin

Скрипт для бэкапа


0

0

Написал такой вот скрипт

#!/bin/sh
LIST="dir1/subdir1 dir2 dir3 dir1/subdir2"
CLEAN_SCRIPT="/root/clean.sh" #за день накапливается куча временных файлов, бОльшая часть которых на следующий день не нужна, - сносим
BASE_DIR="/srv/"
DEST_HOST="192.168.1.7"
DEST_DIR="/srv/backup/"
USER="sambauser"
DEST="$USER@$DEST_HOST:$DEST_DIR"
DATE=`date +%F`
PREV_BAK="$DEST_DIR"`date -d "-1 day" +%F`"/"

$CLEAN_SCRIPT
ping -c4 -w4 $DEST_HOST > /dev/null 2>&1
EXIT_CODE=$?
if [ $EXIT_CODE -eq "0" ]
then
	for DIR in $LIST
	do
		rsync -a -e 'ssh -p468' \
		--link-dest=$PREV_BAK$DIR $BASE_DIR$DIR $DEST$DATE
	done
	exit 0
elif [ $EXIT_CODE -eq "2" ]
then
	echo "Network problem!"
	exit $EXIT_CODE
elif [ $EXIT_CODE -eq "1" ]
then
	echo "$DEST_HOST is down!"
	exit $EXIT_CODE
else
	echo "Something goes REALY wrong..."
	exit $EXIT_CODE
fi

На принимающей машине старые бэкапы удаляются таким вот образом

#!/bin/bash
BKP_DIR="/srv/backup/"
MAX="7"
OLD_DIR=$(date -d "-$MAX day" +%F)
N=$(ls $BKP_DIR | wc -l)
if [ -d $BKP_DIR$OLD_DIR ]
then
	rm -rf $BKP_DIR$OLD_DIR
elif [ $N -gt $MAX ]
then
	N=$[$N - $MAX]
	LIST=$(ls -t $BKP_DIR | head -n$N)
	for I in $LIST
	do
		rm -rf $BKP_DIR$I
	done
fi
exit 0

Ткните пожалуйста носом в косяки.

В случае неуспешного(по разным причинам), или пропущенного (cron не работал) 1: следующий попытается сожрать много места 2: высоки шансы удалить рабочий.

+Ненужные файлы удобно пропускать посредством '-F' (и т.п.).

DonkeyHot ★★★★★
()

3: не видно способа отличить битый бекап от целого 4:права посъезжают (sambauser скорее всего не умеет chownить)

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

>В случае неуспешного(по разным причинам), или пропущенного (cron не работал) 1: следующий попытается сожрать много места 2: высоки шансы удалить рабочий.
Может имеет смысл поднять rsync демоном? На какой тогда стороне лучше?

>+Ненужные файлы удобно пропускать посредством '-F' (и т.п.).

Про --exclude знаю) Времянку полюбому надо тереть, иначе быстро весь диск забъёт.

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от DonkeyHot

Весь вывод rsync'a вроде на мыло сыпется, что ещё стоит использовать для проверки целостности?

На исходной машине все файлы принадлежат sambauser'у.

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от KRoN73

Идея в том, чтоб юзвери сами могли найти нужный им файл, из за этого не стал rdiff-backup использовать. Про унисон почитаю.

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от Lonli-Lokli

Вроде в rsync есть поддержка инкрементального бекапа с сохранением дельт.

А если совсем уж лень маны читать, просто сделай несколько папок и синхронизируй их с источником по очереди, по одной в день.

nnz ★★★★
()
Ответ на: комментарий от nnz

Угу --backup + --backup-dir/--suffix, как только потом старые копии ловить?

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от nnz

Хотя, если в суффикс подставлять дату например, оно подойдёт. Спасибо.

Lonli-Lokli ★★
() автор топика

Получается как-то так:

for DIR in $LIST
	do
		rsync -a -e 'ssh -p468' --delete -b --backup-dir=$DEST_DIR$DIR.bak/$DATE $BASE_DIR$DIR $DEST
	done

Кстати, что окажется в $? если один из запусков rsync'a обломится?

Lonli-Lokli ★★
() автор топика
Ответ на: комментарий от Lonli-Lokli

>Насколько я понял, unison для синхронизации

Он универсален. Синхронизация в одну сторону - это и есть бэкап. Рулит Юнисон в этом смысле тем, что имеет простые конфиги/наборы правил и может делать версионный бэкап. Я так периодически свой сервер с удалённой машины бэкаплю (несколько сот тысяч файлов гигов на 50) и домашнюю фото/видеоколлекцию. Версионность особенно хороша, когда жена отресайзит фотку в коллекции и сохранит в таком виде не заметив. При обычно бэкапе, если обнаружишь это через полгода, фиг уже найдёшь что нужно. А тут - просто старую версию возьмёшь из бэкапа :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Lonli-Lokli

>Весь вывод rsync'a вроде на мыло сыпется

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

>что ещё стоит использовать для проверки целостности

Самый простой способ - сохранять "туда" $? после rsync-а (это проще делать, если rsync-клиент на стороне бекапа), и не считать при удалении каталоги, в которых он не-0.

DonkeyHot ★★★★★
()

я бы заюзал ФС с поддержкой снапшотов, просто периодически создавал бы новые снапшоты, а старые удалял бы

redixin ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.