rsync (Remote Sync) — утилита синхронизации файлов и директорий с поддержкой инкрементальных передач. При использовании поверх SSH (rsync -avz -e ssh) данные шифруются. Delta-алгоритм (rdiff) вычисляет разницу на уровне блоков: при изменении 1 КБ в 1 ГБ файле передаётся только 1 КБ.
Как работает
Алгоритм rsync (Эндрю Трайджелл, 1996): получатель отправляет контрольные суммы блоков текущей версии файла → отправитель вычисляет какие блоки изменились → передаются только дельта-блоки. Это особенно эффективно для больших файлов с малыми изменениями (резервные копии баз данных, медиафайлы).
Основные флаги: -a (archive: рекурсивно, сохраняя права и временные метки), -v (verbose), -z (compress), --delete (удалить файлы у получателя, которых нет у отправителя), --exclude (исключить паттерн).
Типичная команда бэкапа: rsync -avz --delete /var/www/ user@backup-server:/backups/www/ — синхронизирует содержимое веб-директории на резервный сервер.
История
rsync создан Эндрю Трайджеллом (Andrew Tridgell) и Полом Маккерасом (Paul Mackerras) в 1996 году. Первоначально как часть диссертации Трайджелла в ANU. Версия 3.0 (2008) добавила инкрементальный обход директорий, ускорив работу с большими деревьями файлов. К 2024 году входит в стандартную поставку всех Linux-дистрибутивов.
Сценарии использования
- Бэкап сайта: ежесуточная синхронизация на удалённый сервер.
- Зеркало: синхронизация публичных репозиториев, CD-образов.
- Деплой: обновление файлов сайта с минимальным трафиком.
- Миграция: перенос данных между серверами с сохранением структуры.
Связь с хостингом
На VPS rsync over SSH — стандартный инструмент для ежесуточных бэкапов: rsync -avz /var/www /var/lib/mysql/backups user@backup-server:/backups/$(date +%Y-%m-%d)/. Запускается через systemd timer или cron. SFTP удобнее для интерактивной загрузки файлов, rsync — для автоматической синхронизации.
Ключевые отличия от похожих терминов
SCP — копирование через SSH без delta-алгоритма: передаёт файл целиком каждый раз. rsync передаёт только изменения. SFTP — интерактивный файловый менеджер по SSH, не оптимизирован для синхронизации. rsync + ssh — оптимальный выбор для автоматических бэкапов и деплоя.
Алгоритм delta-синхронизации
rsync передаёт только изменённые блоки файлов (rolling checksum). При первичной синхронизации — полная передача. При повторной — только дельта. Сжатие: -z. Прогресс: --progress. Без удаления старых файлов на приёмнике: без --delete.
Типичные сценарии
Деплой сайта: rsync -avz --exclude='.env' ./public/ user@server:/var/www/site/. Бэкап с hard links: rsync -avz --link-dest=/backups/prev /var/www/ /backups/current/. Синхронизация баз данных: дамп на источнике → rsync дампа → восстановление на цели.
rsync vs scp vs rclone
scp — простая копия без дельта-синхронизации. rsync — дельта-синхронизация для повторяемых операций. rclone — поддерживает 40+ провайдеров (S3, Google Drive, Dropbox), умеет шифрование. Для синхронизации больших директорий между серверами — rsync. Для облачного хранения — rclone.