Rsync (Remote Synchronization)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 11:18, 17 января 2019.
Rsync
Rsync logo.png
Rsync scr.jpg
Скриншот Rsync 3.1
Создатели: Эндрю Триджелл, Пол Маккерас
Разработчики: Уэйн Дэвисон
Выпущена: 19 June 1996 года; 23 years ago (1996-06-19)
Постоянный выпуск: 3.1.3 / 28 January 2018 года; 2 years ago (2018-01-28)
Состояние разработки: в разработке
Написана на: C
Операционная система: UNIX-подобных систем, Microsoft Windows, Mac OS X
Платформа: Кросс-платформенное программное обеспечение
Лицензия: GNU GPL
Веб-сайт rsync.samba.org

rsync (англ. Remote Synchronization) — бесплатное приложение для UNIX-подобных систем и Microsoft Windows. Используя метод дельта-кодирования, позволяет синхронизировать файлы и каталоги между двумя машинами сети или между двумя точками на одном компьютере, тем самым сводя к минимуму объем переданных данных. Особенность rsync – копирование происходит только с одной передачей в каждом направлении. rsync может копировать или отображать содержащиеся каталоги и копировать файлы, опционально используя сжатие и рекурсию.[Источник 1]

rsync по умолчанию слушает TCP-порт 873, обслуживая файлы в собственном протоколе rsync или через удаленный терминал, такой как RSH или SSH. В последнем случае исполняемый файл клиента rsync должен быть установлен на локальном и удаленном узле.

Выпущен под лицензией GNU GPL. rsync является свободным программным обеспечением.

История

19 июня 1996 года Эндрю Триджелл и Пол Маккерас представили прототип rsync. Сейчас за работу rsync отвечает Уэйн Дэвисон. Приложение вошло в состав всех дистрибутивов Linux, потому что имеет высокую скорость, а также позволяет писать скрипты. rsync адаптировали для Windows (через Cygwin для, Grsync, или SFU), FreeBSD, на NetBSD, в OpenBSD, и macOS. [Источник 2]

Алгоритм

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

  • Приемник делит свою копию файла на блоки фиксированного размера S, а не накладывается, и вычисляет две контрольные суммы для каждого блока: хеш MD4 и более слабую контрольную сумму. Затем отправляет эти контрольные суммы отправителю. Версия 30 протокола (выпущена с версией rsync 3.0.0) теперь использует MD5 вместо MD4
  • Эмитент рассчитывает контрольную сумму для каждого возможного блока размера S, перезаписывает блоки. Это можно сделать эффективно благодаря свойству скользящей контрольной суммы: если текущая контрольная сумма байтов na n + S-1 равна R, контрольная сумма байтов n + 1 до n + S может быть вычислена из n байта, байт n + S и R, без необходимости изучения промежуточных байтов. Затем, если скользящая контрольная сумма байтов с 1 по 25 уже была рассчитана, контрольная сумма качки байтов с 2 по 26 может быть рассчитана отдельно от предыдущей контрольной суммы и из байтов 1 и 26.
  • Калиброванная контрольная сумма, используемая в rsync, основана на контрольной сумме Adler-32 Марка Адлера, которая используется в zlib и основана на контрольной сумме Fletcher.
  • Затем эмитент сравнивает свои текущие контрольные суммы с отправленными получателем, чтобы определить, имеются ли совпадения. Когда находит их, он проверяет, вычисляя контрольную сумму MD4 для самого блока и сравнивая его с блоком приемника.
  • По завершении процесса отправитель отправляет только те блоки, для которых не найдено совпадений, а также инструкции по его сборке в версии приемника. На практике это создает файл, идентичный копии отправителя. Однако, в принципе, возможно, что копия получателя отличается в этой точке эмитента: это может произойти, когда два файла имеют разные куски с одинаковой хешей и скользящей контрольной суммой. Следует отметить, что возможности этого события на практике чрезвычайно далеки. Если в версиях файлов отправителя и получателя имеется много общих разделов, утилита должна передавать небольшие данные для синхронизации файлов.[Источник 3]

Возможности

Хотя алгоритм rsync является частью ядра приложения rsync и существенно оптимизирует перенос между двумя компьютерами через TCP / IP, приложение rsync предоставляет другие функции, которые помогают в передаче. К ним относятся сжатие и декомпрессия блока данных за блоком, использование zlib при отправке и получении и поддержка протоколов шифрования, таких как SSH, который позволяет шифровать и эффективно дифференцировать передачу сжатых данных с использованием алгоритма rsync.

Кроме того, приложение туннелирования также может использоваться для создания зашифрованного туннеля, который защищает передаваемые данные.

В дополнение к файлам алгоритм позволяет копировать каталоги, даже рекурсивно, а также ссылки, устройства, группы и разрешения. Для его использования по умолчанию не требуются привилегии root.

Rsync была создана как замена для rcp и scp. Одним из первых применений rsync стало зеркалирование или резервное копирование клиентских UNIX-систем на центральный UNIX-сервер с использованием rsync/ssh и обычной учетной записи Unix. С планировщиком задач, таким как cron, возможно организовать автоматизированное основанное на rsync зеркалирование по защищенному криптографически каналу между многими компьютерами и центральным сервером. [Источник 4]

Использование Rsync

Простейший вызов приложения через командную строку имеет следующий вид:

rsync [OPCIONES]... ORIGEN [ORIGEN]... DESTINO

Простоту приложения можно увидеть в следующем примере (для упрощения объяснения используются длинные опции, но также можно использовать сокращенные варианты):

rsync --verbose --compress --rsh=/usr/local/bin/ssh --recursive \
--times --perms --links --delete --exclude "*bak" --exclude "*~" \
/www/* webserver:/www

Эта команда выполняет rsync в подробном режиме (показывает сообщения о состоянии стандартным выходом), с сжатием , через ssh, рекурсивно для подкаталогов, сохраняя даты и разрешения исходного файла, включая ссылки, удаляя файлы, которые были удалены в исходный каталог, исключая резервные копии и временные файлы (* bak, * ~); источником является содержимое каталога / www и адрес назначения / www на хосте веб-сервера.

Кроме того, необходимо настроить одну из точек хоста в качестве сервера rsync, выполнив rsync в режиме демона :

rsync --daemon

и конфигурирование файла /etc/rsyncd.conf.

Как только сервер настроен, любая машина с установленной rsync может синхронизировать файлы с ней или из нее.

Синхронизация двух папок с использованием сокращенных опций:[Источник 5]

rsync -au --delete

Символьные ссылки

Три основных сценария поведения возможны при обнаружении символических ссылок в исходном каталоге.

По умолчанию символические ссылки не передаются совсем. Для любой существующей ссылки в этом случае выдается сообщение "skipping non-regular" ("пропуск нерегулярного").

  • Если указан параметр --links, то символические ссылки на тот же объект в конечном месте заново пересоздаются. Заметьте, что --archive подразумевает --links.
  • Если указан параметр --copy-links, то символическая ссылка "раскрывается" копированием того объекта, на который она указывает, вместо создания ссылки.

rsync также различает безопасные и небезопасные символические ссылки. Примером того, где это может быть использовано, служит такое зеркалирование web-сайта, при котором желательно быть уверенным, что в зеркальной копии нет символических ссылок на /etc/passwd в доступной всем пользователям части сайта. При использовании --copy-unsafe-links любые ссылки копируются в конечное место в виде файла, на который они указывают. Параметр --safe-links указывает полностью пропускать небезопасные ссылки.

Символические ссылки считаются небезопасными, если они указывают на абсолютный путь (начинающийся с /), если они пустые или если они содержат достаточное количество "..", чтобы выйти за пределы каталога копирования.[Источник 6]

Аналоги

Существуют другие утилиты, основанные на algortimo rsync:

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

Существуют также версии для других операционных систем, таких как rsyncX, версия для Mac OS X, которая позволяет передавать вилки ресурсов, а также в своей версии rsyncXCD позволяет создавать загрузочные разделы.

Можно даже использовать rsync в Microsoft Windows через Cygwin.

Ссылки

Источники

  1. Что такое rsync // Dmosk. [2009–2018]. Дата изменения: 17.08.2018. URL: https://www.dmosk.ru/terminus.php?object=rsync (дата обращения: 05.10.2018).
  2. rsync // Wikipedia. [2001–2019]. Дата изменения: 03.01.2019. URL: https://en.wikipedia.org/wiki/Rsync (дата обращения: 05.10.2018).
  3. rsync // Wikipedia. [2001–2019]. Дата изменения: 03.01.2019. URL: https://en.wikipedia.org/wiki/Rsync (дата обращения: 05.10.2018).
  4. RSync. Примеры использования // Записки сисадмина. [2011–2019]. Дата изменения: 28.04.2012. URL: https://greendail.ru/node/rsync-primery-ispolzovaniya (дата обращения: 05.10.2018).
  5. RSYNC ПРИМЕРЫ СИНХРОНИЗАЦИИ // Losst. [2007–2018]. Дата изменения: 02.04.2016. URL: https://losst.ru/rsync-primery-sinhronizatsii (дата обращения: 05.10.2018).
  6. RSYNC - Документация // Docs Mirocow. [2010–2018]. Дата изменения: 03.11.2015. URL: http://docs.mirocow.com/doku.php?id=rsync:rsync_документация (дата обращения: 05.10.2018).
  7. Резервное копирование при помощи rdiff-backup // OpenSource в заметках. [2006–2018]. Дата изменения: 06.03.2012. URL: http://ashep.org/2012/rezervnoe-kopirovanie-pri-pomoshhi-rdiff-backup/#.XD3soNIzbIU (дата обращения: 05.10.2018).