rsync

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

rsync
Оригинальный автор(ы)Эндрю Триджелл , Пол Маккеррас [1]
Разработчик(и)Уэйн Дэвисон [2]
Первоначальный выпуск19 июня 1996 г .; 28 лет назад [1] ( 1996-06-19 )
Стабильный релиз
3.4.1 [3]  / 15 января 2025 г. ; 20 дней назад ( 15 января 2025 г. )
Репозиторий
  • github.com/RsyncProject/rsync
Написано вС
ПлатформаКроссплатформенный
ТипПередача данных , дифференциальное резервное копирование
Лицензия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опция, которая позволяет пользователям проверять аргументы командной строки и моделировать то, что произойдет при копировании данных, без фактического внесения каких-либо изменений или передачи каких-либо данных.

Алгоритм

Определение файлов для отправки

По умолчанию 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 и более поздних версий, есть специальный переключатель -Eor --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]

rsync-приложения

ПрограммаОперационная системаБесплатное программное обеспечениеОписание
ЛинуксmacOSОкна
Назад во времениДаНетНетДа
BackupAssistНетНетДаНетПрямое зеркало или с историей, VSS.
cwRsyncНетНетДаНетНа основе Cygwin .
GrsyncДаДаДа [42]ДаГрафический интерфейс для rsync.
LuckyBackupДаДаДаДа
rcloneДаДаДаДаВдохновлен rsync и поддерживает более 50 поставщиков облачных хранилищ и других служб хранения с высокой задержкой. Фактически не использует rsync и не поддерживает скользящие контрольные суммы и частичную синхронизацию файлов.
тимДаДаДаДаTime rsYnc Machine – резервное копирование в стиле Time Machine – скрипт Bash
УнисонДаДаДаДа

Смотрите также

Примечания

  1. ^ GPL-3.0 или более поздняя версия с 10 июля 2007 г., предварительная версия 3.0.0pre1 от 5 октября 2007 г., стабильная версия 3.0.0 от 1 марта 2008 г.
  2. ^ GPL-3.0-только с 2007-07-07 по 2007-07-09.
  3. ^ GPL-2.0-только с 2007-02-04 по 2007-07-07.
  4. ^ GPL-2.0 или более поздняя с 16.06.1996 по 31.01.2007, версии 0.1–2.6.9.

Ссылки

  1. ^ abc Триджелл, Эндрю (19 июня 1996 г.). «Первый выпуск rsync – замена rcp». Группа новостей : comp.os.linux.announce. Usenet:  cola-liw-835153950-21793-0@liw.clinet.fi. Архивировано из оригинала 8 ноября 2011 г. Получено 19 июля 2007 г.
  2. ^ ab "rsync". Архивировано из оригинала 27 ноября 2014 г. Получено 28 ноября 2014 г.
  3. ^ "[rsync-announce] rsync 3.4.1 выпущен". 15 января 2025 г. Получено 15 января 2025 г.
  4. ^ ab "Новости".
  5. ^ ab "еще немного дорабатываем текст лицензии".
  6. ^ "лицензия rsync".
  7. ^ "лицензия rsync".
  8. ^ abc "rsync(1) – Linux man page". linux.die.net . Архивировано из оригинала 1 января 2017 г. . Получено 2 февраля 2017 г. .
  9. ^ Sayood, Khalid (18 декабря 2002 г.). Справочник по сжатию без потерь. Elsevier. ISBN 9780080510491. Получено 18 августа 2014 г.
  10. ^ Кэширование и распространение веб-контента: материалы 8-го международного семинара. Springer Science & Business Media. 2004. стр. 316. ISBN 9781402022579. Получено 18 августа 2014 г. – через Интернет-архив . rsync широко используется.
  11. ^ Раш, Дэвид; Бернс, Рэндал; Rsync на месте: синхронизация файлов для мобильных и беспроводных устройств. Архивировано 13 апреля 2016 г. в Wayback Machine , кафедра компьютерных наук, Университет Джонса Хопкинса.
  12. ^ Демпси, Берт Дж.; Вайс, Дебра (30 апреля 1999 г.). «На пути к эффективному, масштабируемому механизму репликации для проекта I2-DSI». Технический отчет TR-1999-01 . CiteSeerX 10.1.1.95.5042 . 
  13. ^ "Bash - Ускорение rsync с помощью одновременной/конкурентной передачи файлов? - Stack Overflow". Архивировано из оригинала 6 августа 2019 г. Получено 18 декабря 2019 г.
  14. ^ "Использование Rsync и SSH". Troy.jdmz.net . Получено 18 августа 2014 г. .
  15. ^ "Использование и запуск зеркал". Проект GNU. Архивировано из оригинала 16 апреля 2020 г. Получено 15 апреля 2020 г.
  16. ^ "Как создать публичные зеркала для CentOS". CentOS wiki. Архивировано из оригинала 1 апреля 2020 г. Получено 15 апреля 2020 г.
  17. ^ "rdist(1)".
  18. ^ Триджелл, Эндрю; Эффективные алгоритмы сортировки и синхронизации, февраль 1999 г., получено 29 сентября 2009 г.
  19. ^ "Tool Warehouse". Сообщество SUA . Архивировано из оригинала 6 апреля 2013 года.
  20. ^ "FreeBSD Ports" . Получено 24 октября 2016 .
  21. ^ "NetBSD Ports". Архивировано из оригинала 25 октября 2016 года . Получено 24 октября 2016 года .
  22. ^ "Порты OpenBSD" . Получено 24 октября 2016 г.
  23. См. файл README, архивированный 10 декабря 2007 г. на Wayback Machine.
  24. ^ "Как создать зеркало FreeBSD (с rsync)". Freebsd.org . Получено 18 августа 2014 г. .
  25. ^ "Как стать зеркалом Apache Software Foundation". Apache.org. Архивировано из оригинала 21 августа 2014 года . Получено 18 августа 2014 года .
  26. ^ "PuTTY Web Site Mirrors: Mirroring guidelines". Chiark.greenend.org.uk. 20 декабря 2007 г. Архивировано из оригинала 19 августа 2014 г. Получено 18 августа 2014 г.
  27. ^ "Rsync настроен на работу как Time Machine". Blog.interlinked.org. Архивировано из оригинала 15 ноября 2007 г. Получено 18 августа 2014 г.
  28. ^ "Полное резервное копирование системы с помощью rsync". wiki.archlinux.org. Архивировано из оригинала 11 февраля 2015 г. Получено 15 декабря 2014 г.
  29. ^ "How Rsync Works". Архивировано из оригинала 16 декабря 2016 года . Получено 24 января 2017 года .
  30. ^ "RSync – Overview". Архивировано из оригинала 10 апреля 2017 г. Получено 9 апреля 2017 г.
  31. ^ "Новости для rsync 3.0.0". 1 марта 2008 г. Архивировано из оригинала 20 марта 2008 г.
  32. ^ Норман Рэмси. «Алгоритм Rsync».
  33. ^ rdiff-резервное копирование
  34. ^ ab Pool, Martin; "librsync" Архивировано 9 декабря 2013 г. на Wayback Machine
  35. ^ Чен, Гилберт. "acrosync-library". github.com. Архивировано из оригинала 10 февраля 2017 г. Получено 22 июня 2016 г.
  36. ^ "acrosync.com". Архивировано из оригинала 20 декабря 2019 года . Получено 29 июля 2020 года .
  37. ^ "Mac Developer Library". Developer.apple.com. Архивировано из оригинала 26 сентября 2012 г. Получено 18 августа 2014 г.
  38. ^ "Zsync Cd Image". ubuntu.com . Получено 6 января 2015 г. .
  39. ^ веб-сайт zsync
  40. ^ Крейг-Вуд, Ник. "Обзор облачных систем хранения данных". rclone.org . Архивировано из оригинала 4 октября 2017 г. . Получено 10 июля 2017 г. .
  41. ^ Крейг-Вуд, Ник. «Rclone Frequently Asked Questions». rclone.org . Архивировано из оригинала 10 мая 2022 г. . Получено 13 мая 2022 г. .
  42. ^ "Grsync for Windows". SourceForge . 12 июля 2016 г. Архивировано из оригинала 24 марта 2019 г. Получено 24 марта 2019 г.
  • Официальный сайт
  • Алгоритм Rsync – 1998-11-09
  • Докторская диссертация, посвященная алгоритму Rsync
  • Примеры rsync в Linux (Как использовать rsync)
Взято с "https://en.wikipedia.org/w/index.php?title=Rsync&oldid=1268059841"