rsync: команда синхронизации файлов на Linux и macOS | Глоссарий FREEHOSTING

rsync

Remote Sync
rsync — rsync — утилита и сетевой протокол для синхронизации файлов между двумя каталогами. Передаёт только различия между источником и приёмником, что радикально сокращает объём трафика и время копирования. Создана в 1996 году, входит в стандартную поставку Unix-систем.

Определение простыми словами

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-сборка.