Rsnapshot – резервное копирование

Автор: | 27.01.2016

Введение

Rsnapshot – полезная утилита для резервного копирования, написанная на Perl, которая использует Rsync. Rsnapshot позволяет пользователям создавать свои решения для резервного копирования.

Описание

Резервное копирование необходимо для возможности быстрого восстановления данных (документов, фотографий, баз данных, программ, настроек и т.д.). Всегда есть риск потерять данные. Сломался винчестер, случайно удалили нужные вам файлы или поработал вирус. Лучше всегда иметь резервную копию всех своих важных данных.
Как организовать резервное копирование?
Можно самому копировать все нужные файлы на другой диск или внешний накопитель,  на сетевое устройство. Можно воспользоваться облачными сервисами. Но часто мы забываем это делать регулярно и наступает момент, когда нужный нам файл испорчен или удален, а копии у нас нет, или копия слишком стара и в ней нет тех данных, что вы наработали. И тогда приходит четкое осознание того, что лучше этот процесс автоматизировать и пусть архивные копии делаются сами, в автоматическом режиме. И тут возникает вопрос, а как делать копии, ведь если просто копировать каждый день, или по несколько раз в день все данные, то это потребует много места, допустим ваш архив с документами и фотографиями занимает 100Гбт, то каждая последующая копия прибавить +100Гбт. Придется запастись емкими накопителями. Да и копирование таких объемов не за секунды происходит, что совсем не удобно. Поэтому лучше воспользоваться инкрементными копиями “снапшотами”. Инкрементное резервное копирование состоит из одной полной резервной копии, а затем создание дополнительных копий. Эти дополнительные резервные копии только изменившихся файлов, которые изменились с момента последнего резервного копирования.  Это гораздо более эффективный процесс. Одним из таких инструментов в  * NIX системах является rsnapshot.

Подготовка

Для начала вы должны определиться, с какой периодичностью делать резервные копии. Несколько раз в день, или раз в сутки, неделю, месяц? Что для вас предпочтительней, на сколько вам важны данные и как часто они меняются.
Так же следует подготовить место, куда будут производиться копирование резервных копий.

mkdir /mnt/backup – содаем директорию, в которую будут записываться “снапшоты”.

Установка

Установка rsnapshot довольно проста, просто выполните следующую команду от root пользователя:

  • В Debian,Ubuntu:
# apt-get install rsnapshot
  • На Fedora,CentOS:
# yum install rsnapshot

Настройка

По умолчанию создается файл /etc/rsnapshot.conf.default. Его необходимо скопировать в /etc/rsnapshot.conf. Чтобы иметь возможность вернуться к настройкам по умолчанию.
Открываем для редактирования rsnapshot.conf, я обычно пользуюсь редактором nano.

# nano /etc/rsnapshot.conf

Файл конфигурации очень хорошо прокомментирован, что облегчает настройку.

Важное примечание, нельзя использовать “пробелы” только “табуляция”  иначе будет ошибка.

## Все копии будут храниться в этом корневом каталоге (которую мы создали ранее)
snapshot_root   /mnt/backups/

Rsnapshot – позволяет делать несколько уровней резервных копий. Следует обратить внимание, что самый свежий бэкап в списке будет под нулевым номером, остальные бэкапы смещаются вниз на единицу и так по циклу.

##Интервалы создания резервных копий
## Не нужные интервалы можно за комментировать “#”
retain    hourly      6
retain    daily     7
retain    weekly     4
retain    monthly     12

Когда запуститься rsnapshot hourly, будет создана резервная копия в файловой системе, которая будет сохранена в <snapshot_root> /hourly.0/. Первая нулевая копия, самая тяжелая и продолжительная по времени.
Предыдущий hourly.0/ переименуется в hourly.1/. При следующем выполнении hourly.1/ переименуется в hourly.2/ и т.д. по циклу. Так в конце концов то, что было <snapshot_root> /hourly.0, станет <snapshot_root> /hourly.23/ и при следующем запуске /hourly.23/ будет удален. Когда запуститься rsnapshot daily, создастся директория <snapshot_root> /daily.0/ в которую перенесутся резервные данные от <snapshot_root> /hourly.23/, если они существует.
Точно так же, когда запуститься rsnapshot weekly, это создаст <snapshot_root> /weekly.0/ от <snapshot_root> /daily.6/ из резервной копии, если она существует.
Точно так же это правило действует и на следующие уровни, которые описаны в файле конфигурации (monthly и т.д.)

Используя такую конфигурацию мы получим 12 ежемесячных резервных копий, 4 еженедельных, 7 ежедневных и 6 ежечасные и при этом занимаемое место под бэкапы будет минимальным. Т.к. не происходит копирование всех данных, а создаются символьные ссылки.
Если вам не требуется использовать ежечасные копии, следует просто закомментировать в конфигурационном файле retain  hourly и запустить этот же конфиг.

Примечание: Если какие-то интервалы не определены в cron, для избежания ошибок при работе Rsnapshot нужно удалить из него соответствующие строки.

В этом разделе мы задаем rsnapshot пути к данным, с которых нам надо делать резервные копии и куда мы будем их складывать.
Задаем параметр backup, а затем указываем полный путь к данным на локальном ресурсе, так же возможно указать и сетевой ресурс к удаленной машине.
Третий столбец это относительный путь, если вы хотите делать резервные копии, в корне snapshot_root.

###############################
### BACKUP POINTS / SCRIPTS ###
###############################
backup      /home/                              localhost/
backup      /etc/                                   localhost/
backup      /usr/local/                        localhost/
#backup    /var/log/rsnapshot        localhost/
#backup    /etc/passwd                     localhost/

Первый столбец backup определяет точку резервного копирования.
Второй столбец /home/ – путь к данным, которые нам надо сохранять. Обязательно должен заканчиваться /
Третий столбец localhost/ –  относительный путь, куда будет производиться копирование в нашем случае это в директории /mnt/backups/.

В этом примере, /home/ это полный путь к каталогу, с которого мы хотим делать резервные копии, и localhost/ это каталог внутри snapshot_root, куда мы собираемся сохранять их.
Использование localhost в качестве каталога назначения является всего лишь условностью. Вы также можете выбрать, использование полного доменного имени сервера, а не локального хоста.
Если вы принимаете резервные копии из нескольких сетевых машин на одном выделенном сервере резервного копирования, для этого лучше использовать различные имена хостов, как каталоги, чтобы отслеживать, какие файлы с какого-сервера.

Чтобы использовать возможности удаленного резервного копирования rsnapshot надо просто указать удаленный компьютер в качестве источника резервного копирования.
/etc/rsnapshot.conf

###############################
### BACKUP POINTS / SCRIPTS ###
###############################
backup      root@salf-net.ru:/etc/     salf-net.ru/

Это в принципе тоже самое, что и пример выше, но вы должны помнить о некоторых дополнительных параметрах:
SSH-демон должен быть запущен на удаленном хосте salf-net.ru.
Вы должны иметь доступ к учетной записи, заданной на удаленной машины, в этом случае root пользователь на salf-net.ru.
У вас должна быть включена авторизация по ключу для пользователя root на salf-net.ru, без пароля. Если вы хотите выполнять резервное копирование от имени другого пользователя, вы можете указать другого пользователя вместо root для источника (т.е. user@domain.com).
Примечание: Обратите внимание, что разрешение на вход в систему на удаленном хосте без пароля, это очень не безопасно.

Дополнительные скрипты

Существует дополнительные backup_script параметр. С помощью этого параметра во втором столбце указывается полный путь к исполняемому скрипту резервного копирования, а третий столбец -это локальный путь, куда будет производиться копирование.

/etc/rsnapshot.conf

backup_script      /usr/local/bin/backup_mysql.sh       localhost/mysql/

В этом примере rsnapshot будет выполняться скрипт /usr/local/bin/backup_mysql.sh в каталог Temp, затем синхронизирует результаты в localhost/MySQL в/ директорию под snapshot_root.
Сценарий резервного копирования должен выгружать содержимое базы, в текущий рабочий каталог. В скрипте не должна быть задана определенная директория выгрузки . Причина этого заключается в том, что rsnapshot создает Temp директорию, делает в нее выгрузки , запускает скрипт резервного копирования, а затем синхронизирует содержимое каталога Temp в относительный путь, указанный в третьей колонке.
Типовой скрипт резервного копирования будет один, который архивирует содержимое базы данных. Он может выглядеть следующим образом:

backup_mysql.sh

#!/bin/sh
/usr/bin/mysqldump -uroot mydatabase > mydatabase.sql
/bin/chmod 644 mydatabase.sql

Примечание: убедитесь, что бы путь назначения был задан уникальным. Backup script будет полностью перезаписать все файлы в пути назначения, так что если вы указали один и тот же путь назначения дважды, у вас останется только последняя копия сделанной скриптом. К счастью rsnapshot выдаст ошибку, при проверке конфигурационного файла.

Примечание: пожалуйста, помните, что эти скрипты резервного копирования будет выполняться от имени пользователя, запустившего rsnapshot. В нашем Этом примере это root пользователь.
Убедитесь, что ваш backup script принадлежат пользователю root и не доступен другим пользователям. Т.к. любой пользователь, у которого есть права на запись в backup script может дописать в них команды, которые будут выполняться от имени пользователя root. Что может привести, к очень плачевной ситуации.

Так же следует заметить, что можно добавить маску включений/исключений, чтобы не копировать не нужный мусор.

## Список включения/исключений по маске.
exclude *.tmp
exclude ~*
exclude /home/*/.cache
include *.jpg
##Список включений/исключений.
include_file /path/to/include/file #исключено
exclude_file /path/to/exclude/file  #включено

Тестирование конфигурации

Когда вы внесли ваши изменения, вы должны убедиться в правильности параметров и сделать тестирование конфигурации. Для этого запустите rsnapshot с аргументом: configtest

# rsnapshot configtest

Если нет ошибок, выдаст сообщение Syntax ОК. Если обнаружиться проблема, будет указана ошибка. Проверьте, что в конфигурационном файле вы использовали табуляцию, а не пробелы и т. д.

Последний шаг, чтобы проверить свои настройки, запустите rsnapshot в тестовом режиме. Это выведет подробный список действий, которые он будет делать, на самом деле не выполняя их.
Чтобы сделать пробный пуск, выполните эту команду:

# rsnapshot -t hourly

Произойдет имитация резервного копирования hourly.

Первый запуск

# rsnapshot hourly

Будет произведено первое резервное копирование.

Автоматизация с Cron

Если в ручном режиме все прошло нормально, надо добавить задание, для выполнения резервного копирования, в автоматическом режиме.
Для этого отредактируем /etc/cron.d/rsnapshot

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# To activate this cron file you have to uncomment the lines below.
# Feel free to adapt it to your needs.00 1 ***        root    /usr/bin/rsnapshot hourly #Кадлый час начиная с 01ч00м
00 3 ***        root    /usr/bin/rsnapshot daily # ежедневная копия начиная с 03ч00м
00 5 **7        root    /usr/bin/rsnapshot weekly #Еженедельная начиная с 05ч00м в Воскресенье
00 12 1**    root    /usr/bin/rsnapshot monthly #Ежемесячно в 12ч.00м 1 числа

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

Дополнительные команды rsnapshot

rsnapshot du – просмотреть занимаемое место резервными копиями
rsnapshot diff – daily.0 daily.1 – сравнение изменения между резервными копиями

Visits: 17

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии