Rsnapshot
Rsnapshot
утилита для резервного копирования, написанная на языке Perl
и использующая Rsync
. Она упрощает создание периодических копий файловых систем. Для дедупликации данных Rsnapshot
использует жёсткие ссылки. Резервное копирование, необходимая задача системного администрирования, так как всегда есть риск потери данных.
Rsnapshot
позволяет делать несколько уровней копий:
- alpha
- beta
- gamma
Утилита производит ротацию резервных копий, удаляя устаревшие. По дефолтным настройкам, используется 6 alpha, 7 beta, 4 gamma копии.
Для фиксации резервной копии, ее нужно поместить на уровень alpha
. При первом запуске будет создан каталог alpha.0
. При втором запуске alpha.0
будет переименована в alpha.1
, а текущая копия будет снова сохранена в alpha.0
. Таким образом, в alpha.0
всегда будет находиться самая свежая копия. При последующих созданиях резервных копий они также будет переименовываться и накапливаться, пока их количество не достигнет шести, в этом случае копия alpha.5
будет перемещена на уровень beta
, а её место займёт alpha.4
.
Наглядно схему создания резервных копий можно увидеть на рисунке:
+---+---+---+---+---+---+---+
alpha-уровень | 0 | 1 | 2 | 3 | 4 | 5 | - |
+---+---+---+---+---+---+---+
|
---------------------
|
∇ -->
+---+---+---+---+---+---+---+---+
beta-уровень | 0 | 1 | 2 | 3 | 4 | 5 | 6 | - |
+---+---+---+---+---+---+---+---+
|
-------------------------
|
∇ -->
+---+---+---+---+---+
gamma-уровень | 0 | 1 | 2 | 3 | - |
+---+---+---+---+---+
Копия уровня beta
создаётся из самой старой копии уровня alpha
, gamma
создаётся из самой старой копии уровня beta
.
Если на момент выполнения копии beta
уровня alpha.5
ещё не существует, копия beta.0
сделана не будет. При этом ротация остальных копий beta
будет проведена. Поэтому не следует запускать следующие уровни чаще предыдущих.
Установка Rsnapshot
Установка довольно проста, нужно выполнить следующую команду от root пользователя:
Debian, Ubuntuapt install rsnapshot
Fedora, CentOSyum install rsnapshot
Настройка Rsnapshot
По умолчанию создается файл /etc/rsnapshot.conf
. Его необходимо скопировать в /etc/rsnapshot.conf.default
. Чтобы иметь возможность вернуться к настройкам по умолчанию:
cp /etc/rsnapshot.conf /etc/rsnapshot.conf.default
Все настройки создаются в конфиге, открываем для редактирования rsnapshot.conf
, я обычно пользуюсь редактором nano
:
nano /etc/rsnapshot.conf
Файл конфигурации очень хорошо прокомментирован, что облегчает настройку. Важное примечание, нельзя использовать пробелы только табуляция иначе будет ошибка.
Резервное копирование в пределах одной машины
Все копии будут храниться в этом корневом каталоге:
snapshot_root /.snapshots/
Утилита позволяет делать несколько уровней резервных копий. Следует обратить внимание, что самый свежий бэкап в списке будет под нулевым номером, остальные бэкапы смещаются вниз на единицу и так по циклу:
retain alpha 6
retain beta 7
retain gamma 4
#retain delta 3
В этом разделе мы задаем пути к данным, с которых нам надо делать резервные копии и куда мы будем их складывать:
backup /home/ localhost/
backup
определяет точку резервного копирования/home/
путь к данным, которые нам надо сохранять. Обязательно должен заканчиваться на/
localhost/
относительный путь, куда будет производиться копирование в нашем случае это в директории.snapshots
Резервное копирование для удалённого узла
Чтобы использовать возможности удаленного резервного копирования, надо просто указать удаленный компьютер в качестве источника резервного копирования:
backup root@hmarketing.ru:/etc/ hmarketing.ru/
Это в принципе тоже самое, что и пример выше, но вы должны помнить о некоторых дополнительных параметрах:
- SSH-демон должен быть запущен на удаленном хосте hmarketing.ru
- Вы должны иметь доступ к учетной записи, заданной на удаленной машине, в этом случае
root
пользователь наhmarketing.ru
- У вас должна быть включена авторизация по ключу для пользователя
root
наhmarketing.ru
, без пароля
Дополнительные скрипты для копирования баз данных
Существует дополнительные backup_script
параметр:
backup_script /root/backup_sql.sh localhost/mysql/
В этом примере будет выполняться скрипт /root/backup_sql.sh
в каталог Temp
, затем результаты синхронизируются в localhost/mysql/
директории snapshot_root
.
Сценарий резервного копирования должен выгружать содержимое базы, в текущий рабочий каталог. В скрипте не должна быть задана определенная директория выгрузки. Причина этого заключается в том, что rsnapshot
создает Temp
директорию, делает в нее выгрузки, запускает скрипт резервного копирования, затем синхронизирует содержимое каталога Temp
в относительный путь, указанный в третьей колонке.
Создаем в директории файл:
nano /root/backup_sql.sh
Типовой скрипт резервного копирования будет один, который архивирует содержимое базы данных:
/root/backup_sql.sh#!/bin/bash
# Имя пользователя базами данных
USER='root'
# Пароль пользователя базами данных
PASS='sbn!Om5G6AGX4WO)QE}Y'
# Название базы данных
DBNAME='sitemanager'
# Переменная с датой
DATA=`date +"%Y%m%d"`
mysqldump -u $USER -p$PASS $DBNAME > dump-$DATA.sql
Файл нужно сделать исполнительным:
chmod ugo+x /root/backup_sql.sh
Тестирование и запуск конфигурации
Когда вы внесли изменения в конфиг, вы должны убедиться в правильности параметров и сделать тестирование конфигурации:
rsnapshot configtest
Если нет ошибок, выдаст сообщение Syntax ОК
. Если обнаружиться проблема, будет указана ошибка.
Чтобы проверить свои настройки, запустите rsnapshot
в тестовом режиме. Это выведет подробный список действий, которые он будет делать, на самом деле не выполняя их:
rsnapshot -t alpha
Для первого боевого копирования, выполните:
rsnapshot alpha
Автоматизация с Cron
Если в ручном режиме все прошло нормально, надо добавить задание, для выполнения резервного копирования, в автоматическом режиме. Для этого добавляем задание в Cron:
* * * * * rsnapshot alpha
С этими настройками, резервная копия будет выполнятся на уровне alpha
каждую минуту.
Дополнительные команды
Просмотреть занимаемое место резервными копиями:
rsnapshot du