opened image

rsnapshot на Rocky Linux: практичный инкрементный бэкап

Что делает rsnapshot и зачем он нужен

rsnapshot - это утилита, которая строит резервные копии на базе rsync и хранит их в виде обычных каталогов. Главное преимущество - экономия места за счет hard links: неизмененные файлы не копируются заново, а переиспользуются.

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

 

 

Что подготовить до настройки

 

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

Если планируете бэкап по сети, нужен доступ по SSH и заранее настроенные ключи, чтобы rsnapshot работал без ручного ввода пароля.

 

 

Установка через EPEL и базовые пакеты

 

На Rocky Linux rsnapshot удобно ставить из репозитория EPEL.

sudo dnf install epel-release -y
sudo dnf install rsnapshot openssh-server rsync -y

Скриншот из консоли: установка EPEL и пакетов rsnapshot, rsync, openssh-server с выводом dnf.

Проверка, что утилита установилась и доступна:

rsnapshot --version
rsync --version | head -n 1

 

 

Подготовка хранилища для бэкапов и фиксированная точка монтирования

 

Если бэкап складывается на отдельный диск или внешний накопитель, важно монтировать его всегда в один и тот же путь. Самый понятный вариант для сервера - использовать /mnt/backup.

Создайте каталог монтирования и папку для хранения снимков:

sudo mkdir -p /mnt/backup
sudo mkdir -p /mnt/backup/storage

Смонтируйте устройство и проверьте, что оно реально смонтировано:

sudo mount /dev/sda1 /mnt/backup
mount | grep /mnt/backup

Скриншот из консоли: команда mount | grep /mnt/backup, где видно устройство и тип файловой системы.

Практический совет: на боевом сервере лучше автоматизировать монтирование через /etc/fstab или systemd mount unit. Это защищает от ситуации, когда диск не смонтирован, а бэкап внезапно уходит в пустой каталог на системном диске.

 

 

Настройка /etc/rsnapshot.conf и важная мелочь про TAB

 

Откройте конфиг:

sudo vi /etc/rsnapshot.conf

Если вам удобнее nano и он установлен, можно так:

sudo nano /etc/rsnapshot.conf

Самая частая ошибка новичков здесь - пробелы. В конфигурации rsnapshot между элементами должны быть TAB, а не пробелы. Один пробел может сломать весь конфиг и вы будете час искать причину.

Перед изменениями сделайте копию:

sudo cp /etc/rsnapshot.conf /etc/rsnapshot.conf.bak

Скриншот из консоли: открытый /etc/rsnapshot.conf, где видно строку snapshot_root и секцию retain.

 

 

Настройка путей, запрет работы без смонтированного диска и логирование

 

В конфиге найдите snapshot_root и укажите каталог на смонтированном хранилище:

snapshot_root	/mnt/backup/storage/

Дальше включите защиту от записи в несуществующий snapshot_root. Для этого активируйте no_create_root, чтобы rsnapshot не создавал корневую папку, если диск не смонтирован:

no_create_root	1

Включите cmd_cp. Это нужно для внутренних операций копирования при ротации:

cmd_cp	/usr/bin/cp

Если вы планируете удаленные бэкапы по SSH, сразу включите cmd_ssh:

cmd_ssh	/usr/bin/ssh

Включите logfile, чтобы у вас был понятный след выполнения:

logfile	/var/log/rsnapshot

После этого создайте файл лога и дайте ему права, если нужно:

sudo touch /var/log/rsnapshot
sudo chmod 640 /var/log/rsnapshot

 

 

Ротация снимков и почему в Rocky часто встречаются alpha beta gamma delta

 

В некоторых конфигурациях rsnapshot интервалы называются alpha, beta, gamma, delta. Это не магия, а просто имена уровней ротации. В практическом варианте для новичка достаточно одного ежедневного уровня, который часто называется beta.

Пример простого ежедневного хранения на неделю:

#retain	alpha	6
retain	beta	7
#retain	gamma	4
#retain	delta	3

Смысл такой: beta.0 - самый свежий снимок, beta.1 - вчерашний, и так далее.

 

 

Выбор директорий для бэкапа на локальной машине

 

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

backup	/etc/	localhost/
backup	/home/	localhost/
backup	/usr/local/	localhost/

Профессиональная ремарка: не пытайтесь бэкапить системные псевдофайловые системы вроде /proc, /sys, /run. Это не данные, а представление состояния ядра.

 

 

Проверка конфигурации перед первым запуском

 

Проверьте синтаксис:

sudo rsnapshot configtest

Ожидаемый результат - Syntax OK.

Скриншот из консоли: вывод rsnapshot configtest с строкой Syntax OK.

 

Если вы хотите явно указать конфиг, чтобы не было сомнений, используйте -c:

sudo rsnapshot -c /etc/rsnapshot.conf configtest

 

 

Тестовый прогон и первый реальный бэкап

 

Сначала прогон в тестовом режиме, чтобы увидеть, какие команды будут выполнены:

sudo rsnapshot -c /etc/rsnapshot.conf -t beta

После теста запускаем реальный бэкап:

sudo rsnapshot -c /etc/rsnapshot.conf beta

Проверяем, что появились каталоги снимков:

sudo ls -la /mnt/backup/storage
sudo ls -la /mnt/backup/storage/beta.0

Скриншот из консоли: вывод ls -la /mnt/backup/storage, где видно beta.0 и структуру localhost.

 

 

Автоматический запуск по расписанию через cron

 

Самый простой и прозрачный способ - добавить задачу в crontab root.

sudo crontab -e

Пример ежедневного запуска в 23:00:

00 23 * * * /usr/bin/rsnapshot -c /etc/rsnapshot.conf beta

Скриншот из консоли: открытый crontab с добавленной строкой запуска rsnapshot.

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

 

 

Удаленные бэкапы по SSH и ключи без пароля

 

Если вы делаете бэкап нескольких серверов на один бэкап-узел, удобнее держать отдельные конфиги на каждую машину. Суть одна и та же, меняются только backup строки и имя логов.

Проверьте наличие ключей:

ls -al ~/.ssh

Если ключей нет, создайте:

ssh-keygen -t ed25519 -a 64

Передайте ключ на удаленный сервер:

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@web.example.com

Проверка, что вход без пароля работает:

ssh root@web.example.com 'hostname; whoami'

Дальше создайте отдельный конфиг под сервер, чтобы не смешивать логи и lockfile:

sudo cp /etc/rsnapshot.conf /etc/rsnapshot_web.conf
sudo vi /etc/rsnapshot_web.conf

Внутри измените logfile и lockfile:

logfile	/var/log/rsnapshot_web.log
lockfile	/var/run/rsnapshot_web.pid

И добавьте удаленные пути:

backup	root@web.example.com:/etc/	web.example.com/
backup	root@web.example.com:/var/www/	web.example.com/
backup	root@web.example.com:/usr/local/	web.example.com/
backup	root@web.example.com:/home/	web.example.com/

Скриншот из консоли: успешный ssh без пароля и пример строки backup с root@host:/path.

 

 

Контроль статуса и быстрый просмотр проблем

 

Если бэкап не запускается, почти всегда виновато одно из трех: диск не смонтирован, в конфиге появились пробелы вместо TAB, или нет доступа по SSH.

Минимальный набор проверок:

mount | grep /mnt/backup
sudo rsnapshot -c /etc/rsnapshot.conf configtest
sudo tail -n 80 /var/log/rsnapshot

Если бэкап запускается через cron, дополнительно полезно посмотреть системные журналы cron.

 

 

Восстановление файлов

 

Восстановление - это обычное копирование из нужного снимка.

Пример: вернуть файл из вчерашнего бэкапа (обычно beta.1):

sudo cp -a /mnt/backup/storage/beta.1/localhost/home/user/notes.txt /home/user/notes.txt

Если нужно восстановить каталог целиком, копируйте каталог и сохраняйте атрибуты через -a.

 

 

Что обычно ломают новички и как не наступить на это

 

  • Делают бэкап на тот же диск, где живут данные, и считают это защитой.
  • Забывают про TAB в конфиге и получают загадочные ошибки.
  • Ставят cron до того, как сделали тестовый прогон -t.
  • Никогда не проверяют восстановление, пока не наступает реальная авария.

 

 

Итог

 

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