Rsnapshot и Borgbаckup: две программы инкрементального резервного копирования

Данная статья рассчитана на технических специалистов. В статье будет рассказано о двух утилитах для организации инкрементального резервного копирования Rsnapshot и Borgbackup.
Эта информация пылится в архиве — вдруг устарела.

Данная статья рассчитана на технических специалистов. В статье будет рассказано о двух утилитах для организации инкрементального резервного копирования Rsnapshot и Borgbackup.

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

Borgbackup (кратко: Borg) это дедуплицирующая программа для резервного копирования. Опционально доступны сжатие и шифрование данных. Благодаря дедупликации резервное копирование происходит очень быстро.

Важное преимущество Rsnapshot на Borgbackup в том, что он потребляет мало ресурсов (как CPU так и RAM) и фактически базируется на инструментах операционной системы: утилита rsync, команда копирования жестких ссылок. Это позволяет использовать Rsnapshot даже на ограниченных в ресурсах встроенных системах. Например, на маршрутизаторах.

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

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

Еще одно отличие в том, что с помощью Rsnapshot можно копировать файлы с удаленных серверов на сервер, где установлен Rsnapshot.

Крайне желательно, чтобы при этом на удаленном сервере была установлена утилита rsync, это позволит существенно ускорить инкрементальное копирование, так как будут скопированы только измененные файлы. С Borg это будет существенно медленнее, так как пока это можно сделать только примонтировав удаленную файловую систему.

Как Rsnapshot, так и Borg можно использовать для локального резервного копирования, добавив в cron.

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

Таблица сравнения Rsnapshot и Borgbackup

Установка Rsnapshot на встроенную ОС.

Установка Rsnapshot на большинство современных BSD и GNU/Linux дистрибутивах тривиальна, так как бинарные пакеты Rsnapshot есть для всех распространенных дистрибутивов.

Однако установка Rsnapshot на встроенные системы (например на маршрутизатор) может быть интересна, так как не столь широко используется.

Ниже приведена инструкция по установке Rsnapshot на маршрутизатор под управлением свободно распространяемой операционной системы OpenWrt (https://openwrt.org).

Важно

Помните, что в состав резервного копирования обычно входят базы данных, в которых содержатся все пароли пользователей и иная информация! Также система с Rsnapshot будет иметь доступ к серверам для скачивания файлов.

Поэтому очень важно обеспечить должную защиту и регулярное обновлению ПО на системе, на которой будет установлен Rsnapshot!

Некоторые рекомендации для этого

  • Установите поддержку HTTPS протокола для доступа в админпанель маршрутизатора $ opkg install luci-ssl
    Разрешите доступ только из локальной сети или конкретным IP адресам.
  • Вход po ssh протоколу по ключу и паролю, а не только по паролю.
  • Также рекомендуется использовать менеджер паролей для генерации и хранения паролей доступа.

К сожалению, пакет rsnapshot в проектном репозитории OpenWrt устарел, и вместо него удобно воспользоваться сторонним репозиторием Entware.

  • Создайте папку для установки Entware $ mkdir /opt
    Перейдите в созданную папку $ cd /opt
  • Скачайте и запустите скрипт установки для нужной вам архитектуры (в моем случае MIPS – архитектура моего роутера).
  • $ wget – O – http://bin.entware.net/mipssf-k3.4/installer/generic.sh | sh Запустите скрипт установки пакета rsnapshot:
  • $ /opt/bin/opkg install rsnapshot

Если установка прошла успешно, то должен быть создан файл с конфигурацией:

/opt/etc/rsnapshot.conf

Вам необходимо его настроить под свои нужды.

Установить:

  • snapshot_root – корневую папку для размещения резервных копий.

Далее настройте то, что вам надо резервировать описанием команды backup:

Пример:

  • backup <пользователь>@<адрес сервера>:/<путь до сохраняемой папки>/./папка/ <папка сохранения>

Также если у вас установлен не классический ssh сервер, а dropbear, то вам потребуется создать алиас, так как rsnapshot не умеет работать с dropbear.

Для этого создайте файл в папке opt

  • # /opt/bin/drop_ssh:

Добавьте следующее содержание:

  • #!/bin/ash
    /usr/bin/ssh -i /root/.ssh/id_rsa «$@»

Добавьте в файл конфигурации rsnapshot /opt/etc/rsnapshot.conf ссылку на алиас:

  • cmd_ssh /opt/bin/drop_ssh

После чего можно запустить rsnapshot командой:

  • $ /opt/rsnapshot alpha

Если ошибок не будет, то можно добавить задачу в cron.

Для поддержки USB накопителей потребуется установить дополнительные пакеты. Их уже можно устанавливать и из основного репозитория проекта OpenWrt:

  • $ opkg install usbutils kmod-usb-storage kmod-fs-ext4 block-mount

Установка и использование BorgBackup

Установка BorgBackup тривиальна и описана на странице проекта.

Следует отметить, что если устанавливаете из репозитория, то стоит проверить, насколько актуальна установленная версия. В старых версиях может отсутствовать важный для вас функционал.

Для начала использования BorgBackup нужно инициализировать репозиторий и выбрать, какой метод шифрования вам нужен (если нужен).

Пример:

  • $ borg init —encryption=repokey-blake2 ./backup_repo_name

После того как репозиторий создан, можно добавлять в него файлы и папки командой create

Пример:

  • $ borg create —list —compression auto,zlib ./backup_repo_name::{название для архива} {список для бэкапа} —exclude {‘папки для исключения’}

Дальнейшие добавления новых инкрементов будут практически моментальными.