Что такое 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/