rsync - rsync

rsync
Newrsynclogo.png
Автор (ы) оригинала Эндрю Триджелл , Пол Маккеррас
Разработчики) Уэйн Дэвисон
Первый выпуск 19 июня 1996 г . ; 25 лет назад ( 1996-06-19 )
Стабильный выпуск
3.2.3  Отредактируйте это в Викиданных / 7 августа 2020 г . ; 14 месяцев назад ( 7 августа 2020 г. )
Предварительный выпуск
3.2.3pre1  Отредактируйте это в Викиданных / 28 июля 2020 г . ; 14 месяцев назад ( 28 июля 2020 г. )
Репозиторий
Написано в C
Платформа Кроссплатформенность
Тип Передача данных , дифференциальное резервное копирование
Лицензия 2007: GPL-3.0 или новее
2007: только GPL-3.0
2007: только GPL-2.0
1996: GPL-2.0 или новее
Веб-сайт rsync .samba .org Отредактируйте это в Викиданных

rsync - это утилита для эффективной передачи и синхронизации файлов между компьютером и внешним жестким диском, а также между компьютерами в сети путем сравнения времени модификации и размеров файлов. Он обычно встречается в Unix-подобных операционных системах и находится под лицензией GPL-3.0 или более поздней версии .

Rsync написан на C как однопоточное приложение. Алгоритм rsync - это тип дельта-кодирования , который используется для минимизации использования сети. Zlib может использоваться для дополнительного сжатия данных , а SSH или stunnel можно использовать для безопасности. Rsync - это средство, обычно используемое для синхронизации репозиториев программного обеспечения на зеркальных сайтах, используемых системами управления пакетами . Это также один из самых быстрых способов удаления большого количества файлов с помощью двоичного приложения, особенно по сравнению со стандартными приложениями Linux rm и find .

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

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

История

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

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

Использовать

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

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

rsync [OPTION] … SRC … [USER@]HOST:DEST
rsync [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/

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

$ rsync -avz --delete --safe-links rsync.apache.org::apache-dist /path/to/mirror

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

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

Способ имитировать возможности Time Machine (macOS) .

$ 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

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

 $ 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, возможно, используя прокси.

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

Алгоритм

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

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

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

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

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

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

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

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

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

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

Вариации

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

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

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

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

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

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

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

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

приложения rsync

Программа Операционная система Бесплатно программное обеспечение Описание
Linux macOS Окна
Назад во времени да Нет Нет да
BackupAssist Нет Нет да Нет Прямое зеркало или с историей, VSS.
cwRsync Нет Нет да Нет На основе Cygwin .
Grsync да да да да Графический интерфейс для rsync.
GS RichCopy 360 Нет Нет да Нет Предназначен только для рабочих станций и серверов MS Windows с поддержкой VSS.
LuckyBackup да да да да
rclone да да да да Вдохновленный rsync, он поддерживает более 50 поставщиков облачных хранилищ и другие сервисы хранения с высокой задержкой.
rsnapshot да да Нет да Утилита создания снимков файловой системы на основе rsync.
Syncrify да да да Нет Использует rsync через HTTP (S).

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

Примечания

использованная литература

внешние ссылки