Как создавать резервные копии с помощью Rsnapshot на Linux
Rsnapshot - это бесплатная утилита с открытым исходным кодом, которая работает как оболочка для Rsync для выполнения инкрементных снимков локальных или удаленных систем через SSH. Жесткие ссылки используются для экономии места при резервном копировании неизмененных файлов, чтобы сохранить место и при этом отображать пользователю полные файловые системы. В этом руководстве мы узнаем, как установить и настроить Rsnapshot на некоторых из наиболее часто используемых дистрибутивов Linux.
В этом уроке вы узнаете:
- Как установить rsnapshot на некоторые из наиболее часто используемых дистрибутивов Linux
- Как настроить rsnapshots для резервного копирования локальных и удаленных машин через SSH
Установка
Будучи бесплатной утилитой с открытым исходным кодом, она доступна в официальных или доверенных сторонних репозиториях всех наиболее часто используемых дистрибутивов Linux. Чтобы установить утилиту на Fedora, например, все, что нам нужно сделать, это запустить наш любимый эмулятор терминала, и выполнить следующую команду:
sudo dnf install rsnapshot
Мы можем установить Rsnapshot на RHEL (Red Hat Enterprise Linux) и его клоны, используя ту же команду; Однако для этих дистрибутивов нам необходимо заранее добавить репозиторий EPEL в качестве источника программного обеспечения.
Для выполнения установки на Debian, Ubuntu и другие дистрибутивы на основе Debian мы используем менеджер пакетов apt
:
sudo apt install rsnapshot
Rsnapshot также доступен в репозитории Archlinux "extra". Мы можем установить его с помощью pacman
:
sudo pacman -S rsnapshot
После того, как мы установили Rsnapshot в наш любимый дистрибутив Linux, мы можем использовать его для создания инкрементальных резервных копий. Давайте разберемся, как это сделать.
Конфигурация Rsnapshot
Чтобы настроить rsnapshot, мы редактируем его конфигурационный файл: /etc/rsnapshot.conf
. Как указано в большом предупреждении в начале файла, между элементами должны использоваться только табуляции; Использование пробелов приведет к синтаксическим ошибкам:
#################################################
#
PLEASE BE AWARE OF THE FOLLOWING RULE: #
#
This file requires tabs between elements #
#
#################################################
Первая директива, которую мы хотим определить в файле, — это snapshot_root
. Как следует из названия, он используется для указания директории, в которой должны быть сохранены все снимки. В следующем примере мы используем каталог /snapshots
в качестве корня снимков:
All snapshots will be stored under this root directory.
#
snapshot_root /snapshots/
Если директория не существует, она автоматически создается при выполнении первого резервного копирования, если не включена директива no_create_root
(значение по умолчанию обычно равно 0):
If no_create_root is enabled, rsnapshot will not automatically create the
snapshot_root directory. This is particularly useful if you are backing
up to removable media, such as a FireWire or USB drive.
#
#no_create_root 1
Указание Rsnapshot на путь rsync
Rsnapshot использует rsync для выполнения резервного копирования, поэтому мы должны указать местоположение двоичного файла rsync через директиву cmd_rsync
. По умолчанию он установлен в /usr/bin/rsync
и не требует никаких изменений, если только мы не установили rsync в каком-либо другом месте:
rsync must be enabled for anything to work. This is the only command that
must be enabled.
#
cmd_rsync /usr/bin/rsync
Создание политики хранения
Прежде чем приступить к созданию резервных копий, нам нужно установить политику хранения: нам нужно определить различные типы резервных копий и указать, сколько снимков определенного типа должно быть сохранено. Для определения политики хранения мы используем ключевое слово retain,
за которым следует имя «типа» резервной копии (имя совершенно произвольно) и целое число, указывающее, сколько резервных копий этого типа должно быть сохранено. Вот конфигурация по умолчанию в системе Ubuntu:
#########################################
BACKUP LEVELS / INTERVALS #
Must be unique and in ascending order #
e.g. alpha, beta, gamma, etc. #
#########################################
retain alpha 6
retain beta 7
retain gamma 4
По умолчанию в качестве идентификаторов используются "alpha", "beta" и "gamma", однако эти имена на самом деле не являются показательными. Мы можем захотеть использовать более дружелюбные и содержательные, например:
retain daily 6
retain weekly 7
retain monthly 4
Опять же, помните, что имена совершенно произвольны, и Rsnapshot не знает, что они означают. Мы указываем тип резервной копии при вызове rsnapshot: все, что он знает, это сколько резервных копий определенного типа он должен сохранить.
Указание резервных копий
Чтобы указать, какие файлы и директории должны быть включены в снимки, мы используем директиву backup
и передаем путь, который мы хотим включить, и хост, на котором он находится. Вот типичная конфигурация, которая включает в себя каталоги /home/
, /etc/
и /usr/local/
на localhost как часть резервных копий:
backup /home/ localhost/
backup /etc/ localhost/
backup /usr/local/ localhost/
Исключение и включение файлов из резервных копий
Как и при прямом использовании rsync, мы можем захотеть исключить или явно включить определенные файлы из наших резервных копий. Для определения шаблонов включения и исключения при использовании rsnapshot мы используем директивы include
и exclude
и указываем по одному шаблону в каждой строке:
exclude <exclude-pattern>
Аналогично, чтобы указать шаблон include, мы напишем:
include <include-pattern>
В качестве альтернативной стратегии мы можем написать шаблоны включения и исключения в выделенных файлах, а затем передать путь к этим файлам в виде значений директив include_file
и exclude_file
:
include_file /path/to/include/file
exclude_file /path/to/exclude/file
Проверка конфигурации Rsnapshot
После того, как мы изменили файл конфигурации Rsnapshot в соответствии с нашими потребностями, мы можем захотеть проверить синтаксически корректность нашей конфигурации. Мы можем сделать это с помощью команды configtest
:
sudo rsnapshot configtest
Если все идет как положено, команда должна вернуть следующее сообщение:
Syntax OK
Еще раз обратите внимание, что в файле конфигурации rsnapshot следует использовать только вкладки. Пробелы не допускаются: их использование будет расценено как синтаксическая ошибка.
Тестирование и создание нашей первой резервной копии
Чтобы заставить Rsnapshot выводить команду, которую он будет выполнять при выполнении резервного копирования, не выполняя его на самом деле, мы можем использовать опцию -t
, как в примере ниже:
sudo rsnapshot -t daily
Команда должна вернуть вывод, аналогичный приведенному ниже:
echo 6080 > /var/run/rsnapshot.pid
mkdir -m 0755 -p /snapshots/daily.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/home/ /snapshots/daily.0/localhost/
mkdir -m 0755 -p /snapshots/daily.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
/snapshots/daily.0/localhost/
mkdir -m 0755 -p /snapshots/daily.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local/ /snapshots/daily.0/localhost/
touch /snapshots/daily.0/
Чтобы создать нашу первую резервную копию, мы просто опускаем опцию -t
, поэтому, чтобы создать нашу первую ежедневную резервную копию, мы должны выполнить:
sudo rsnapshot daily
Как только резервное копирование будет завершено, в корне снимков будет создана директория, связанная с нашим первым ежедневным резервным копированием:
/snapshots/
└── daily.0
└── localhost
├── etc
├── home
└── usr
Давайте теперь посмотрим, что произойдет, если мы создадим нашу вторую ежедневную резервную копию:
sudo rsnapshot -t daily
Команда возвращает следующие выходные данные:
bin/cp -al /snapshots/daily.0 /snapshots/daily.1
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/home/ /snapshots/daily.0/localhost/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
/snapshots/daily.0/localhost/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local/ /snapshots/daily.0/localhost/
touch /snapshots/daily.0/
Как вы можете видеть, сначала резервная копия каталога daily.0
будет скопирована как daily.1
, если запустить cp
с опциями -a
и -l
: первый необходим для сохранения всех прав доступа и владельцев файлов, в то время как второй обеспечивает жесткую привязку файлов, а не копирование, чтобы сохранить место. Новая резервная копия будет использовать исходный каталог daily.0
в качестве цели, поэтому она всегда будет содержать самый последний снимок.
Создание резервной копии удаленной машины
Мы можем использовать Rsnapshot для выполнения инкрементального резервного копирования удаленных машин через SSH, реализуя стратегию резервного копирования "pull": вместо того, чтобы клиенты отправляли файлы на сервер резервного копирования, сервер подключается к клиентам и выполняет резервное копирование, "извлекая" файлы из них.
Первое, что нам нужно сделать, чтобы сделать резервную копию удаленной машины, это убедиться, что директива cmd_ssh
существует и не комментируется в файле конфигурации rsnapshot. Значением директивы является путь к исполняемому файлу клиента ssh, который обычно устанавливается как /usr/bin/ssh
:
cmd_ssh /usr/bin/ssh
Теперь предположим, что мы хотим сделать резервную копию содержимого каталога /etc
удаленной машины с IP-адресом 192.168.122.49, войдя в систему как пользователь "ubuntu". Вот что мы напишем в конфигурационном файле rsnapshot:
backup ubuntu@192.168.122.49:/etc client0
Где "client0" - это просто идентификатор машины (это может быть что угодно). Чтобы резервное копирование прошло успешно, на целевом сервере должен быть установлен и запущен работающий SSH-сервер, а открытый ключ, который мы хотим использовать для подключения, уже должен быть авторизован.
Выводы
Rsnapshot - это бесплатная утилита с открытым исходным кодом, которая работает как оболочка вокруг Rsync для выполнения инкрементного резервного копирования. В этом руководстве мы узнали, как установить и настроить rsnapshot на некоторых из наиболее часто используемых дистрибутивов Linux. Мы рассмотрели, как указать каталоги, которые мы хотим резервировать на локальных и удаленных машинах, как установить политику хранения и указать, где следует сохранять снимки.