Как использовать rsync для инкрементального бэкапа и синхронизации файлов
В мире Linux утилита rsync уже много лет остаётся одним из самых удобных инструментов для резервного копирования и синхронизации данных. Её ценят системные администраторы, разработчики и DevOps-инженеры: rsync быстро копирует только изменившиеся файлы, умеет работать по сети через SSH и поддерживает множество опций для гибкой автоматизации.
Что такое rsync
rsync
— это консольная утилита для эффективной передачи файлов и каталогов. В отличие от обычного cp
или scp
, она использует алгоритм сравнения блоков (delta-transfer): пересылаются только те фрагменты файлов, которые изменились.
Это делает rsync особенно полезным для:
- Инкрементального бэкапа — каждый последующий запуск копирует только новые или изменённые данные.
- Зеркалирования каталогов — поддержание одинаковой структуры на двух серверах.
- Синхронизации через сеть — например, между рабочей станцией и удалённым сервером.
Установка
На большинстве дистрибутивов rsync уже предустановлен. Если нет:
Ubuntu/Debian:
sudo apt update
sudo apt install rsync
CentOS/RHEL:
sudo yum install rsync
Проверить версию:
rsync --version
Базовый синтаксис
Общий вид команды:
rsync [опции] источник назначение
Источник и назначение могут быть как локальными путями, так и удалёнными через SSH:
rsync [опции] user@remote:/path/to/source /local/backup/
Основные ключи
-a
— архивный режим: сохраняет права, владельцев, симлинки, рекурсивно копирует каталоги.-v
— подробный вывод (verbose).-z
— сжатие при передаче (полезно по медленным каналам).-P
— прогресс + возможность докачки при обрыве.--delete
— удалять файлы в приёмнике, которых нет в источнике (для полного зеркала).
Часто используется связка -avz
или -avzP
.
Пример локальной синхронизации
Копирование каталога /data
в /backup
:
rsync -avz /data/ /backup/
Обратите внимание на слэш в конце: /data/
означает «содержимое папки», без слэша — «папку целиком».
Синхронизация по сети (через SSH)
Rsync может использовать SSH без дополнительных настроек:
rsync -avzP -e ssh user@server:/var/www/ /local/www/
-e ssh
— явно указываем протокол.- Для автоматизации удобно настроить вход по SSH-ключу, чтобы не вводить пароль каждый раз.
Инкрементальный бэкап с жёсткими ссылками
Инкрементальный бэкап — это когда каждый «срез» хранит полную копию данных, но реально пересылаются и занимают место только изменённые файлы.
Rsync реализует это через опцию --link-dest
:
rsync -a --link-dest=/backups/daily.1/ /data/ /backups/daily.0/
Здесь:
/backups/daily.1/
— предыдущий бэкап, на который создаются жёсткие ссылки для неизменённых файлов./backups/daily.0/
— новый каталог для свежего бэкапа.
Результат — полный снапшот, а место занимают только дельты.
Так можно делать ежедневные копии и хранить их неделями без лишних трат дискового пространства.
Автоматизация через cron
Чтобы бэкап выполнялся регулярно, добавьте задание в crontab
:
0 2 * * * rsync -a --delete /data/ /backup/
Команда запустится каждый день в 2:00 ночи.
Полезные приёмы
- Исключения:
--exclude 'cache/'
— не копировать временные каталоги. - Логи:
--log-file=/var/log/rsync.log
— сохранять вывод в файл. - Тестовый прогон:
--dry-run
— показать, что будет скопировано, без реальных изменений.
Безопасность
- Используйте только защищённый канал SSH, особенно в публичных сетях.
- Настройте ключи и ограничьте доступ к пользователю, от имени которого запускается rsync.
- Для больших инфраструктур можно поднять rsync-сервер (rsync daemon), но он требует отдельной конфигурации и обычно не нужен для простого бэкапа.
Итоги
rsync
остаётся одним из самых мощных инструментов для резервного копирования и синхронизации в Linux. Благодаря инкрементальному копированию и поддержке SSH можно создавать надёжные и экономичные бэкап-системы без сложных решений.
Для маленьких проектов часто достаточно одной строки в cron, а для больших — rsync легко интегрируется в скрипты и системы автоматизации.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний