rsnapshot — open-source инструмент резервного копирования на базе rsync и жёстких ссылок (hardlinks). Создаёт серию «виртуально полных» снапшотов файловой системы: каждый выглядит как независимая полная копия, но физически хранит только изменённые с прошлого снапшота файлы. Написан на Perl, работает на Linux, macOS и BSD. Не требует специализированного ПО на целевом хосте — достаточно rsync и SSH.
Как работает rsnapshot
Механизм основан на двух принципах. rsync передаёт только изменённые файлы (по дате, размеру и хешу блоков). Hardlinks позволяют неизменённым файлам из нового снапшота ссылаться на те же inode, что и в предыдущем снапшоте: файл существует в десятках снапшотов, но физически хранится один раз.
Типичный конфиг /etc/rsnapshot.conf:
snapshot_root /mnt/backup/
retain hourly 6
retain daily 7
retain weekly 4
backup /var/www/ localhost/
backup root@server2:/etc/ server2/
При запуске rsnapshot daily: новая директория daily.0 создаётся через hardlinks из daily.1, затем rsync обновляет изменённые файлы в daily.0. В результате daily.0 — свежий снапшот, daily.6 — снапшот недельной давности. Каждая директория занимает столько места, сколько изменилось с предыдущего запуска — не полный объём данных.
Удалённые серверы подключаются по SSH без пароля (ключевая авторизация). На целевом хосте нужен только rsync и sshd — агентов и дополнительного ПО не требуется.
История
rsnapshot создан Натаном Рихтером (Nathan Richter) в 2004 году как улучшение более раннего скрипта rsync-backup Майкла Бейкера. Вдохновлён статьёй Майка Ломбарди «Easy Automated Snapshot-Style Backups with Linux and Rsync» (2004). Проект распространяется под лицензией GPL v2. В 2010-х rsnapshot стал стандартным решением для небольших серверных окружений до появления более функциональных альтернатив: BorgBackup (2015) и Restic (2014), добавивших блочную дедупликацию и встроенное шифрование.
Виды конфигураций
- Локальный бэкап — источник и назначение на одном сервере; простейший вариант для однодискового VPS
- Pull-бэкап удалённых хостов — rsnapshot на backup-сервере «тянет» данные с целевых серверов по SSH; один сервер обслуживает десятки хостов
- Бэкап нескольких хостов — один конфиг описывает много серверов, каждый в своей поддиректории snapshot_root
- Инкрементальный бэкап БД — через pre/post-скрипты:
mysqldumpперед запуском rsnapshot, rsnapshot копирует дамп вместе с файловой системой
На что обращать внимание
rsnapshot подходит для VPS-серверов с Nginx, Postfix и небольшими базами данных. Критичный момент конфигурации: разделитель полей в rsnapshot.conf — строго Tab, не пробелы. Ошибка «config check failed» — причина большинства проблем при первом запуске. Проверка конфига: rsnapshot configtest.
Ключевые ограничения: не работает с Windows-серверами; нет встроенного шифрования (критично для off-site хранения); hardlinks не работают между разными файловыми системами — snapshot_root должен быть на том же разделе. Для зашифрованного off-site бэкапа предпочтительны BorgBackup или Restic с поддержкой S3-совместимого хранилища.
rsnapshot vs современные альтернативы
| Инструмент | Дедупликация | Шифрование | Сложность | S3-поддержка |
|---|---|---|---|---|
| rsnapshot | Hardlinks (ФС-уровень) | Нет | Низкая | Нет |
| BorgBackup | Блочная (chunk-level) | AES-256 | Средняя | Через rclone |
| Restic | Блочная | AES-256-CTR | Средняя | Нативная |
| rsync + cron | Нет | Нет | Минимальная | Нет |