// Engineering Log
Протоколы передачи файлов: Часть 7 — Rsync
Опубликовано 22.09.2026
// Быстрый маршрут
Эта статья относится к теме Серверы и инфраструктура.
Rsync — утилита для копирования и синхронизации файлов, стандартный инструмент администраторов Linux и Unix. Её главная особенность — дельта-передача: если файл уже есть на приёмной стороне, rsync передаёт только изменившиеся части, а не файл целиком. Для резервных копий и зеркал это экономит время и трафик в разы.
Как работает дельта-передача
Приёмная сторона делит свою копию файла на блоки и отправляет контрольные суммы блоков. Отправляющая сторона ищет совпадающие блоки в новой версии файла и передаёт только данные, которых на приёмной стороне нет, плюс инструкции, как собрать файл из старых блоков. Для файлов, которых на приёмной стороне ещё нет, rsync передаёт их полностью. По умолчанию изменённые файлы определяются по размеру и времени изменения; флаг -c заставляет сравнивать контрольные суммы, что медленнее, но надёжнее.
Основные флаги
rsync -a --delete --partial --dry-run -v /srv/www/ backup@192.0.2.20:/backup/www/-a(archive) — рекурсивное копирование с сохранением прав, владельцев, времени изменения и символических ссылок;--delete— удалять на приёмной стороне файлы, которых больше нет в источнике (делает копию точным зеркалом);-z— сжимать данные при передаче (полезно на медленных каналах, бесполезно для уже сжатых архивов и видео);--partial— не удалять недокачанный файл при обрыве, чтобы продолжить передачу с места остановки;--dry-run(-n) — показать, что будет сделано, ничего не меняя;-v— подробный вывод.
Важная деталь: косая черта в конце пути источника. /srv/www/ копирует содержимое каталога, а /srv/www — сам каталог внутрь приёмного. Ошибка в одном символе вместе с --delete может удалить не те файлы, поэтому новую команду всегда сначала запускайте с --dry-run.
Через SSH
Если в пути указан удалённый сервер (user@host:/path), rsync запускается на нём через SSH: данные шифруются, а для входа используются обычные SSH-ключи. Чтобы задать порт или ключ, используйте -e:
rsync -a -e "ssh -p 2222 -i ~/.ssh/backup_key" /srv/data/ backup@192.0.2.20:/backup/data/Для автоматического резервного копирования заведите на приёмном сервере отдельного пользователя с доступом только к каталогу копий и отдельным ключом.
Резервные копии с историей: –link-dest
Простое зеркало с --delete не защищает от ошибок: удалённый или испорченный файл через несколько минут исчезнет и из копии. Флаг --link-dest позволяет хранить ежедневные снимки почти без затрат места: неизменившиеся файлы в новом снимке становятся жёсткими ссылками на файлы предыдущего.
today=$(date +%F)
rsync -a --delete --link-dest=/backup/latest /srv/data/ /backup/$today/
ln -sfn /backup/$today /backup/latestКаждый каталог /backup/ГГГГ-ММ-ДД выглядит как полная копия, но место занимают только изменённые файлы. Старые снимки удаляются обычным rm -rf, не затрагивая остальные.
Rsync-демон и порт 873
Кроме работы через SSH, rsync может работать как отдельная служба (rsync --daemon), слушающая TCP-порт 873. Этот режим используют зеркала дистрибутивов для раздачи пакетов. Протокол демона не шифрует данные, а сам демон — привлекательная цель для атак. Открывать порт 873 в интернет для резервного копирования не нужно: используйте SSH или ограничьте доступ к демону внутренней сетью и межсетевым экраном.
Уязвимости и обновления
В январе 2025 года вышел rsync 3.4.0, в котором закрыты шесть уязвимостей: переполнение буфера при разборе контрольных сумм (CVE-2024-12084), утечка содержимого стека (CVE-2024-12085), возможность для сервера прочитать произвольные файлы клиента (CVE-2024-12086), запись файлов за пределами каталога назначения через символические ссылки (CVE-2024-12087), обход --safe-links (CVE-2024-12088) и гонка при обработке символических ссылок (CVE-2024-12747). Часть из них позволяла выполнить код на сервере с запущенным демоном. На сентябрь 2026 года актуальная версия — 3.5.1 (21 сентября 2026 года). Проверьте версию командой rsync --version и обновите пакет, если она ниже 3.4.0.
Типичные ошибки
- Косая черта в пути — копируется не то, что ожидалось; с
--deleteэто приводит к потере данных. - Зеркало вместо резервной копии —
--deleteбез истории снимков переносит ошибки и удаления в копию. - Копия, которую никто не проверял — периодически восстанавливайте несколько файлов и сверяйте содержимое.
- Открытый rsync-демон — порт 873 в интернете без ограничений доступа.
- Права и владельцы — при копировании не от root владельцы файлов на приёмной стороне теряются; для полной копии системы запускайте rsync с правами root на обеих сторонах.
// Похожая задача
Если у вас похожая ситуация
Эта статья относится к одной из рабочих тем. Можно продолжить чтение по теме, перейти на главную, чтобы понять, чем я занимаюсь, или сразу открыть услуги.
Тема статьи
Серверы и инфраструктура
VPS, Linux, веб-стек, миграции, хостинг, базы данных и базовая эксплуатация.
Часто с этим приходят
- Перенести сайт или сервис на новый сервер
- Настроить Linux, Nginx, базу данных и бэкапы
- Разобраться, почему всё работает нестабильно
// Следующий шаг
Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.
Открыть услуги// Contact
Нужна помощь?
Свяжись со мной и я помогу решить проблему
Написать в TelegramОтвечаю в течение рабочего дня (03:00–13:00 GMT)
Или оставьте заявку здесь:
// Related