# rsync

> Утилита синхронизации файлов и каталогов локально и по сети, передающая только изменившиеся части файлов благодаря алгоритму скользящих контрольных сумм; стандартный инструмент резервного копирования и развёртывания.

Источник: https://llmdocs.ru/wiki/rsync/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Авторы**: Эндрю Триджелл, Пол Маккеррас
- **Первый выпуск**: 1996
- **Язык**: C
- **Лицензия**: GNU GPL v3
- **Транспорт**: SSH или собственный демон rsyncd (порт 873)
- **Ключевая идея**: передача только различий (дельта-кодирование)
- **Альтернативы**: rclone (облачные хранилища), restic и borg (резервные копии)
**rsync** — утилита для синхронизации файлов и каталогов: между папками на одной машине или между компьютерами по сети, обычно через [SSH](https://llmdocs.ru/wiki/ssh.md). Её главное достоинство — передаются только изменения: если в гигабайтном файле поменялось несколько килобайт, по сети уйдут лишь они. rsync сохраняет права, владельцев, время изменения и символические ссылки, умеет удалять на приёмнике файлы, исчезнувшие в источнике, и продолжать прерванную передачу.

rsync — стандартный инструмент резервного копирования, зеркалирования, переноса данных между серверами и простого развёртывания сайтов.

## История и алгоритм

rsync создали австралийские программисты Эндрю Триджелл (известный также как автор Samba) и Пол Маккеррас; первая версия вышла в 1996 году.[1] Алгоритм описан в техническом отчёте и диссертации Триджелла.[3][4]

Задача: синхронизировать файл, когда у получателя уже есть его старая версия, а пересылать файл целиком дорого.

1. Получатель делит свою версию на блоки и отправляет для каждого две контрольные суммы — быструю «скользящую» и надёжную.
2. Отправитель проходит по своему файлу окном размером в блок, сдвигаясь на один байт. Скользящая сумма пересчитывается за константное время при сдвиге, поэтому совпадения находятся даже при вставке данных в середину файла.
3. Совпавшие блоки отправитель заменяет ссылками «возьми свой блок № N», а передаёт только данные, которых у получателя нет.

Для решения, какие файлы вообще нужно проверять, rsync по умолчанию сравнивает размер и время изменения — это быстро.

## Основы

```bash
rsync -av src/ backup/                       # локально: архивный режим, подробный вывод
rsync -avz src/ user@server:/var/www/site/   # на сервер по SSH со сжатием
rsync -avz user@server:/var/log/app/ ./logs/ # с сервера
rsync -avP big.iso server:/data/             # прогресс и докачка прерванной передачи
rsync -av --delete src/ backup/              # точное зеркало: удалить лишнее в приёмнике
rsync -avn --delete src/ backup/             # -n (--dry-run): показать, что будет сделано
```

| Ключ | Смысл |
|---|---|
| `-a` | архивный режим: рекурсивно, с правами, владельцами, временем, ссылками |
| `-v` | подробный вывод |
| `-z` | сжатие при передаче |
| `-P` | прогресс и сохранение частично переданных файлов |
| `--delete` | удалять в приёмнике файлы, которых нет в источнике |
| `-n` | пробный запуск без изменений |
| `--exclude`, `--exclude-from` | исключить файлы по шаблону |
| `-e "ssh -p 2222"` | параметры SSH |
| `--bwlimit` | ограничение скорости |

Полный перечень — в руководстве rsync.[2]

## Косая черта в конце

Самая частая ловушка — косая черта в конце пути источника:

```bash
rsync -a photos  backup/    # создаст backup/photos/...
rsync -a photos/ backup/    # скопирует содержимое: backup/...
```

`src/` означает «содержимое каталога», `src` — «сам каталог». С ключом `--delete` ошибка в одном символе может стереть данные, поэтому сначала запускайте команду с `-n`.

## Резервные копии

С ключом `--link-dest` rsync создаёт снимки, в которых неизменившиеся файлы — жёсткие ссылки на предыдущий снимок (см. [Файловая система Unix (FHS)](https://llmdocs.ru/wiki/fhs.md)). Каждый снимок выглядит как полная копия, но занимает место только под изменения:

```bash
today=$(date +%F)
rsync -a --delete --link-dest=/backups/latest /home/ /backups/$today/
ln -sfn /backups/$today /backups/latest
```

Такую команду запускают по расписанию ([cron и таймеры systemd](https://llmdocs.ru/wiki/cron-systemd-timers.md)). Однако rsync — не полноценная система резервного копирования: у него нет шифрования хранилища, дедупликации между файлами и проверки целостности снимков. Для этого существуют restic и BorgBackup (см. [Бэкапы: правило 3-2-1](https://llmdocs.ru/wiki/backup-3-2-1.md)).

## Безопасность: ограниченный доступ

Когда сервер с данными отправляет копии на сервер резервного хранения, ключ SSH для этого стоит ограничить. Скрипт **rrsync**, поставляемый с rsync, разрешает ключу только операции rsync внутри заданного каталога и может запретить чтение:[5]

```text
# ~/.ssh/authorized_keys на сервере хранения
command="rrsync -wo /backups/app",restrict ssh-ed25519 AAAA... backup@app
```

Режим `-wo` (только запись) означает, что даже при краже ключа злоумышленник не сможет ни прочитать старые копии, ни получить оболочку на сервере. Это пример [принципа наименьших привилегий](https://llmdocs.ru/wiki/least-privilege.md).

## Развёртывание

```bash
rsync -avz --delete --exclude ".git" --exclude "node_modules" build/ deploy@web:/var/www/site/
```

Для статических сайтов ([Статический сайт и генераторы (SSG)](https://llmdocs.ru/wiki/static-site-generators.md)) этого часто достаточно. Для приложений надёжнее атомарное переключение: загрузить в новый каталог и сменить символическую ссылку, чтобы пользователи не увидели полузагруженную версию.

## Альтернативы

- **scp и sftp** — простое копирование без дельта-передачи.
- **rclone** — «rsync для облаков»: синхронизация с S3, Google Drive и десятками других хранилищ.[6]
- **restic, BorgBackup** — резервное копирование с шифрованием, дедупликацией и снимками.
- **Syncthing** — непрерывная двусторонняя синхронизация между устройствами.

## См. также

- [SSH](https://llmdocs.ru/wiki/ssh.md)
- [Бэкапы: правило 3-2-1](https://llmdocs.ru/wiki/backup-3-2-1.md)
- [cron и таймеры systemd](https://llmdocs.ru/wiki/cron-systemd-timers.md)
- [Принцип наименьших привилегий](https://llmdocs.ru/wiki/least-privilege.md)
- [Файловая система Unix (FHS)](https://llmdocs.ru/wiki/fhs.md)

## Источники

1. [rsync — официальный сайт](https://rsync.samba.org/)
2. [rsync(1) — manual page](https://download.samba.org/pub/rsync/rsync.1)
3. [A. Tridgell, P. Mackerras — The rsync algorithm (technical report)](https://rsync.samba.org/tech_report/)
4. [A. Tridgell — Efficient Algorithms for Sorting and Synchronization (PhD thesis, 1999)](https://www.samba.org/~tridge/phd_thesis.pdf)
5. [rrsync(1) — restricted rsync](https://download.samba.org/pub/rsync/rrsync.1)
6. [rclone](https://rclone.org/)
