Rsync: бэкап каталога по SSH
Rsync: бэкап каталога по SSH
Классический способ переложить каталог на удалённую машину — rsync поверх SSH. Не нужно открывать дополнительных портов, трафик шифруется, а сам инструмент умеет докачивать изменения и сохранять метаданные. Одна команда — и бэкап готов.
Базовая команда rsync через SSH
Минимальный вызов для копирования локального каталога на удалённый хост:
Слеш в конце у source имеет значение: без него rsync создаст на удалённой стороне подпапку source/, с ним — скопирует содержимое напрямую в dest/.
Если SSH слушает нестандартный порт:
Для автоматизации в cron лучше указывать порт через -e, а не править /etc/ssh/ssh_config — так проще поддерживать разные хосты с разными портами.
Ключи архивации и синхронизации
-a (archive) — главный флаг. Он объединяет несколько опций в одну: рекурсивный обход, сохранение прав, владельцев, временных метаданных, симлинков и пустых каталогов.
| Флаг | Назначение |
|---|---|
-a | Архивный режим (рекурсия + метаданные) |
-v | Подробный вывод |
-z | Сжатие при передаче |
-P | --partial --progress — докачка и прогресс-бар |
--delete | Удалять файлы на приёмнике, отсутствующие на источнике |
-e ssh | Указать удалённую оболочку |
--bwlimit=KBPS | Ограничение полосы пропускания |
--delete — мощный инструмент. Если источник случайно очистился, на удалённой машине останется пусто. Проверяйте список перед применением.
Полный пример бэкапа с ограничением полосы и прогрессом:
Исключения файлов и каталогов
Для исключения конкретных путей используется --exclude. Паттерны применяются относительно источника:
Если исключений много, удобнее использовать файл-список:
--exclude проверяется по очереди. Более поздние правила могут перекрыть ранние, если пути пересекаются. Для точного контроля используйте --filter.
Dry-run перед запуском
Перед реальным запуском всегда прогоняйте с --dry-run (или -n). rsync покажет, что именно было бы скопировано/удалено, но не трогает файлы:
Сравните вывод с ожидаемым списком. Если всё совпадает — убираете -n и запускаете реальную синхронизацию.
Для cron-задачи с уведомлениями на почту:
Итого
rsync через SSH покрывает 90% задач бэкапа без дополнительных агентов на стороне приёмника. Ключевой порядок действий: сначала --dry-run, потом --exclude, потом --delete если нужна точная зеркализация. Остальное — настройка под конкретный хост и порт.