rsync

Rsync

Что такое rsync

Rsync (Remote Sync) — утилита командной строки для синхронизации и передачи файлов: между директориями на одном устройстве или между удалёнными хостами.

Ключевые особенности:

  • Дельта‑алгоритм (Differential Delta Algorithm): передаёт только изменённые блоки данных, а не весь файл целиком.
  • Экономия трафика: минимизирует объём передаваемых данных, особенно при работе с большими файлами и медленными каналами.
  • Режимы работы:
    • локальный (копирование между каталогами на одном устройстве);
    • удалённый (передача по SSH);
    • демон‑режим (передача по собственному протоколу rsync).
  • Сохранение атрибутов: права доступа, владельцы, группы, временные метки, символические ссылки.
  • Инкрементное резервное копирование: копирует только изменённые файлы.
  • Возобновление передачи: продолжает копирование с места обрыва при разрыве соединения.
  • Удаление устаревших файлов: может удалять в приёмнике файлы, которых уже нет в источнике.

Установка

В большинстве дистрибутивов Linux rsync предустановлен. Если нет — установите:

  • Ubuntu/Debian:sudo apt update sudo apt install rsync -y
  • CentOS/RHEL/Fedora:sudo dnf install rsync -y # или для старых версий: sudo yum install rsync -y

Проверьте установку:

rsync --version

Синтаксис

rsync [опции] <источник> <назначение>

Основные опции

ОпцияОписаниеПример
-a, --archiveРежим архивации: рекурсивно, сохраняет права, владельцев, ссылки и т. д.rsync -a /src/ /dest/
-v, --verboseПодробный вывод (что копируется, прогресс)rsync -av /src/ /dest/
-z, --compressСжимает данные при передаче (полезно для медленных сетей)rsync -avz /src/ user@host:/dest/
-h, --human-readableПоказывает размеры в удобном формате (КБ, МБ, ГБ)rsync -avh /src/ /dest/
--progressОтображает прогресс копирования для каждого файлаrsync -av --progress /src/ /dest/
-u, --updateПропускает файлы, которые новее в приёмникеrsync -avu /src/ /dest/
--deleteУдаляет в приёмнике файлы, отсутствующие в источникеrsync -av --delete /src/ /dest/
--exclude=<шаблон>Исключает файлы/папки по шаблонуrsync -av --exclude="*.tmp" /src/ /dest/
--bwlimit=<Кбит/с>Ограничивает скорость передачиrsync -av --bwlimit=8000 /src/ /dest/
--backupСоздаёт резервные копии изменённых файловrsync -av --backup /src/ /dest/
--backup-dir=<путь>Указывает папку для резервных копийrsync -av --backup --backup-dir=/backup/old/ /src/ /dest/

Примеры использования

1. Локальная синхронизация

Копирование каталога с сохранением структуры и прав:

rsync -av /home/user/docs/ /home/user/backup/docs/

Синхронизация с удалением файлов, которых нет в источнике:

rsync -av --delete /source/folder/ /destination/folder/

2. Удаленная синхронизация через SSH

Отправка данных на сервер:

rsync -av -e ssh /local/folder/ user@server:/remote/folder/

Загрузка данных с сервера:

rsync -av -e ssh user@server:/remote/folder/ /local/folder/

Передача на нестандартный порт SSH:

rsync -av -e "ssh -p 2222" /local/folder/ user@server:/remote/folder/

3. Продвинутые сценарии

Исключение временных файлов и кэша:

rsync -av --exclude="*.tmp" --exclude="cache/" /src/ /dest/

Ограничение скорости до 80 Мбит/с (80 000 Кбит/с):

rsync -av --bwlimit=80000 /src/ /dest/

Отображение прогресса и сжатие:

rsync -avzh --progress /src/ user@server:/dest/

Возобновление прерванной передачи:

rsync -av --partial /src/ /dest/

Инкрементное резервное копирование (старые версии сохраняются в /backup/old/):

rsync -av --backup --backup-dir=/backup/old/ /src/ /dest/

Безопасное удаление после проверки (удаляет только после полной синхронизации):

rsync -av --delete-delay /src/ /dest/

Использование списка файлов для синхронизации:

rsync -av --files-from=list.txt /src/ /dest/

list.txt — относительные пути файлов, по одному на строку)


Советы по безопасности

Используйте SSH‑ключи вместо паролей для удалённой синхронизации.

Ограничьте доступ к rsync‑демону через hosts allow в /etc/rsyncd.conf.

Перед массовым удалением (--delete) запустите с --dry-run, чтобы увидеть, что будет удалено:

rsync -av --dry-run --delete /src/ /dest/