В данной статье разберем создание инкрементных резервных копий с помощью 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 ------------------------------------------------------------------
Комментариев нет:
Отправить комментарий