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