Что делает 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 - это спокойный, прозрачный и очень админский способ бэкапа. Он отлично подходит, когда нужна простота, контроль и возможность быстро достать файл из нужного дня.