воскресенье, 23 августа 2015 г.

Инкрементное резервное копирование с помощью Rsnapshot.


В данной статье разберем создание инкрементных резервных копий с помощью Rsnapshot.
Главное достоинство Rsnapshot, это простота получения файлов из резервной копии. У вас есть прямой доступ к папкам с резервными копиями по периодам копирования.
Как обычно, платформа для установки Debian 8.

1) Установка.
apt-get install rsnapshot
После установки, файл настроек доступен по пути: /etc/rsnapshot.conf.

2) Настройка.
mv /etc/rsnapshot.conf /etc/rsnapshot.conf.BACK
echo "
####Версия программы
config_version  1.2
####Где будут хранится резервные копии
snapshot_root   /home/where_we_do_backup/
####Что будем резервировать и как назвать копию
backup  /home/what_we_do_backup/   snapshots/
####Основные команды
cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
cmd_logger      /usr/bin/logger
####Задания копирования
#Резервные копии за каждый день в течении 60 дней
retain          daily   60
#Резервные копии 2 раза в месяц, 23 раза = почти 12 месяцев
#retain         weekly  23
####Уровень логов
# 1     Quiet           Print fatal errors only
# 2     Default         Print errors and warnings only
# 3     Verbose         Show equivalent shell commands being executed
# 4     Extra Verbose   Show extra verbose information
# 5     Debug mode      Everything
verbose         3
loglevel        3
####Файл лога
logfile         /var/log/rsnapshot.log
####pid
lockfile        /var/run/rsnapshot.pid
" >> /etc/rsnapshot.conf
В данном файле, как видно, есть 3 основные настройки:
1) snapshot_root - путь, где будут хранится наши резервные копии
2) backup - путь до папки, которую мы будем резервировать (/home/what_we_do_backup/) и папка, которая создастся в snapshot_root для этого пути (snapshots/)
3) retain - названия резервирования (daily/weekly) и количество копий, которые будет хранить Rsnapshot.

ВАЖНО! вместо пробелов в файле /etc/rsnapshot.conf используйте ТАБУЛЯЦИЮ

3) Автоматизация.
Для отладки процесса, можно использовать команду:
rsnapshot configtest
Которая проверит правильность конфигурации.
Либо:
rsnapshot -t daily
Которая уже протестирует вашу настройку под именем daily.
Если написать
rsnapshot daily
То произойдет резервное копирование по настройке daily.

Rsnapshot при установке создает собственный файл в Cron по пути /etc/cron.d/rsnapshot, можно использовать его, но нам необходимо получить подробный отчет о проделанной работе, поэтому создадим следующий файл:
echo "
#!/bin/sh
# Бекап с помощью rsnapshot
### Настройки ###
#Ошибки (по умолчанию нет)
ERRORS="no errors"
#Получатели письма счастья )
MAILTO='admin@myil.ru'
MAILFROM='backuper@myil.ru'
SUBJECTED='INCREMENT BACKUP report ('$ERRORS')'
LOGFILE=/tmp/rsnapshot.log.z
#расположение rsnapshot
RS=/usr/bin/rsnapshot
#Передаем параметр со скриптом (запуск скрипта в ежедневном или другом режиме)
PARAM=$1
#Путь до папки, которую будем проверять до и после бэкапа на изменение размера
ZERODAYPATH=/home/where_we_do_backup/daily.0/snapshots
#Временный файл, в который будет записан результат проверки размеров файлов папки ZERODAYPATH
TMPFILE=/tmp/size2.tmp
#Строка проверки размера папки
HOWMUCH='/usr/bin/du -sh *'


#Чистим лог для начала
cat /dev/null > $LOGFILE

##Записываем в начало лога данные, которые будут использованы при отправке письма
echo "To:$MAILTO
From:$MAILFROM
Subject: $SUBJECTED
Content-Type: text/plain; charset=UTF-8; format=flowed
Hi all" >> $LOGFILE

#Дописываем в лог разделитель
echo "
------------------------------------------------------------------
Before backup:
" >> $LOGFILE
#Нужно записать в лог размер содержимого из /BACKUP/daily.0/AUP
#Проверяем осталась ли запись после бэкапа с прошлого раза, если да то пишем ее
#Если нет, делаем du чтобы узнать размер и записываем в лог
if [ -f $TMPFILE ]; then
cat $TMPFILE >> $LOGFILE
else
cd $ZERODAYPATH
$HOWMUCH >> $LOGFILE
fi
#Дописываем в лог разделитель
echo "------------------------------------------------------------------" >> $LOGFILE

#Записываем время начала операции копирования
STARTTIME="$(date +%H:%M:%S)"

###########################################################################
## Запускаем бэкап
$RS $PARAM >> $LOGFILE 2>&1
###########################################################################

#Дописываем в лог разделитель
echo "
------------------------------------------------------------------
After backup:
" >> $LOGFILE
#Нужно записать в лог размер содержимого из /BACKUP/daily.0/AUP после бэкапа
#Проверяем осталась ли запись после бэкапа с прошлого раза, если да то удаляем
#Делаем du чтобы узнать размер и записываем в лог и файл
if [ -f $TMPFILE ]; then
rm $TMPFILE
fi
cd $ZERODAYPATH
$HOWMUCH >> $TMPFILE
cat $TMPFILE >> $LOGFILE

#Дописываем в лог разделитель
echo "------------------------------------------------------------------" >> $LOGFILE

#Записываем время начала и конца операции
ENDTIME="$(date +%H:%M:%S)"
sed -i '5a Start time: '$STARTTIME $LOGFILE
sed -i '6a End time: '$ENDTIME $LOGFILE

###Проверка на ошибки
##Если будет найдена ошибка в логе, переменная ERRORS будет изменена
##и в теме письма будет крупно написано ERRORS!!
if [ `cat $LOGFILE | grep 'ERROR:' | grep -cv grep` != "0" ]; then
        grep -i -e 's/no errors/ERRORS!!/' $LOGFILE
fi

#Отправка почты с помошью ssmtp
/usr/sbin/ssmtp -t < $LOGFILE

exit 0
" >> /etc/backuper_rsnapshot.bin
Сделаем файл исполняемым:
chmod +x /etc/backuper_rsnapshot.bin
Т.к. для отправки отчета используем ssmtp, установим ее:
apt-get install ssmtp
И настроим:
mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.BACK
echo "
###Тема для тестовых сообщений
Subject: test message
###Адрес почтового сервера
mailhub=smtp.myil.ru
###От кого будет посылаться сообщение
hostname=backuper@myil.ru
###Использовать шифрование STARTTLS
UseSTARTTLS=no
###метод авторизации
AuthMethod=LOGIN
###Логин
AuthUser=backuper
###Пароль
AuthPass=backuper_psw
###Разрешить изменить адрес отправителя (hostname)
FromLineOverride=YES
" >> /etc/ssmtp/ssmtp.conf
Теперь добавим соответствующую задачу в Cron. Напишите crontab -e, и добавьте следующую строку:
###Бэкап в 0 часов 5 минут каждые 2 дня
5 0 */2 * * /etc/backuper_rsnapshot.bin daily
Теперь, после выполнения скрипта, на почтовый адрес admin@myil.ru должно прийти примерно следующее письмо:
Hi all
Start time: 00:05:02
End time: 00:13:08

------------------------------------------------------------------
Before backup:

248G    Back_Folder1
22G    Back_Folder2
9.1G    Back_Folder3
4.4G    Back_Folder4
------------------------------------------------------------------
echo 21866 > /var/run/rsnapshot.pid mv /home/where_we_do_backup/daily.6/ /home/where_we_do_backup/daily.7/ mv /home/where_we_do_backup/daily.5/ /home/where_we_do_backup/daily.6/ mv /home/where_we_do_backup/daily.4/ /home/where_we_do_backup/daily.5/ mv /home/where_we_do_backup/daily.3/ /home/where_we_do_backup/daily.4/ mv /home/where_we_do_backup/daily.2/ /home/where_we_do_backup/daily.3/ mv /home/where_we_do_backup/daily.1/ /home/where_we_do_backup/daily.2/ /bin/cp -al /home/where_we_do_backup/daily.0 /home/where_we_do_backup/daily.1 /usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /AUP \
   /home/where_we_do_backup/daily.0/snapshots/ touch /home/where_we_do_backup/daily.0/ rm -f /var/run/rsnapshot.pid
------------------------------------------------------------------
After backup:

249G    Back_Folder1
23G    Back_Folder2
9.1G    Back_Folder3
4.5G    Back_Folder4
------------------------------------------------------------------ 

Комментариев нет:

Отправить комментарий