Определение простыми словами
rsync сравнивает содержимое исходного и целевого каталогов, вычисляет разницу и передаёт только изменившиеся блоки данных. Если файл уже существует на приёмнике и совпадает по контрольной сумме, его пропускают. Подход экономит время и трафик: повторная синхронизация терабайтного хранилища, в котором поменялась пара мегабайт, занимает секунды, а не часы.
Утилита работает в трёх режимах: локально между каталогами на одной машине, через SSH на удалённый сервер и через собственный демон rsyncd на порту 873. Поверх SSH данные защищены шифрованием канала, поверх демона — нет, поэтому rsyncd используют внутри доверенных сетей или внутри VPN. Подробнее о туннелировании — в статье о SSH.
rsync поддерживает фильтры по маске, исключения, симлинки, права доступа, ACL, расширенные атрибуты и hard-links. Последняя возможность — основа классической схемы инкрементальных бэкапов: новые папки занимают место только под изменения, повторяющиеся файлы делят inode с предыдущим снимком. Эта же логика лежит в основе backup-стратегий time-machine.
Сравнение
| Параметр | rsync | scp | FTP |
|---|---|---|---|
| Передача только изменений | да | нет | нет |
| Сжатие на лету | да (-z) | да (-C) | нет |
| Шифрование | через SSH | встроено | в FTPS/SFTP |
| Возобновление прерванной передачи | да (—partial) | нет | частично |
| Сохранение прав и владельцев | да (-a) | частично | зависит от сервера |
| Скорость на больших объёмах | высокая | средняя | низкая |
Кейсы использования
- Ежедневные бэкапы домашних каталогов с продакшен-сервера на резервное хранилище.
- Миграция сайта между хостингами без простоя: rsync копирует файлы, затем переключается DNS.
- Зеркалирование репозиториев пакетов и публичных архивов на CDN-узлы.
- Синхронизация локальной разработческой среды с удалённым стейджингом.
- Обновление статичных сайтов из git-репозитория на боевой сервер.
Когда rsync не оптимален:
- Передача одного крупного файла без предыдущих копий — выигрыша от дельты нет, проще scp.
- Двусторонняя синхронизация с разрешением конфликтов — нужен Unison или Syncthing.
- Очень большое количество мелких файлов на медленном диске — узким местом становится stat() каждого объекта.
Технические детали
Базовые команды для типовых задач:
# Полная синхронизация каталога на удалённый сервер через SSH
rsync -avz --progress /var/www/site/ user@server.ru:/var/www/site/
# Бэкап с удалением файлов, которых уже нет в источнике
rsync -avz --delete /home/user/ /mnt/backup/user/
# Инкрементальный бэкап с hard-links на предыдущий снимок
rsync -avz --link-dest=/backup/2026-05-10 /data/ /backup/2026-05-11/
# Синхронизация через нестандартный порт SSH
rsync -avz -e "ssh -p 2222" /local/ user@host:/remote/
# Исключить временные файлы и кэш
rsync -avz --exclude='*.tmp' --exclude='cache/' /src/ /dst/
# Dry-run: показать что будет скопировано без реального копирования
rsync -avzn --delete /src/ /dst/
Для регулярных задач rsync запускают через cron или systemd-timer. На VPS-серверах утилита уже установлена в большинстве шаблонов Ubuntu и Debian.
🔥 Где это применяется
Частые вопросы
Зачем rsync, если есть scp?
scp всегда копирует файлы целиком и не умеет передавать только разницу. На повторных синхронизациях rsync в десятки раз быстрее и не нагружает канал.
Что делает ключ -a?
Это сокращение для -rlptgoD: рекурсивный обход, сохранение симлинков, прав, временных меток, владельцев, групп и спецфайлов. Стандартный набор для бэкапов.
Опасен ли --delete?
Да. Флаг удаляет на приёмнике файлы, которых нет в источнике. Перед запуском всегда делайте dry-run с -n, иначе можно потерять данные при опечатке в пути.
Можно ли синхронизировать с Windows?
Да, через WSL, Cygwin или порт cwRsync. Проще всего использовать rsync внутри WSL2 — это нативная Linux-сборка.