rsnapshot — обёртка над rsync, которая делает инкрементальные резервные копии с жёсткими ссылками. Каждый новый снимок выглядит как полная копия, но занимает место только за изменённые файлы. Это удобно для домашнего сервера, небольшого офиса и виртуальных машин: история за недели и месяцы без огромного архива. Разберём установку, конфигурацию, ротацию и восстановление.

Как работают жёсткие ссылки

При первом запуске rsnapshot копирует файлы в каталог снимка. При следующем — сравнивает состояние с предыдущим и создаёт жёсткие ссылки на неизменённые файлы, а изменённые копирует заново. Жёсткая ссылка — это второе имя того же файла на диске, поэтому место не удваивается.

Важное ограничение: все снимки должны находиться на одной файловой системе. Если разнести каталоги по разным разделам, жёсткие ссылки не сработают и копии начнут занимать полный объём. Также нельзя редактировать файлы внутри снимков — это изменит данные во всех ссылках.

Установка

Пакет есть в репозиториях Debian, Ubuntu, Fedora и EPEL для RHEL-совместимых систем. Вместе с ним ставится rsync. Для удалённых копий понадобится SSH-ключ без пароля и настроенный доступ.

sudo apt update
sudo apt install -y rsnapshot rsync
rsnapshot -V
man rsnapshot | head -40

Конфигурация

Основной файл — /etc/rsnapshot.conf. Сначала задайте корень снимков и интервал хранения. Затем перечислите, что копировать. Синтаксис чувствителен к табуляции: между параметром и значением должен быть символ табуляции, иначе утилита выдаст ошибку.

config_version	1.2
snapshot_root	/srv/backup/
cmd_rsync	/usr/bin/rsync
cmd_ssh	/usr/bin/ssh
ssh_args	-i /root/.ssh/backup_key
link_dest	1
sync_first	1
use_lazy_deletes	1
logfile	/var/log/rsnapshot.log
lockfile	/var/run/rsnapshot.pid

Директивы retain задают глубину истории. Имена hourly, daily, weekly, monthly — стандартные уровни; можно использовать свои, но они должны совпадать с аргументом при запуске.

retain	hourly	6
retain	daily	7
retain	weekly	4
retain	monthly	12

Теперь точки копирования. Локальный путь указывают от корня, удалённый — через SSH. Второй аргумент задаёт относительный путь внутри снимка.

backup	/etc/	localhost/etc/
backup	/home/	localhost/home/
backup	/var/www/	localhost/www/
backup	root@fileserver:/data/	fileserver/data/

Для удалённого сервера заранее проверьте вход по ключу и отсутствие запроса пароля:

ssh -i /root/.ssh/backup_key root@fileserver "test -d /data && echo ok"

Исключения и подготовка данных

Не копируйте псевдофайловые системы и кэши: /proc, /sys, /dev, /run, а также каталоги контейнеров и временные файлы. Исключения задаются директивой exclude, а шаблоны можно вынести в отдельный файл.

exclude	/proc/*
exclude	/sys/*
exclude	/dev/*
exclude	/var/cache/apt/*
exclude	*.tmp
exclude	/home/*/.cache/

Базы данных нельзя копировать на работающем сервере простым rsync: файлы могут быть в несогласованном состоянии. Сначала сделайте логический дамп в отдельный каталог, затем копируйте его обычной директивой backup. Дамп удобно готовить отдельным скриптом перед запуском rsnapshot.

pg_dump -U app app > /var/lib/dump/app.sql
# в конфиге rsnapshot:
backup	/var/lib/dump/	localhost/dump/

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

Первый запуск и ротация

Сначала выполните пробный прогон: rsnapshot -t показывает команды без изменений. Затем запустите sync, если включён sync_first, и создайте первый снимок. При sync_first схема работы меняется: сначала обновляется промежуточный каталог .sync, потом из него строятся снимки.

rsnapshot -t hourly
rsnapshot sync
rsnapshot hourly

При ротации rsnapshot переименовывает каталоги: daily.0 становится daily.1, самый старый уровень удаляется. При sync_first в cron перед младшим интервалом добавляют отдельный sync, а остальные вызовы только ротируют каталоги.

0 */4 * * *  root  /usr/bin/rsnapshot sync && /usr/bin/rsnapshot hourly
30 2 * * *   root  /usr/bin/rsnapshot daily
0 3 * * 1    root  /usr/bin/rsnapshot weekly
0 4 1 * *    root  /usr/bin/rsnapshot monthly

В системах с systemd можно использовать таймеры. Они удобнее для логирования и не зависят от почтового агента, но требуют отдельного unit-файла и проверки через systemctl list-timers.

Проверка и восстановление

Смотрите журнал после каждого запуска и проверяйте код возврата. Ошибка rsync не всегда останавливает весь процесс, поэтому одного «тихого» крона недостаточно. Полезны команды diff и du: первая показывает изменения между снимками, вторая — занятое место.

rsnapshot diff daily.0 daily.1
rsnapshot du
tail -n 50 /var/log/rsnapshot.log

Восстановление сводится к копированию файлов из нужного снимка. Не перемещайте и не редактируйте файлы внутри архива: скопируйте их в отдельный каталог и только потом работайте.

rsync -aH /srv/backup/daily.0/localhost/etc/ /tmp/restore/etc/
diff -r /etc /tmp/restore/etc | head -30

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

Ограничения и типичные ошибки

  • Разные файловые системы. Жёсткие ссылки работают только в пределах одного раздела.
  • Изменение файлов в архиве. Ломает общую историю; архив должен быть только для чтения.
  • Копирование баз на ходу. Приводит к битым дампам; нужен предварительный dump.
  • Переполнение диска. Следите за местом и настройте оповещения.
  • Отсутствие проверки. Копия без теста восстановления не считается резервной.

Для шифрования архива используйте отдельный зашифрованный том или инструменты вроде restic и borg, если требования выше, чем даёт rsnapshot. Для защиты от шифровальщиков держите одну копию offline или на другом хосте.

Чек-лист

  • Корень снимков на отдельном диске с запасом места.
  • Табуляция в конфиге и проверка через rsnapshot -t.
  • Исключены /proc, /sys, /dev и кэши.
  • Базы данных выгружаются скриптом до копирования.
  • Настроены cron или systemd-таймеры и контроль кода возврата.
  • Проверено восстановление на тестовом стенде.

Итог

rsnapshot — простой и предсказуемый инструмент для файловых резервных копий. Он не заменяет систему управления бэкапами с дедупликацией и шифрованием, но отлично закрывает задачу «хранить историю версий без лишнего места». Главное — держать архив на одной файловой системе, готовить дампы баз заранее и регулярно проверять восстановление.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте