Оригинальный автор(ы) | Эндрю Триджелл , Пол Маккеррас [1] |
---|---|
Разработчик(и) | Уэйн Дэвисон [2] |
Первоначальный выпуск | 19 июня 1996 г ( 1996-06-19 ) | [1]
Стабильный релиз | 3.4.1 [3] / 15 января 2025 г. ( 15 января 2025 г. ) |
Репозиторий |
|
Написано в | С |
Платформа | Кроссплатформенный |
Тип | Передача данных , дифференциальное резервное копирование |
Лицензия | 2007: GPL-3.0 или более поздняя версия [a] [4] [5] [6] 2007: только GPL-3.0 [b] 2007: только GPL-2.0 [c] 1996: GPL-2.0 или более поздняя версия [d] [7] |
Веб-сайт | rsync.samba.org |
rsync (удаленная синхронизация) — это утилита для передачи и синхронизации файлов между компьютером и накопителем, а также между сетевыми компьютерами путем сравнения времени модификации и размера файлов. [8] Она обычно встречается в операционных системах типа Unix и распространяется по лицензии GPL-3.0 или более поздней версии . [4] [5] [9] [10] [11] [12]
rsync написан на языке C как однопоточное приложение . [13] Алгоритм rsync представляет собой тип дельта-кодирования и используется для минимизации использования сети. Zstandard , LZ4 или Zlib могут использоваться для дополнительного сжатия данных , [8] а SSH или stunnel могут использоваться для обеспечения безопасности.
rsync обычно используется для синхронизации файлов и каталогов между двумя различными системами. Например, если команда rsync local-file user@remote-host:remote-file
запущена, rsync будет использовать SSH для подключения к user
. remote-host
[ 14] После подключения он вызовет rsync удаленного хоста, а затем две программы определят, какие части локального файла необходимо передать, чтобы удаленный файл соответствовал локальному. Одним из применений rsync является синхронизация репозиториев программного обеспечения на зеркальных сайтах, используемых системами управления пакетами . [15] [16]
rsync также может работать в режиме демона (rsyncd), обслуживая и получая файлы по собственному протоколу rsync (используя rsync://
синтаксис).
Эндрю Триджелл и Пол Маккеррас написали оригинальный rsync, который был впервые анонсирован 19 июня 1996 года. [1] По функциям и вызову он похож на rdist ( rdist -c
), созданный Ральфом Кэмпбеллом в 1983 году и выпущенный как часть 4.3BSD . [17] Триджелл обсуждает дизайн, реализацию и производительность rsync в главах с 3 по 5 своей докторской диссертации 1999 года. [18] По состоянию на 2023 год [ссылка]он поддерживается Уэйном Дэвисоном. [2]
Благодаря своей гибкости, скорости и возможности написания сценариев rsync
стала стандартной утилитой Linux, входящей во все популярные дистрибутивы Linux. [ требуется ссылка ] Она была портирована на Windows (через Cygwin , Grsync или SFU [19] ), FreeBSD , [20] NetBSD , [21] OpenBSD , [22] и macOS .
Подобно cp
, rcp
и scp
, rsync
требует указания источника и назначения, из которых по крайней мере один должен быть локальным. [23]
Общий синтаксис:
rsync [ ПАРАМЕТР ] … ИСТОЧНИК … [ ПОЛЬЗОВАТЕЛЬ@ ] ХОСТ:НАЗНАЧЕНИЕ rsync [ ПАРАМЕТР ] … [ ПОЛЬЗОВАТЕЛЬ@ ] ХОСТ:ИСТОЧНИК [ НАЗНАЧЕНИЕ ]
где SRC — файл или каталог (или список из нескольких файлов и каталогов), из которого выполняется копирование, DEST — файл или каталог, в который выполняется копирование, а квадратные скобки указывают на необязательные параметры.
rsync
может синхронизировать Unix-клиентов с центральным Unix-сервером с помощью rsync
/ ssh
и стандартных учетных записей Unix. Его можно использовать в настольных средах, например, для эффективной синхронизации файлов с резервной копией на внешнем жестком диске. Утилита планирования, например, cron
может выполнять такие задачи, как автоматизированное зашифрованное rsync
зеркалирование между несколькими хостами и центральным сервером.
Командная строка для зеркалирования FreeBSD может выглядеть так: [24]
$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/
Apache HTTP Server поддерживает rsync только для обновления зеркал. [25]
$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /путь/к/зеркалу
Предпочтительным (и самым простым) способом зеркалирования веб-сайта PuTTY в текущем каталоге является использование rsync. [26]
$ rsync -auH rsync://rsync.chiark.greenend.org.uk/ftp/users/sgtatham/putty-website-mirror/ .
Способ имитации возможностей Time Machine (macOS) ; [27]
$ date = $( date "+%FT%H-%M-%S" ) # rsync интерпретирует ":" как разделитель между хостом и портом (т. е. хост:порт), поэтому мы не можем здесь использовать %T или %H:%M:%S, поэтому мы используем %H-%M-%S
$ rsync -aP --link-dest = $HOME /Backups/current /path/to/important_files $HOME /Backups/back- $date
$ ln -nfs $HOME /Backups/back- $date $HOME /Backups/current
Сделайте полную резервную копию корневого каталога системы: [28]
$ rsync -avAXHS --progress --exclude = { "/dev/*" , "/proc/*" , "/sys/*" , "/tmp/*" , "/run/*" , "/mnt/*" , "/media/*" , "/lost+found" } / /путь/к/папке/резервной/копии
Удалить все файлы и каталоги внутри каталога очень быстро:
# Создайте где-нибудь пустой каталог, это первый путь, а второй путь — каталог, который вы хотите очистить.
$ rsync -a --delete /path/to/empty/dir /path/to/dir/to/empty
Процесс rsync работает, взаимодействуя с другим процессом rsync, отправителем и получателем. При запуске клиент rsync подключается к одноранговому процессу. Если передача локальная (то есть между файловыми системами, смонтированными на одном хосте), одноранговый узел может быть создан с помощью fork после настройки подходящих каналов для соединения. Если задействован удаленный хост, rsync запускает процесс для обработки соединения, обычно Secure Shell . После соединения выдается команда для запуска процесса rsync на удаленном хосте, который использует установленное таким образом соединение. В качестве альтернативы, если удаленный хост запускает демон rsync, клиенты rsync могут подключаться, открыв сокет на порту TCP 873, возможно, используя прокси-сервер. [29]
Rsync имеет многочисленные параметры командной строки и файлы конфигурации для указания альтернативных оболочек, параметров, команд, возможно, с полным путем и номерами портов. Помимо использования удаленных оболочек, туннелирование может использоваться для того, чтобы удаленные порты отображались как локальные на сервере, где запущен демон rsync. Эти возможности позволяют настраивать уровни безопасности в соответствии с современными требованиями, в то время как для локальной сети может быть достаточно простого демона rsync.
Одним из решений является --dry-run
опция, которая позволяет пользователям проверять аргументы командной строки и моделировать то, что произойдет при копировании данных, без фактического внесения каких-либо изменений или передачи каких-либо данных.
Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2015 ) |
По умолчанию rsync определяет, какие файлы различаются между отправляющей и принимающей системами, проверяя время модификации и размер каждого файла. Если время или размер различаются между системами, он передает файл из отправляющей в принимающую систему. Поскольку для этого требуется только чтение информации о каталоге файлов, это быстро, но он пропустит необычные модификации, которые не изменяют ни то, ни другое. [8]
Rsync выполняет более медленную, но полную проверку, если вызывается с --checksum
. Это принудительно выполняет полное сравнение контрольных сумм для каждого файла, присутствующего в обеих системах. За исключением редких столкновений контрольных сумм , это позволяет избежать риска пропуска измененных файлов за счет чтения каждого файла, присутствующего в обеих системах.
Утилита rsync использует алгоритм, изобретенный австралийским программистом Эндрю Триджеллом, для эффективной передачи структуры (например, файла) по каналу связи, когда принимающий компьютер уже имеет похожую, но не идентичную версию той же структуры. [30]
Получатель разбивает свою копию файла на части и вычисляет две контрольные суммы для каждой части: хэш MD5 и более слабую, но простую в вычислении « скользящую контрольную сумму ». [31] Он отправляет эти контрольные суммы отправителю.
Отправитель вычисляет контрольную сумму для каждого скользящего раздела в своей версии файла, имеющего тот же размер, что и фрагменты, используемые получателем. В то время как получатель вычисляет контрольную сумму только для фрагментов, начинающихся с полных кратных размера фрагмента, отправитель вычисляет контрольную сумму для всех разделов, начинающихся с любого адреса. Если любая такая скользящая контрольная сумма, вычисленная отправителем, совпадает с контрольной суммой, вычисленной получателем, то этот раздел является кандидатом на передачу не содержимого раздела, а только местоположения в файле получателя. В этом случае отправитель использует более затратный в вычислительном отношении хеш MD5 для проверки того, что раздел отправителя и фрагмент получателя равны. Обратите внимание, что раздел в отправителе может не иметь того же начального адреса, что и фрагмент у получателя. Это позволяет эффективно передавать файлы, которые отличаются вставками и удалениями. [32] Затем отправитель отправляет получателю те части своего файла, которые не совпали, вместе с информацией о том, где следует объединить существующие блоки в версию получателя. Это делает копии идентичными.
Скользящая контрольная сумма, используемая в rsync, основана на контрольной сумме adler -32 Марка Адлера , которая используется в zlib , а сама основана на контрольной сумме Флетчера .
Если версии файла отправителя и получателя имеют много общих разделов, утилите необходимо передать относительно немного данных для синхронизации файлов. Если используются типичные алгоритмы сжатия данных , файлы, которые похожи в несжатом виде, могут сильно отличаться при сжатии, и, таким образом, необходимо будет передать весь файл. Некоторые программы сжатия, такие как gzip , предоставляют специальный режим "rsyncable", который позволяет эффективно синхронизировать эти файлы, гарантируя, что локальные изменения в несжатом файле приведут только к локальным изменениям в сжатом файле.
Rsync поддерживает другие ключевые функции, которые существенно помогают в передаче данных или резервном копировании. Они включают сжатие и распаковку данных поблочно с использованием Zstandard , LZ4 или zlib , а также поддержку таких протоколов, как ssh и stunnel .
TheУтилита rdiff использует алгоритм rsync для генерациидельта-файловс разницей между файлом A и файлом B (подобно утилитеdiff, но в другом формате дельта). Затем дельта-файл можно применить к файлу A, превратив его в файл B (аналогичноpatch). rdiff хорошо работает сбинарными файлами.
Скрипт rdiff-backup поддерживает резервное зеркало файла или каталога локально или удаленно по сети на другом сервере. rdiff-backup сохраняет инкрементные дельты rdiff вместе с резервной копией, с помощью которых можно воссоздать любую точку резервного копирования. [33]
Библиотека librsync , используемая rdiff, является независимой реализацией алгоритма rsync. Она не использует сетевой протокол rsync и не разделяет код с приложением rsync. [34] Она используется Dropbox , rdiff-backup, duplicity и другими утилитами. [34]
Библиотека acrosync — это независимая кроссплатформенная реализация сетевого протокола rsync. [35] В отличие от librsync, она совместима по проводам с rsync (версия протокола 29 или 30). Она выпущена под Reciprocal Public License и используется коммерческим программным обеспечением rsync Acrosync . [36]
Программное обеспечение для резервного копирования duplicity , написанное на python, позволяет создавать инкрементные резервные копии с помощью простых внутренних служб хранения, таких как локальная файловая система, sftp , Amazon S3 и многих других. Оно использует librsync для генерации дельта-данных по подписям предыдущих версий файлов, шифруя их с помощью gpg и сохраняя их на внутреннем сервере. По соображениям производительности локальный архивный каталог используется для кэширования подписей цепочки резервных копий, но при необходимости его можно повторно загрузить с внутреннего сервера.
Начиная с macOS 10.5 и более поздних версий, есть специальный переключатель -E
or --extended-attributes
, который позволяет сохранять большую часть метаданных файла HFS+ при синхронизации между двумя машинами, поддерживающими эту функцию. Это достигается путем передачи Resource Fork вместе с Data Fork. [37]
zsync — это rsync-подобный инструмент, оптимизированный для множества загрузок на одну версию файла. zsync используется в дистрибутивах Linux, таких как Ubuntu [38], для распространения быстро меняющихся файлов образов бета-версий ISO . zsync использует протокол HTTP и файлы .zsync с предварительно рассчитанным скользящим хешем для минимизации нагрузки на сервер, но при этом допускает передачу различий для оптимизации сети. [39]
Rclone — это инструмент с открытым исходным кодом, вдохновленный rsync, который фокусируется на облачных и других хранилищах с высокой задержкой. Он поддерживает более 50 различных поставщиков и предоставляет интерфейс, подобный rsync, для облачного хранилища. [40] Однако Rclone не поддерживает скользящие контрольные суммы для частичной синхронизации файлов (двоичные различия), поскольку поставщики облачных хранилищ обычно не предлагают эту функцию, а Rclone избегает хранения дополнительных метаданных. [41]
Программа | Операционная система | Бесплатное программное обеспечение | Описание | ||
---|---|---|---|---|---|
Линукс | macOS | Окна | |||
Назад во времени | Да | Нет | Нет | Да | |
BackupAssist | Нет | Нет | Да | Нет | Прямое зеркало или с историей, VSS. |
cwRsync | Нет | Нет | Да | Нет | На основе Cygwin . |
Grsync | Да | Да | Да [42] | Да | Графический интерфейс для rsync. |
LuckyBackup | Да | Да | Да | Да | |
rclone | Да | Да | Да | Да | Вдохновлен rsync и поддерживает более 50 поставщиков облачных хранилищ и других служб хранения с высокой задержкой. Фактически не использует rsync и не поддерживает скользящие контрольные суммы и частичную синхронизацию файлов. |
тим | Да | Да | Да | Да | Time rsYnc Machine – резервное копирование в стиле Time Machine – скрипт Bash |
Унисон | Да | Да | Да | Да |
rsync широко используется.