Открыть сервис

Rsync

Rsync (от англ. remote synchronization) — это утилита для эффективной синхронизации файлов и каталогов в операционных системах семейства Unix, а также в среде Windows (через порты или подсистемы). Разработана Эндрю Триджеллом в 1996 году. Отличается алгоритмом дельта-кодирования, позволяющим передавать только изменённые части файлов, что минимизирует объём передаваемых данных.

История

Исходный код rsync был создан Эндрю Триджеллом (Andrew Tridgell) и Полом Макаскиллом (Paul Mackerras) в 1996 году. Первая версия вышла 19 июня 1996 года. Триджелл разработал алгоритм дельта-кодирования, который позволял вычислять различия между файлами на удалённом и локальном компьютерах без предварительного копирования всего файла. Этот алгоритм лёг в основу протокола rsync.

В 1998 году проект перешёл под эгиду сообщества разработчиков свободного программного обеспечения. Начиная с версии 2.5.7 (2002 год) rsync стал поддерживать шифрование передачи данных через SSH. В 2007 году вышла версия 3.0.0, которая добавила поддержку инкрементального копирования, улучшенную обработку символических ссылок и работу с разреженными файлами.

На 2024 год rsync остаётся стандартным инструментом для синхронизации данных в Unix-подобных системах, встроен в большинство дистрибутивов Linux и macOS.

Принцип работы

Алгоритм дельта-кодирования

Основная особенность rsync — алгоритм «дельта-кодирования» (rolling checksum). При синхронизации файла на удалённом сервере утилита разбивает файл на блоки фиксированного размера (обычно 512 байт или 4 КБ) и вычисляет для каждого блока контрольную сумму (MD5 или SHA-256). Затем эти контрольные суммы сравниваются с контрольными суммами блоков локального файла. Если блоки совпадают, они не передаются; если различаются, передаётся только изменённый блок.

Режимы работы

Rsync может работать в двух основных режимах:

  1. Локальный режим — копирование файлов между каталогами на одном компьютере (аналог cp с опциями).
  2. Удалённый режимсинхронизация через SSH, RSH или собственный протокол rsync (демон rsync). При использовании SSH данные шифруются.

Собственный протокол

Rsync может работать как клиент-серверное приложение. Серверная часть (демон rsync) запускается на порту 873 (по умолчанию) и предоставляет доступ к определённым каталогам. Клиент подключается к серверу и запрашивает синхронизацию. Протокол rsync не шифрует данные, поэтому для безопасной передачи рекомендуется использовать туннелирование через SSH.

Основные возможности

Инкрементальное копирование

Rsync передаёт только изменённые части файлов, а не целые файлы. Это делает его эффективным для резервного копирования больших объёмов данных, когда изменения незначительны.

Поддержка символических ссылок, прав доступа и метаданных

Утилита может сохранять:

Исключение и включение файлов

С помощью опций --exclude и --include можно задавать шаблоны для исключения или включения определённых файлов и каталогов. Например, можно исключить временные файлы, каталоги .git или node_modules.

Сжатие данных

Опция -z (или --compress) включает сжатие данных перед передачей. Используется алгоритм zlib (gzip). Сжатие снижает объём передаваемых данных, но увеличивает нагрузку на процессор.

Ограничение пропускной способности

Опция --bwlimit позволяет ограничить скорость передачи данных (в КБ/с). Это полезно при работе в сетях с ограниченной пропускной способностью, чтобы не перегружать канал.

Работа с разреженными файлами

Опция --sparse позволяет эффективно обрабатывать разреженные файлы (файлы с большими пустыми областями, например, образы виртуальных машин). Rsync передаёт только ненулевые блоки, экономя место на диске.

Команды и синтаксис

Базовый синтаксис команды rsync:

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

Примеры:

  • Локальное копирование: rsync -av /home/user/docs/ /backup/docs/
  • Удалённое копирование через SSH: rsync -avz /home/user/docs/ user@server:/backup/docs/
  • Синхронизация с удалённым сервером (демон rsync): rsync -av rsync://server.ru/module/docs/ /local/docs/

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

ОпцияОписание
-aАрхивный режим (рекурсивное копирование, сохранение ссылок, прав, временных меток, владельцев)
-vПодробный вывод (verbose)
-zСжатие данных при передаче
-rРекурсивное копирование каталогов
-uОбновление (пропуск файлов, которые новее на стороне назначения)
--deleteУдаление файлов в назначении, которых нет в источнике
--excludeИсключение файлов по шаблону
--bwlimitОграничение скорости передачи
--dry-runТестовый запуск без реального копирования
-nТо же, что --dry-run

Применение

Резервное копирование

Rsync широко используется для создания резервных копий данных. Благодаря инкрементальному копированию, резервное копирование больших каталогов (например, домашних папок пользователей) выполняется быстро и экономит трафик. Пример скрипта для ежедневного бэкапа:

``bash rsync -avz --delete /home/user/ /mnt/backup/user/ ``

Репликация данных

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

Миграция данных

При переносе данных с одного сервера на другой rsync позволяет выполнить миграцию с минимальным простоем: сначала копируются все файлы, затем (после остановки сервисов) — только изменённые.

Синхронизация между устройствами

Пользователи Linux и macOS часто используют rsync для синхронизации файлов между домашним компьютером и ноутбуком, а также с удалёнными серверами.

Ограничения

Отсутствие шифрования в собственном протоколе

Демон rsync (порт 873) передаёт данные в открытом виде. Для безопасной передачи необходимо использовать SSH-туннель (опция -e ssh).

Проблемы с кодировками имён файлов

Rsync не обрабатывает корректно имена файлов в некоторых кодировках (например, UTF-8 с нормализацией Unicode). Это может привести к созданию дублирующихся файлов при синхронизации между системами с разными настройками локали.

Производительность при большом количестве мелких файлов

При синхронизации каталогов с миллионами мелких файлов (например, кэш браузера) rsync тратит много времени на сканирование и сравнение контрольных сумм. В таких случаях может быть эффективнее использовать tar или rdiff-backup.

Отсутствие поддержки дедупликации на уровне блоков

Rsync не выполняет дедупликацию данных на уровне блоков (в отличие от систем резервного копирования, таких как Borg или ZFS). Если в разных файлах содержатся одинаковые блоки, они будут переданы повторно.

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

  • rdiff-backup — утилита, использующая алгоритм rsync для инкрементального резервного копирования с возможностью хранения истории изменений.
  • Unison — инструмент для двусторонней синхронизации файлов, поддерживающий разрешение конфликтов.
  • BorgBackup — система резервного копирования с дедупликацией и сжатием, более эффективная для больших объёмов данных.
  • ZFS send/receive — встроенный механизм репликации в файловой системе ZFS, позволяющий передавать снимки состояния (snapshots).

Интересные факты

  • Название «rsync» происходит от «remote sync» (удалённая синхронизация).
  • Алгоритм дельта-кодирования, разработанный Триджеллом, был опубликован в 1998 году в статье «The rsync algorithm» (Andrew Tridgell, Paul Mackerras).
  • Rsync используется в ядре Linux для синхронизации исходных кодов между репозиториями.
  • В 2005 году вышла реализация rsync для Windows — cwRsync (на базе Cygwin). Позднее появились нативные порты, такие как Rsync для Windows (MSYS2).

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →