Перепробовав решения под Windows, как бесплатные, так и платный Acronis Backup and Recovery, купленный на эти цели за "дорого для такой глючной программы", и уже было отчаявшись в поисках - решил попробовать бесплатные решения на Linux.
Из-за своей простоты, качества и скорости - выбор был сделан в пользу rdiff-backup.
Итак посмотрим, как сделать полноценный сервер резервирования данных на основе Rdiff (как обычно на Debian 8.0)
1)Установка
Т.к. Rdiff - идет в стандартных репозиториях, то тут ничего сложного нет:
apt-get -q -y install rdiff-backupВсе, программа готова к работе, вот так вот просто.
2) Синтаксис
Как и со всеми Linux-way дистрибутивами, работа с rdiff-backup очень и очень простая.
Для того чтобы сделать копию нужного каталога достаточно набрать:
rdiff-backup /data_path /destination_pathПосле чего в папке destination_path будет создана инкрементная копия data_path. Если после данного копирования вы измените состав или содержимое файлов в data_path и заново выполните копирование - скопируются только измененные файлы.
Чтобы посмотреть все доступные инкрементные данные поданной папке достаточно набрать:
rdiff-backup -l /destination_pathВывод данной команды будет примерно вот такой:
Found 5 increments: increments.2014-07-14T21:51:05+06:00.dir Sat Jul 14 21:51:05 2014 increments.2014-07-15T21:51:03+06:00.dir Sun Jul 15 21:51:03 2014 increments.2014-07-15T22:02:30+06:00.dir Sun Jul 15 22:02:30 2014 increments.2014-07-16T21:51:08+06:00.dir Mon Jul 16 21:51:08 2014 increments.2014-07-19T21:51:08+06:00.dir Thu Jul 19 21:51:08 2014 Current mirror: Sat Aug 25 01:25:01 2014Здесь мы видим 5 слепков данной дериктории, датированные 14-19 июля. Это значит, что в данные дни были выполнены какие-то изменения в data_path.
3) Восстановление данных
Чтобы восстановить данные за какой-то определенный день необходимо набрать:
rdiff-backup -r 2014-07-19T21:51:08+06:00 /destination_path/some_file_or_dir /local_dirРазберем команду:
2014-07-19T21:51:08+06:00 - я взял из предыдущего вывода (последний инкремент). Программа поддерживает не только такое представление, чтобы восстановить данные 5-ти дневной давности можно набрать 5D, 2-х недельной 2W и так далее.
/destination_path/some_file_or_dir - можно указать конкретный файл из сохраненных данных, либо дирикторию полностью.
/local_dir - здесь нужно указать в какую директорию выполнить восстановление данных.
4) Диагностика
По умолчанию, после запуска, rdiff-backup ведет себя более чем скромно, и сообщает только если сталкивается с какими-либо ошибками при копировании.
Для повышения уровня дебага есть встроенная опция '-v' или '--verbosity', уровень можно регулировать от 0 до 9.
rdiff-backup -v 4 /tmp /backup Using rdiff-backup version 1.2.8 Unable to import win32security module. Windows ACLs not supported by filesystem at /tmp escape_dos_devices not required by filesystem at /tmp ----------------------------------------------------------------- Detected abilities for source (read only) file system: Access control lists On Extended attributes On Windows access control lists Off Case sensitivity On Escape DOS devices Off Escape trailing spaces Off Mac OS X style resource forks Off Mac OS X Finder information Off ----------------------------------------------------------------- Unable to import win32security module. Windows ACLs not supported by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0 escape_dos_devices not required by filesystem at backup/rdiff-backup-data/rdiff-backup.tmp.0 ----------------------------------------------------------------- Detected abilities for destination (read/write) file system: Ownership changing On Hard linking On fsync() directories On Directory inc permissions On High-bit permissions On Symlink permissions Off Extended filenames On Windows reserved filenames Off Access control lists On Extended attributes On Windows access control lists Off Case sensitivity On Escape DOS devices Off Escape trailing spaces Off Mac OS X style resource forks Off Mac OS X Finder information Off ----------------------------------------------------------------- Backup: must_escape_dos_devices = 0 Starting mirror /tmp to /backupПри повышении уровня - количество сообщений в консоль увеличивается
5) Удаление старых инкрементных копий
Для того, чтобы не хранить старые версии файлов, есть замечательный метод удаления инкрементных данных:
rdiff-backup --remove-older-than 40W /destination_pathОпция --remove-older-than 40W выполнит удаление всех слепков, старше чем 40 недель.
6) Автоматизация процесса резервирования
Так, ну а теперь напишем небольшой скрипт, который будет выполнять резервное копирование данных и отправлять отчет о проделанной работе. Создадим файл backuper.bin
touch /etc/backuper.binИ запишем в него следующий код:
#!/bin/sh ###!!! ВАШИ Настройки ЗДЕСЬ !!!### #Определим сегодняшнюю и вчерашнюю даты TODAY="$(date +%X.%Y.%m.%d)" YESTERDAY="$(date -d 'yesterday' +%Y.%m.%d)" #Ошибки (по умолчанию нет) ERRORS="no errors" #Получатели письма счастья ) MAILTO='user1@myil.ru,user2@myil.ru' MAILFROM='backuper@myil.ru' SUBJECTED='INCREMENT BACKUP report ('$ERRORS')' #Что копировать SAVE_DATA=/DATA_PATH #Куда копировать BACKUP_DATA=/BACKUP_PATH #лог-файл процесса инкрементного копирования LOGFILE=/tmp/backuplog #Расположение rdiff-backup RDIFF='/usr/bin/rdiff-backup' #Строка запуска инкрементного копирования (доп опции) EXT_STRING='--force --no-eas --exclude-symbolic-links --exclude-sockets --exclude-special-files --exclude-fifos --exclude-device-files --no-hard-links --print-statistics' EXT_STRING2='--force --no-hard-links --remove-older-than' #Уровень логов RDIFF LOG_LEVEL='-v 7' #Удалять файлы старше 40 недель EXPIRE='40W' #Чистим лог для начала cat /dev/null > $LOGFILE ##Записываем в начало лога данные, которые будут использованы при отправке письма echo "To:$MAILTO From:$MAILFROM Subject: $SUBJECTED Content-Type: text/plain; charset=UTF-8; format=flowed Hi all :D! " >> $LOGFILE #Дописываем в лог разделитель echo " ------------------------------------------------------------------ $TODAY INCREMENT BACKUP for yesterday files($YESTERDAY):" >> $LOGFILE #Записываем время начала операции копирования STARTTIME="$(date +%H:%M:%S)" #Запускаем процесс инкрементного копирования: $RDIFF $EXT_STRING $LOG_LEVEL $SAVE_DATA $BACKUP_DATA >> $LOGFILE 2>&1 ##Удаляем файлы старше чем EXPIRE #Дописываем в лог разделитель echo " ------------------------------------------------------------------ Removing old files (EXPIRE=$EXPIRE):" >> $LOGFILE #Запускаем удаление $RDIFF $EXT_STRING2 $EXPIRE $BACKUP_DATA >> $LOGFILE 2>&1 #Записываем время начала и конца операции ENDTIME="$(date +%H:%M:%S)" echo " ------------------------------------------------------------------ STARTTIME: $STARTTIME ENDTIME: $ENDTIME" >> $LOGFILE ##Проверка на ошибки #Если будет найдена ошибка в логе, переменная ERRORS будет изменена #и в теме письма будет крупно написано ERRORS!! if [ `cat $LOGFILE | grep 'Error' | grep -v 'Errors 0' | grep -cv grep` != "0" ]; then sed -i -e 's/$ERRORS/ERRORS!!/' $LOGFILE fi #Отправка почты с помошью ssmtp /usr/sbin/ssmtp -t < $LOGFILE exit 0Думаю не нужно объяснять, что необходимо самостоятельно заполнить поле "ВАШИ Настройки ЗДЕСЬ"
Как вы наверно заметили, в данном примере отправка почты происходит с помощью ssmtp, давайте его установим:
apt-get install ssmtpИ настроим:
mv /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.BACK echo " #Тема для тестовых сообщений Subject: Test message #Адрес почтового сервера mailhub=mail.myil.ru #От кого будет посылаться сообщение hostname=backuper@myil.ru #Использовать шифрование STARTTLS UseSTARTTLS=no #метод авторизации AuthMethod=LOGIN #Логин AuthUser=backuper@myil.ru #Пароль AuthPass=backuper_psw #Разрешить изменить адрес отправителя (hostname) FromLineOverride=YES " >> /etc/ssmtp/ssmtp.confВам самостоятельно нужно заполнить следующие поля:
mailhub - почтовый сервер на который будет выполнена отправка сообщения.
hostname - от кого будет сообщение.
UseSTARTTLS - использовать или нет шифрование STARTTLS.
AuthUser - имя пользователя на почтовом сервере.
AuthPass - пароль на почтовом сервере.
Осталось подкорректировать права запуска файла:
chmod +x /etc/backuper.binИ добавить задачу в Cron. Пишем # crontab -e, и добавляем в конец строку:
5 0 * * * /etc/backuper.binТаким образом, наш файл /etc/backuper.bin - будет запускаться каждый день в 00 часов 05 минут.
Комментариев нет:
Отправить комментарий