Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

rsync - это утилита для эффективной передачи и синхронизации файлов между компьютером и внешним жестким диском, а также между компьютерами, подключенными к сети, путем сравнения времени модификации и размеров файлов. [3] Обычно он встречается в Unix-подобных операционных системах . Rsync написан на C как однопоточное приложение. [4] Алгоритм rsync - это тип дельта-кодирования , который используется для минимизации использования сети. Zlib может быть использован для дополнительного сжатия данных , [3] и SSH или stunnel могут использоваться для обеспечения безопасности. Rsync - это средство, обычно используемое для синхронизации репозиториев программного обеспечения на зеркальных сайтах, используемых системами управления пакетами . [5] [6]

Rsync обычно используется для синхронизации файлов и каталогов между двумя разными системами. Например, если команда rsync local-file user@remote-host:remote-fileзапущена, rsync будет использовать SSH для подключения как userк remote-host. [7] После подключения он вызовет rsync удаленного хоста, а затем две программы определят, какие части локального файла необходимо передать, чтобы удаленный файл соответствовал локальному.

Rsync также может работать в режиме демона (rsyncd), обслуживая и получая файлы в собственном протоколе rsync (с использованием синтаксиса «rsync: //»).

Он находится под лицензией GNU General Public License . [8] [9] [10] [11]

История [ править ]

Эндрю Триджелл и Пол Маккеррас написали оригинальный rsync, о котором впервые было объявлено 19 июня 1996 года. [1] По функциям и вызову он похож на rdist ( rdist -c), созданный Ральфом Кэмпбеллом в 1983 году и выпущенный в рамках распространения программного обеспечения Беркли . [12] Триджелл обсуждает дизайн, реализацию и производительность rsync в главах с 3 по 5 своей докторской диссертации. диссертацию в 1999 году. [13] В настоящее время его поддерживает Уэйн Дэвисон. [14]

Благодаря гибкости, скорости и возможности сценариев rsyncона стала стандартной утилитой Linux, включенной во все популярные дистрибутивы Linux. Он был перенесен на Windows (через Cygwin , Grsync или SFU [15] ), FreeBSD , [16] NetBSD , [17] OpenBSD , [18] и macOS .

Используйте [ редактировать ]

Аналогично cp, rcpи scp, rsyncтребует уточнения источника и места назначения, из которых по крайней мере один должен быть локальным. [19]

Общий синтаксис:

rsync [ OPTION ] … SRC… [ USER @ ] HOST: DESTrsync [ OPTION ][ USER @ ] HOST: SRC [ DEST ]

где SRC - это файл или каталог (или список из нескольких файлов и каталогов), из которого выполняется копирование, DEST - это файл или каталог, в который нужно копировать, а квадратные скобки указывают необязательные параметры.

rsyncможет синхронизировать клиентов Unix с центральным сервером Unix, используя rsync/ sshи стандартные учетные записи Unix. Его можно использовать в среде настольного компьютера, например, для эффективной синхронизации файлов с резервной копией на внешнем жестком диске. Утилита планирования, такая как, cronможет выполнять такие задачи, как автоматическое rsyncзеркальное копирование на основе шифрования между несколькими хостами и центральным сервером.

Примеры [ править ]

Командная строка для зеркалирования FreeBSD может выглядеть так:

$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ / pub / FreeBSD / [20]

Apache HTTP Server поддерживает только Rsync для обновления зеркал.

$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist / путь / к / зеркалу [21]

Предпочтительный (и самый простой) способ отразить веб-сайт PuTTY в текущем каталоге - использовать rsync.

$ rsync -auH rsync: //rsync.chiark.greenend.org.uk/ftp/users/sgtatham/putty-website-mirror/. [22]

Способ имитировать возможности Time Machine (macOS) - см. Также tym . [23]

$ 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 / текущий

Сделайте полную резервную копию системного корневого каталога: [24]

$ rsync -avAXHS --progress --exclude = { "/ dev / *" , "/ proc / *" , "/ sys / *" , "/ tmp / *" , "/ run / *" , "/ mnt / * " , " / media / * " , " / lost + found " } / / путь / к / резервной / папке

Подключение [ править ]

Процесс rsync взаимодействует с другим процессом rsync, отправителем и получателем. При запуске клиент rsync подключается к одноранговому процессу. Если передача является локальной (то есть между файловыми системами, смонтированными на одном и том же хосте), одноранговый узел может быть создан с помощью fork после настройки подходящих каналов для соединения. Если удаленный хост, Rsync запускает процесс для обработки соединения, как правило , Secure Shell . После подключения выдается команда для запуска процесса rsync на удаленном хосте, который использует установленное таким образом соединение. В качестве альтернативы, если удаленный хост запускает демон rsync, клиенты rsync могут подключаться, открыв сокет на TCP-порту 873, возможно, используя прокси. [25]

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

Алгоритм [ править ]

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

По умолчанию rsync определяет, какие файлы отличаются в отправляющей и принимающей системах, проверяя время модификации и размер каждого файла. Если время или размер различаются между системами, он передает файл из отправляющей в принимающую систему. Поскольку для этого требуется только чтение информации о каталоге файлов, это происходит быстро, но при этом не будут пропущены необычные модификации, которые ни на что не влияют. [3]

Rsync выполняет более медленную, но полную проверку, если запускается с помощью --checksum. Это вызывает полное сравнение контрольных сумм для каждого файла, присутствующего в обеих системах. За исключением редких коллизий контрольных сумм , это позволяет избежать риска пропуска измененных файлов за счет чтения каждого файла, присутствующего в обеих системах.

Определение того, какие части файла были изменены [ править ]

Утилита rsync использует алгоритм, изобретенный австралийским программистом Эндрю Триджеллом, для эффективной передачи структуры (например, файла) по каналу связи, когда принимающий компьютер уже имеет аналогичную, но не идентичную версию той же структуры. [26]

Получатель разбивает свою копию файла на фрагменты и вычисляет две контрольные суммы для каждого фрагмента: хеш MD5 и более слабую, но более простую для вычисления « скользящую контрольную сумму ». [27] Он отправляет эти контрольные суммы отправителю.

Отправитель вычисляет контрольную сумму для каждой скользящей секции в своей версии файла, имеющей тот же размер, что и блоки, используемые получателем. В то время как получатель вычисляет контрольную сумму только для фрагментов, размер которых полностью кратен размеру фрагмента, отправитель вычисляет контрольную сумму для всех разделов, начинающихся с любого адреса. Если любая такая скользящая контрольная сумма, вычисленная отправителем, совпадает с контрольной суммой, вычисленной получателем, тогда этот раздел является кандидатом на передачу не содержимого раздела, а только местоположения в файле получателя. В этом случае отправитель использует более затратный с точки зрения вычислений хэш MD5, чтобы убедиться, что раздел отправителя и фрагмент получателя равны. Обратите внимание, что раздел отправителя не должен иметь тот же начальный адрес, что и фрагмент получателя.Это позволяет эффективно передавать файлы, которые различаются вставками и удалениями.[28] Затем отправитель отправляет получателю те части своего файла, которые не совпадают, вместе с информацией о том, где объединить существующие блоки в версию получателя. Это делает копии идентичными.

Качению контрольной суммы используется в Rsync основана на Марка Адлера адлер-32 контрольной суммы, которая используется в Zlib , и сама основана на контрольной суммы Флетчера .

Если версии файла отправителя и получателя имеют много общих разделов, утилите необходимо передать относительно небольшой объем данных для синхронизации файлов. Если используются типичные алгоритмы сжатия данных , файлы, которые схожи в несжатом виде, могут сильно отличаться в сжатом виде, и поэтому необходимо будет передать весь файл. Некоторые программы сжатия, такие как gzip , предоставляют специальный режим «rsyncable», который позволяет эффективно синхронизировать эти файлы, гарантируя, что локальные изменения в несжатом файле приводят только к локальным изменениям в сжатом файле.

Rsync поддерживает другие ключевые функции, которые значительно помогают при передаче данных или резервном копировании. Они включают сжатие и распаковку данных по блокам с использованием zlib , а также поддержку таких протоколов, как ssh и stunnel .

Варианты [ править ]

RDIFF утилита использует алгоритм RSYNC для генерации дельта - файлов с той разницей , из файла А в файл B (например , утилиты дифференциал , но в другом формате дельта). Затем дельта-файл можно применить к файлу A, превратив его в файл B (аналогично утилите patch ). rdiff хорошо работает с двоичными файлами .

Сценарий rdiff-backup поддерживает резервную копию файла или каталога локально или удаленно по сети на другом сервере. rdiff-backup сохраняет инкрементальные дельты rdiff с резервной копией, с помощью которых можно воссоздать любую точку резервного копирования. [29]

Библиотека librsync, используемая rdiff, является независимой реализацией алгоритма rsync. Он не использует сетевой протокол rsync и не разделяет код с приложением rsync. [30] Он используется Dropbox , rdiff-backup, duplicity и другими утилитами. [30]

Библиотека acrosync - это независимая кроссплатформенная реализация сетевого протокола rsync. [31] В отличие от librsync, он совместим по проводам с rsync (версия протокола 29 или 30). Он выпущен по взаимной общественной лицензии и используется коммерческим программным обеспечением rsync Acrosync . [32]

Duplicity - это вариант rdiff-backup, который позволяет выполнять резервное копирование без взаимодействия с сервером хранения, как и в случае с простыми сервисами хранения, такими как Amazon S3 . Он работает, заранее генерируя хэши для каждого блока, шифруя их и сохраняя на сервере. Затем он извлекает их при выполнении инкрементного резервного копирования. Остальные данные также хранятся в зашифрованном виде в целях безопасности.

Начиная с macOS 10.5 и более поздних версий, существует специальный переключатель -Eили, --extended-attributesкоторый позволяет сохранять большую часть метаданных файла HFS при синхронизации между двумя машинами, поддерживающими эту функцию. Это достигается путем передачи вилки ресурсов вместе с вилкой данных. [33]

zsync - это инструмент, подобный rsync, оптимизированный для множества загрузок для каждой версии файла. zsync используется дистрибутивами Linux, такими как Ubuntu [34], для распространения быстро изменяющихся файлов бета- образов ISO . zsync использует протокол HTTP и файлы .zsync с предварительно рассчитанным скользящим хешем, чтобы минимизировать нагрузку на сервер, но разрешить передачу различий для оптимизации сети.

Rclone - это инструмент с открытым исходным кодом, вдохновленный rsync, который ориентирован на облачные и другие хранилища с высокой задержкой. Он поддерживает более 50 различных поставщиков и предоставляет интерфейс, подобный rsync, для облачного хранилища. [35]

приложения rsync [ править ]

См. Также [ править ]

  • Casync
  • Удаленное дифференциальное сжатие
  • Список номеров портов TCP и UDP

Ссылки [ править ]

  1. ^ a b Триджелл, Эндрю (19 июня 1996 г.). «Первый выпуск rsync - замена rcp» . Группа новостей :  comp.os.linux.announce . Usenet:  [email protected] . Архивировано 8 ноября 2011 года . Проверено 19 июля 2007 года .
  2. ^ «НОВОСТИ для rsync 3.2.3 (6 августа 2020 г.)» . rsync . 6 августа 2020 . Проверено 19 октября 2020 года .
  3. ^ a b c "rsync (1) - справочная страница Linux" . linux.die.net . Архивировано 1 января 2017 года . Дата обращения 2 февраля 2017 .
  4. ^ "Архивная копия" . Архивировано 6 августа 2019 года . Проверено 18 декабря 2019 .CS1 maint: заархивированная копия как заголовок ( ссылка )
  5. ^ "Использование и ходовые зеркала" . Проект GNU. Архивировано 16 апреля 2020 года . Проверено 15 апреля 2020 .
  6. ^ «Как создать публичные зеркала для CentOS» . CentOS вики. Архивировано 1 апреля 2020 года . Проверено 15 апреля 2020 .
  7. ^ «Использование Rsync и SSH» . Troy.jdmz.net . Проверено 18 августа 2014 .
  8. ^ Sayood, Халид (18 декабря 2002). Справочник по сжатию без потерь . ISBN 9780080510491. Проверено 18 августа 2014 .
  9. ^ Кэширование и распространение веб-контента: материалы 8-го международного семинара . Springer Science & Business Media. 2004. с. 316 . Проверено 18 августа 2014 г. - из интернет-архива . rsync широко используется.
  10. ^ Раш, Дэвид; Бернс, Рэндал; In-Place Rsync: синхронизация файлов для мобильных и беспроводных устройств. Архивировано 13 апреля 2016 г. в Wayback Machine , факультет компьютерных наук, Университет Джона Хопкинса.
  11. ^ Демпси, Берт Дж .; Вайс, Дебра (30 апреля 1999 г.). «На пути к эффективному, масштабируемому механизму репликации для проекта I2-DSI». Технический отчет TR-1999-01 . CiteSeerX 10.1.1.95.5042 . 
  12. ^ "Страница руководства Rdist" .
  13. ^ Триджелл, Эндрю; Эффективные алгоритмы сортировки и синхронизации , февраль 1999 г., получено 29 сентября 2009 г.
  14. ^ "rsync" . Архивировано 27 ноября 2014 года . Проверено 28 ноября 2014 .
  15. ^ "Склад инструментов" . Сообщество SUA . Архивировано из оригинала 6 апреля 2013 года .
  16. ^ "Порты FreeBSD" . Проверено 24 октября 2016 года .
  17. ^ "Порты NetBSD" . Архивировано 25 октября 2016 года . Проверено 24 октября 2016 года .
  18. ^ "Порты OpenBSD" . Проверено 24 октября 2016 года .
  19. ^ См. Файл README, заархивированный 10 декабря 2007 г. на Wayback Machine
  20. ^ «Как отразить FreeBSD (с помощью rsync)» . Freebsd.org . Проверено 18 августа 2014 .
  21. ^ «Как стать зеркалом для Apache Software Foundation» . Apache.org. Архивировано 21 августа 2014 года . Проверено 18 августа 2014 .
  22. ^ «Зеркала веб-сайта PuTTY: правила зеркалирования» . Chiark.greenend.org.uk. 20 декабря 2007 года. Архивировано 19 августа 2014 года . Проверено 18 августа 2014 .
  23. ^ «Rsync настроен для работы как Time Machine» . Blog.interlinked.org. Архивировано 15 ноября 2007 года . Проверено 18 августа 2014 .
  24. ^ "Полное резервное копирование системы с помощью rsync" . wiki.archlinux.org. Архивировано 11 февраля 2015 года . Проверено 15 декабря 2014 .
  25. ^ «Как работает Rsync» . Архивировано 16 декабря 2016 года . Проверено 24 января 2017 года .
  26. ^ «RSync - Обзор» . Архивировано 10 апреля 2017 года . Проверено 9 апреля 2017 года .
  27. ^ НОВОСТИ для rsync 3.0.0, архивировано 20 марта 2008 г. на Wayback Machine (1 марта 2008 г.)
  28. ^ Норман Рэмси. Алгоритм Rsync
  29. ^ rdiff-резервное копирование
  30. ^ a b Пул, Мартин; "librsync". Архивировано 9 декабря 2013 года на Wayback Machine.
  31. ^ Чен, Гилберт. "acrosync-библиотека" . github.com. Архивировано 10 февраля 2017 года . Проверено 22 июня +2016 .
  32. ^ "acrosync.com" . Архивировано 20 декабря 2019 года . Проверено 29 июля 2020 .
  33. ^ «Библиотека разработчика Mac» . Developer.apple.com. Архивировано из оригинального 26 сентября 2012 года . Проверено 18 августа 2014 .
  34. ^ "Zsync Cd Image" . ubuntu.com . Проверено 6 января 2015 .
  35. ^ Крейг-Вуд, Ник. «Обзор облачных систем хранения данных» . rclone.org . Архивировано 4 октября 2017 года . Проверено 10 июля 2017 года .
  36. ^ «Grsync для Windows» . SourceForge . Архивировано 24 марта 2019 года . Проверено 24 марта 2019 года .
  37. ^ «GS RichCopy 360 Enterprise - Программное обеспечение для быстрого копирования или синхронизации файлов и rsync для Windows» . www.gurusquad.com .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • алгоритм rsync - 9 ноября 1998 г.
  • Примеры rsync (Как использовать rsync)