rsync
Оригинальный автор(ы) | Эндрю Триджелл , Пол Маккеррас [ 1 ] |
---|---|
Разработчик(и) | Уэйн Дэвисон [ 2 ] |
Первоначальный выпуск | 19 июня 1996 г [ 1 ] |
Стабильная версия | 3.3.0 [ 3 ]
/ 6 апреля 2024 г |
Репозиторий | |
Написано в | С |
Платформа | Кросс-платформенный |
Тип | Передача данных , дифференциальное резервное копирование |
Лицензия | 2007: GPL-3.0 или новее [ а ] [ 4 ] [ 5 ] [ 6 ] 2007: только GPL-3.0 [ б ] 2007: только GPL-2.0 [ с ] 1996: GPL-2.0 или более поздняя версия [ д ] [ 7 ] |
Веб-сайт | rsync |
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 год [ref], его поддерживает Уэйн Дэвисон. [ 2 ]
Благодаря своей гибкости, скорости и возможности сценариев, rsync
стала стандартной утилитой Linux, включенной во все популярные дистрибутивы Linux. [ нужна ссылка ] Он был портирован на Windows (через Cygwin , Grsync или SFU). [ 19 ] ), FreeBSD , [ 20 ] НетБСД , [ 21 ] OpenBSD , [ 22 ] и macOS .
Использовать
[ редактировать ]Похоже на: cp
, rcp
и scp
, rsync
требует указания источника и пункта назначения, из которых хотя бы один должен быть локальным. [ 23 ]
Общий синтаксис:
rsync [OPTION] … SRC … [USER@]HOST:DEST
rsync [OPTION] … [USER@]HOST:SRC [DEST]
где SRC — это файл или каталог (или список нескольких файлов и каталогов) для копирования, DEST — это файл или каталог для копирования, а квадратные скобки указывают необязательные параметры.
rsync
может синхронизировать клиентов Unix с центральным сервером Unix, используя rsync
/ ssh
и стандартные учетные записи Unix. Его можно использовать в среде рабочего стола, например, для эффективной синхронизации файлов с резервной копией на внешнем жестком диске. Утилита планирования, такая как cron
может выполнять такие задачи, как автоматическое шифрование rsync
-зеркалирование между несколькими хостами и центральным сервером.
Примеры
[ редактировать ]Командная строка для зеркалирования FreeBSD может выглядеть так: [ 24 ]
$ rsync -avz --delete ftp4.de.FreeBSD.org::FreeBSD/ /pub/FreeBSD/
HTTP- сервер Apache поддерживает rsync только для обновления зеркал. [ 25 ]
$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /path/to/mirror
Предпочтительный (и самый простой) способ отразить веб-сайт 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 interprets ":" as separator between host and port (i.e. host:port), so we cannot use %T or %H:%M:%S here, so we use %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"} / /path/to/backup/folder
Удалите все файлы и каталоги внутри каталога очень быстро:
# Make an empty directory somewhere, which is the first path, and the second path is the directory you want to empty.
$ 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
или --extended-attributes
переключатель, который позволяет сохранять большую часть метаданных файла HFS+ при синхронизации между двумя компьютерами, поддерживающими эту функцию. Это достигается путем передачи ветки ресурсов вместе с вилкой данных. [ 37 ]
zsync — это инструмент, похожий на rsync, оптимизированный для большого количества загрузок на одну версию файла. zsync используется дистрибутивами Linux, такими как Ubuntu. [ 38 ] для распространения быстро меняющихся файлов бета- образов ISO . zsync использует протокол HTTP и файлы .zsync с заранее рассчитанным скользящим хешем, чтобы минимизировать нагрузку на сервер, но при этом разрешить передачу различий для оптимизации сети. [ 39 ]
Rclone — это инструмент с открытым исходным кодом, созданный на основе rsync и ориентированный на облачные и другие хранилища с высокой задержкой. Он поддерживает более 50 различных провайдеров и предоставляет интерфейс, подобный rsync, для облачного хранилища. [ 40 ] Однако Rclone не поддерживает смену контрольных сумм для частичной синхронизации файлов (двоичные различия), поскольку поставщики облачных хранилищ обычно не предлагают эту функцию, а Rclone избегает хранения дополнительных метаданных. [ 41 ]
приложения rsync
[ редактировать ]Программа | Операционная система | Бесплатное программное обеспечение | Описание | ||
---|---|---|---|---|---|
Линукс | macOS | Окна | |||
Назад во времени | Да | Нет | Нет | Да | |
BackupAssist | Нет | Нет | Да | Нет | Прямое зеркало или с историей, ВСС. |
cwRsync | Нет | Нет | Да | Нет | На основе Cygwin . |
Грсинк | Да | Да | Да [ 42 ] | Да | Графический интерфейс для rsync. |
LuckyBackup | Да | Да | Да | Да | |
клонировать | Да | Да | Да | Да | Вдохновлен rsync и поддерживает более 50 поставщиков облачных хранилищ и другие службы хранения с высокой задержкой. Фактически не использует rsync и не поддерживает скользящие контрольные суммы и частичную синхронизацию файлов. |
этот | Да | Да | Да | Да | Time rsYnc Machine – резервное копирование в стиле Time Machine – Bash скрипт |
См. также
[ редактировать ]- касинк
- Дистанционное дифференциальное сжатие
- Список номеров портов TCP и UDP
- Grsync – приложение на основе RSync, но с графическим интерфейсом пользователя.
- Сравнение программного обеспечения для синхронизации файлов
Примечания
[ редактировать ]- ^ GPL-3.0 или более поздняя с 10 июля 2007 г., предварительная версия 3.0.0pre1 от 5 октября 2007 г., стабильная версия 3.0.0 от 01 марта 2008 г.
- ^ GPL-3.0 - только с 7 июля 2007 г. по 9 июля 2007 г.
- ^ GPL-2.0 - только с 4 февраля 2007 г. по 7 июля 2007 г.
- ^ GPL-2.0 или более поздняя с 16 июня 1996 г. по 31 января 2007 г., версии от 0.1 до 2.6.9.
Ссылки
[ редактировать ]- ^ Перейти обратно: а б с Триджелл, Эндрю (19 июня 1996 г.). «Первая версия rsync — замена rcp» . Группа новостей : comp.os.linux.announce . Usenet: [электронная почта защищена] . Архивировано из оригинала 8 ноября 2011 года . Проверено 19 июля 2007 г.
- ^ Перейти обратно: а б "рсинк" . Архивировано из оригинала 27 ноября 2014 года . Проверено 28 ноября 2014 г.
- ^ «НОВОСТИ для rsync 3.3.0 (6 апреля 2024 г.)» . 6 апреля 2024 г. Проверено 7 апреля 2024 г.
- ^ Перейти обратно: а б «НОВОСТИ» .
- ^ Перейти обратно: а б «еще немного подправить текст лицензии» .
- ^ «лицензия rsync» .
- ^ «лицензия rsync» .
- ^ Перейти обратно: а б с «rsync(1) — справочная страница Linux» . linux.die.net . Архивировано из оригинала 1 января 2017 года . Проверено 2 февраля 2017 г.
- ^ Саюд, Халид (18 декабря 2002 г.). Справочник по сжатию без потерь . Эльзевир. ISBN 9780080510491 . Проверено 18 августа 2014 г.
- ^ Кэширование и распространение веб-контента: материалы 8-го международного семинара . Springer Science & Business Media. 2004. с. 316 . ISBN 9781402022579 . Проверено 18 августа 2014 г. - из Интернет-архива .
rsync широко используется.
- ^ Раш, Дэвид; Бернс, Рэндал; Rsync на месте: синхронизация файлов для мобильных и беспроводных устройств. Архивировано 13 апреля 2016 г. в Wayback Machine , факультет компьютерных наук, Университет Джонса Хопкинса.
- ^ Демпси, Берт Дж.; Вайс, Дебра (30 апреля 1999 г.). «На пути к эффективному масштабируемому механизму репликации для проекта I2-DSI». Технический отчет ТР-1999-01 . CiteSeerX 10.1.1.95.5042 .
- ^ «Bash — ускорить rsync с помощью одновременной/параллельной передачи файлов? — Stack Overflow на русском Архивировано из оригинала 6 августа 2019 года . Проверено 18 декабря 2019 г.
- ^ «Использование Rsync и SSH» . Troy.jdmz.net . Проверено 18 августа 2014 г.
- ^ «Использование и запуск зеркал» . Проект ГНУ. Архивировано из оригинала 16 апреля 2020 года . Проверено 15 апреля 2020 г.
- ^ «Как создать публичные зеркала для CentOS» . CentOS вики. Архивировано из оригинала 1 апреля 2020 года . Проверено 15 апреля 2020 г.
- ^ "rdist(1)" .
- ^ Триджелл, Эндрю; Efficient Algorithms for Sorting and Synchronization , февраль 1999 г., получено 29 сентября 2009 г.
- ^ «Склад инструментов» . Сообщество СУА . Архивировано из оригинала 6 апреля 2013 года.
- ^ «Порты FreeBSD» . Проверено 24 октября 2016 г.
- ^ «Порты NetBSD» . Архивировано из оригинала 25 октября 2016 года . Проверено 24 октября 2016 г.
- ^ «Порты OpenBSD» . Проверено 24 октября 2016 г.
- ^ См. файл README , заархивированный 10 декабря 2007 г. на Wayback Machine.
- ^ «Как зеркалировать FreeBSD (с помощью rsync)» . Freebsd.org . Проверено 18 августа 2014 г.
- ^ «Как стать зеркалом Apache Software Foundation» . Апач.орг. Архивировано из оригинала 21 августа 2014 года . Проверено 18 августа 2014 г.
- ^ «Зеркала веб-сайтов PuTTY: рекомендации по зеркалированию» . Chiark.greenend.org.uk. 20 декабря 2007 г. Архивировано из оригинала 19 августа 2014 г. Проверено 18 августа 2014 г.
- ^ «Rsync настроен для работы как Time Machine» . Блог.interlinked.org. Архивировано из оригинала 15 ноября 2007 года . Проверено 18 августа 2014 г.
- ^ «Полное резервное копирование системы с помощью rsync» . wiki.archlinux.org. Архивировано из оригинала 11 февраля 2015 года . Проверено 15 декабря 2014 г.
- ^ «Как работает Rsync» . Архивировано из оригинала 16 декабря 2016 года . Проверено 24 января 2017 г.
- ^ «RSync – Обзор» . Архивировано из оригинала 10 апреля 2017 года . Проверено 9 апреля 2017 г.
- ^ НОВОСТИ для rsync 3.0.0. Архивировано 20 марта 2008 г. на Wayback Machine (1 марта 2008 г.).
- ^ Норман Рэмси. Алгоритм Rsync
- ^ rdiff-резервная копия
- ^ Перейти обратно: а б Пул, Мартин; "librsync". Архивировано 9 декабря 2013 г. в Wayback Machine.
- ^ Чен, Гилберт. "acrosync-библиотека" . github.com. Архивировано из оригинала 10 февраля 2017 года . Проверено 22 июня 2016 г.
- ^ «acrosync.com» . Архивировано из оригинала 20 декабря 2019 года . Проверено 29 июля 2020 г.
- ^ «Библиотека разработчиков Mac» . Разработчик.apple.com. Архивировано из оригинала 26 сентября 2012 года . Проверено 18 августа 2014 г.
- ^ «Образ компакт-диска Zsync» . Ubuntu.com . Проверено 6 января 2015 г.
- ^ сайт zsync
- ^ Крейг-Вуд, Ник. «Обзор облачных систем хранения данных» . rclone.org . Архивировано из оригинала 4 октября 2017 года . Проверено 10 июля 2017 г.
- ^ Крейг-Вуд, Ник. «Часто задаваемые вопросы по Rclone» . rclone.org . Архивировано из оригинала 10 мая 2022 года . Проверено 13 мая 2022 г.
- ^ «Grsync для Windows» . СоурсФордж . 12 июля 2016 г. Архивировано из оригинала 24 марта 2019 г. . Проверено 24 марта 2019 г.
Внешние ссылки
[ редактировать ]- программное обеспечение 1996 года
- Программное обеспечение резервного копирования для Linux
- Синхронизация данных
- Бесплатное программное обеспечение для резервного копирования
- Бесплатная программа для передачи файлов
- Бесплатное сетевое программное обеспечение
- Бесплатное программное обеспечение, написанное на C.
- Сетевые протоколы передачи файлов
- Сетевое программное обеспечение Unix