Инструменты пользователя

Инструменты сайта


rsync

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

rsync [2018/07/18 08:40] (текущий)
Строка 1: Строка 1:
 +====== rsync ======
  
 +~~Title: Использование rsync в примерах ~~
 +{{htmlmetatags>​
 +metatag-description=(Примеры использования утилиты rsync в скриптах Linux. Как работает rsync.)
 +}}
 +
 +{{:​rsync.png?​nolink&​200|}}
 +
 +
 +**rsync** (англ. Remote Synchronization) - программа для UNIX- подобных систем,​ которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика,​ используя кодировку данных при необходимости. Важным отличием rsync от многих других программ/​протоколов является то, что зеркалирование осуществляется одним потоком в каждом направлении (а не по одному или несколько потоков на каждый файл). rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию.
 +
 +Демон rsyncd, реализующий протокол rsync, по умолчанию использует [[TCP]] порт 873.
 +
 +  * **Алгоритм**
 +Утилита rsync использует алгоритм,​ разработанный австралийским программистом Эндрю Триджеллом,​ для эффективной передачи структур (например,​ файлов) по коммуникационным соединениям в том случае,​ когда принимающий компьютер уже имеет отличающуюся версию этой структуры. Принимающий компьютер разделяет свою копию файла на неперекрывающиеся куски фиксированного размера S, и вычисляет контрольную сумму для каждого куска: MD4-хеш и более слабый rolling checksum, и отправляет их серверу,​ с которым синхронизируется. Сервер,​ с которым синхронизируются,​ вычисляет контрольные суммы для каждого кусочка размера S в своей версии файла, в том числе перекрывающиеся куски. Это может быть эффективно подсчитано ввиду особого свойства rolling checksum: если rolling checksum байт от n до n+S-1 равняется R, то rolling checksum байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала. Таким образом,​ если уже подсчитана rolling checksum байт 1-25, то для подсчета rolling checksum байт 2-26 используется предыдущая контрольная сумма и байты 1 и 26.
 +
 +  * **Rsync ​ находит файлы, которые нужно отправить,​ используя ​ "quick check" алгоритм (алгоритм используется по умолчанию),​ ищутся файлы, которые изменились в размере,​ или в дате последней модификации.**
 +  * **Обратите внимание,​ rsync должен быть установлен на обоих узлах, ​ локальном и удалённом.**
 +
 +  * **Применение**. rsync была создана как замена для rcp и scp. Одним из первых применений rsync стало зеркалирование или резервное копирование клиентских Unix- систем на центральный Unix- сервер с использованием rsync/​[[ssh]] и обычной учётной записи Unix. С планировщиком задач, таким как [[cron]], возможно организовать автоматизированное основанное на rsync зеркалирование по защищённому криптографически каналу между многими компьютерами и центральным сервером.
 +
 +===== Ключи запуска rsync =====
 +  * **Пример**:​ Локальные директории. Рекурсивно синхронизируется содержимое папки dir_a (если на конце исходной директории стоит «/», то это означает копирование содержимого директории;​ отсутствие слеша означает копирование директории и ее содержимого.) c директорией dir_b. Файлы передаются в "​аrchive"​ режиме,​ который обеспечивают,​ что при трансфере будут сохранены символьные ссылки,​ файлы устройств,​ атрибуты,​ права, полномочия доступа и т.д. Использовано сжатие,​ для уменьшения размера передаваемых данных. В директории dir_b удаляются файлы отсутствующие в источнике (dir_a). <​code>​rsync -avz --delete /src/dir_a/ /​data/​dir_b</​code>​
 +  * **Пример**:​ Удаленная директория синхронизируется с локальной директорией:​ <​code>​rsync -az -e ssh --delete 192.168.1.14:/​home/​pub_remote/​ /​home/​pub_local</​code>​
 +  * **Пример**:​ передача ключа идентификации ssh через командную строку<​code>​rsync -avz --delete --exclude=**/​stats --exclude=**/​error --exclude=**/​files/​pictures -e "ssh -i /​root/​rsync/​mirror-rsync-key"</​code>​
 +  * **-n, --dry-run** Отладочный режим. В этом случае,​ rsync не будет менять или удалять файлы, но покажет весь ход работы. ​
 +  * **-q, --quiet** Опция уменьшает количество выводимой информации во время трансфера,​ значительно подавляется количество сообщений от сервера. Опция полезна,​ когда rsync запускается по крону. ​
 +  * **-v, --verbose** Опция увеличивает количество выводимой информации во время трансфера. По умолчанию rsync ничего не выводит. Одна -v опция даст вам информацию о том, какие файлы переносятся и короткое заключение в конце. Две опции -v дадут информацию о том, какие файлы переносятся,​ какие не требуют обновления и немного больше информации в конце. Более чем две опции -v используются при отладке rsync. Формат вывода файлов по умолчанию задан, как -out-format "​%n%L",​ он показывает только имена файлов и если объект является ссылкой,​ то на что он ссылается. На первом уровне отладки (одна -v ) не показывается смена атрибутов файла. ​ Если вы попросите детализированный список изменившихся атрибутов( ​ указать опцию -itemize-changes,​ либо добавить "​%i"​ к -out-format ), то вывод (в клиенте) увеличится до упоминания всех пунктов,​ которые изменились. Смотрите опцию -out-format для получения более подробной информации.
 +  * **-a, --archive** Равносильно -rlptgoD. Это быстрый способ сказать,​ что вы хотите рекурсивную обработку и сохранить практически всё(c опцией -H будет заметным упущением). ​ Единственным исключением из вышеупомянутой равносильности,​ это когда указан -files-from , в случае которого опция -r не работает. Обратите внимание,​ что опция -a не сохраняет жёсткие ссылки,​ потому что поиск множественно-символьных файлов,​ требует много затрат. Необходимо отдельно использовать опцию ​ -H.
 +  * **--no-OPTION** Вы можете отключить одну или несколько опций, подставив перед названием опции префикс "​no-"​. Не ко всем опциям может быть пременён этот префикс:​ только к опциям,​ которые вытекают из других опций (например -no-D, -no-perms) или имеют разные обязательства в различных обстоятельствах (например -no-whole-file,​ -no-blocking-io,​ -no-dirs). Вы можете указать длинные или короткие опции после префикса (например -no-R или -no-relative). Например:​ если вы хотите использовать опцию -a (-archive) но не хотите -o (-owner), вместо превращения -a в -rlptgD, вы можете указать -a -no-o (или -a -no-owner). Порядок расположения опций важен: если вы укажете -no-r -a, опция -r всё равно будет включена,​ необходимо указывать -a -no-r. Обратите внимание,​ что побочный эффект опции ​ -files-from НЕ позиционный,​ в то время как она влияет на состояние по умолчанию в нескольких опциях и слегка меняет смысл опции ​  -a (смотрите опцию -files-from для получения более подробной информации)
 +  * **-z, --compress** с этим параметром rsync сжимает все передаваемые данные файлов. Это полезно на медленных линиях. Метод сжатия,​ используемый при этом, тот же, что реализует gzip. Заметьте,​ что при этом обычно достигается лучший коэффициент сжатия,​ чем может быть достигнут,​ используя сжатие программ удаленной оболочки или сжатие транспортного уровня,​ т.к. в процесс сжатия вовлекается вся информация,​ посылаемая в соответствующих блоках данных.<​code>​
 +     ​--compress-level=NUM ​   explicitly set compression level
 +     ​--skip-compress=LIST ​   skip compressing files with suffix in LIST</​code>​
 +  * **-b, --backup** делать бэкапы<​code>​
 +     ​--backup-dir=DIR ​       делать бэкапы в указанную директорию
 +     ​--suffix=SUFFIX ​        ​суффикс бэкапов (по умолчанию ~ )</​code>​
 +  * **--numeric-ids** Вместо имен групп и пользователей посылаются их числовые id и ставятся в соответствие друг другу на обоих концах. По умолчанию rsync использует имена групп и пользователей для определения владельца файлов. Специальные uid 0 и gid 0 никогда не отображаются через имена пользователей/​групп,​ даже если не указана --numeric-ids. ​
 +    Если исходная система работает в ограниченном chroot-окружении или если пользователь или группа не существуют на приемной стороне,​ то используются исходные числовые id.
 +  * **-c, --checksum** Меняет способ проверки на изменившиеся файлы. Без этой опции, rsync использует "quick chech" алгоритм (установлен по умолчанию),​ который проверяет различие в размере и времени модификации файлов. Эта опция меняет алгоритм на сравнивание по 128-разрядным контрольным суммам MD4 для каждого файла, который соответствует размеру. Составление контрольных сумм означает,​ что обе стороны будут тратить много дискового ввода/​вывода читая все данные в передаваемых файлах( и это перед любым чтением,​ которое будет для передачи изменившихся файлов),​ так что это может значительно замедлить работу. Посылающая сторона генерирует контрольные суммы, в то время как она делает сканирование файловой системы,​ что составляет список доступных файлов. Получатель генерирует контрольные суммы, когда он просматривает на изменившиеся файлы, и проверяет контрольные суммы любого файла, который имеет такой же размер,​ как и у соответствующего посылаемого файла: файлы с изменившемся размером или изменившейся контрольной суммой выбираются для передачи. Обратите внимание,​ rsync всегда проверяет,​ что каждый переданный файл был правильно восстановлен на принимающей стороне,​ делает он это проверкой всей контрольной суммы файла, что была сгенерирована во время передачи файла.
 +  * **-e**, --rsh=COMMAND -можно указать любую удалённую оболочку ([[ssh]], [[rsh]], [[remsh]]), либо задать переменную окружения RSYNC_RSH.<​code>​
 +     ​--rsync-path=PROGRAM ​   specify the rsync to run on remote machine
 +     ​--existing ​             skip creating new files on receiver
 +     ​--ignore-existing ​      skip updating files that exist on receiver
 +     ​--remove-source-files ​  ​sender removes synchronized files (non-dir)
 +     ​--del ​                  an alias for --delete-during
 +     ​--delete ​               delete extraneous files from dest dirs. удалять из бэкапа файлы, которых уже нет на стороне источника
 +     ​--delete-before ​        ​receiver deletes before transfer (default)
 +     ​--delete-during ​        ​receiver deletes during xfer, not before
 +     ​--delete-delay ​         find deletions during, delete after
 +     ​--delete-after ​         receiver deletes after transfer, not before “-after” означает,​ что удалить файлы нужно, только после окончания синхронизации.
 +     ​--delete-excluded ​      also delete excluded files from dest dirs
 +     ​--ignore-errors ​        ​delete even if there are I/O errors. Удалить даже при наличии ошибок ввода/​вывода.
 +     ​--force ​                force deletion of dirs even if not empty
 +     ​--max-delete=NUM ​       don't delete more than NUM files
 +     ​--max-size=SIZE ​        ​don'​t transfer any file larger than SIZE
 +     ​--min-size=SIZE ​        ​don'​t transfer any file smaller than SIZE
 +     ​--partial ​              keep partially transferred files
 +     ​--partial-dir=DIR ​      put a partially transferred file into DIR
 +     ​--delay-updates ​        put all updated files into place at end
 +</​code>​
 +<​note>​-delete отличается от –delete-after тем, что удаление производится вначале,​ а не на завершающей стадии процесса бэкапа. –delete-after работает быстрее,​ так как не требует лишней стадии обхода списка файлов,​ но требует использования опции --force для обработки таких ситуаций как удаление файла и появление директории с тем же именем;</​note>​
 +
 +===== Шаблоны исключения =====
 +
 +{{ ::​sync-new-changed-files-rsync.png?​nolink&​600 |}}
 +
 +Шаблоны исключения и включения,​ будучи заданными,​ позволяют гибко выделять,​ какие файлы должны передаваться,​ а какие должны быть пропущены.
 +
 +rsync строит упорядоченный список на основе параметров --include/​--exclude,​ указанных в командной строке. Rsync проверяет каждое имя файла или каталога относительно соответствия каждому шаблону включения/​исключения. В действие вступает первое же совпадение. Если совпавший шаблон исключающий,​ то соответствующий файл пропускается. Если шаблон включающий,​ то не пропускается. При отсутствии подходящих шаблонов к имени файла он также не пропускается.
 +
 +Имена файлов проверяемых по таким шаблонам задаются относительно каталога назначения,​ "​верхнего каталога",​ так что шаблоны необязательно должны включать элементы исходного или конечного каталогов. Единственный случай,​ когда шаблоны будут проверяться относительно абсолютных путей к файлам или каталогам,​ - это случай,​ когда исходным путем является корневой каталог файловой системы.
 +
 +Заметьте,​ что при использовании параметра -r (он подразумевается при -a) каждая отдельная часть каждого пути просматривается сверху вглубь,​ так что шаблоны включения/​исключения применяются рекурсивно к каждой такой части.
 +
 +**Также обратите внимание,​ что параметры --include и --exclude допускают только по одному шаблону каждый. Для добавления множества шаблонов используйте параметры --include-from и --exclude-from или множество параметров --include и --exclude соответственно**.
 +
 +Шаблоны могут быть заданы в нескольких формах. Правила для них таковы:​
 +  * Если шаблон начинается с /, то он проверяется на соответствие с началом имени файла, в противном случае - относительно завершающей части имени. Это эквивалент начального ^ в регулярных выражениях. Таким образом,​ "/​foo"​ должен соответствовать файлу с именем "​foo"​ в вершине передаваемого дерева. С другой стороны,​ "​foo"​ должен соответствовать любому файлу "​foo"​ везде в пределах дерева каталогов,​ потому что алгоритм применяется рекурсивно сверху вглубь. Он работает так, как если бы каждая составная часть пути была завершением имени файла. Начальный / не превращает шаблон в абсолютный путь. ​
 +  * Если шаблон заканчивается на /, то он соответствует только каталогу,​ не файлу, не ссылке и не устройству. ​
 +  * Если шаблон содержит символы подстановки из набора *?[ , то при проверке соответствия используются правила подстановки командной оболочки для имен файлов. В противном случае используется просто соответствие строке.
 +  * В соответствия двойной звёздочки входит слэш, в то время как для одиночной звездочки * на слэше совпадение заканчивается. ​
 +  * Если шаблон содержит слэш ​ (не считая завершающего слэша) или "​**"​ , то такой шаблон проверяется на соответствие полному имени файла, включая любые вышестоящие каталоги. Если шаблон не содержит / или "​**",​ то такой шаблон проверяется относительно завершающей части имени файла. Еще раз, помните,​ что алгоритм применяется рекурсивно,​ так что "​полным именем файла"​ может оказаться в действительности любая часть пути в глубине иерархии от начального каталога.
 +  * Если шаблон начинается на "+ " (плюс с последующим пробелом),​ то это всегда рассматривается как включающий шаблон,​ даже если указан как часть параметра исключения. Сама часть "+ " не учитывается при проверке на соответствие.
 +  * Если шаблон начинается на "- " (минус с последующим пробелом),​ то это всегда рассматривается как исключающий шаблон,​ даже если он фигурирует как часть параметра включения. Сама часть "- " не учитывается при проверке на соответствие. ​
 +  * Если шаблоном указан одиночный восклицательный знак ! , то текущий список включения/​исключения сбрасывается удалением всех ранее определённых шаблонов. ​
 +
 +Правила +/- наиболее полезны в списках,​ читаемых из файла, позволяя Вам иметь один общий список,​ который содержит как исключающие,​ так и включающие шаблоны.
 +
 +Если Вы завершите исключающий список указанием --exclude '​*',​ то обратите внимание,​ что из-за рекурсивного характера алгоритм остановится на родительских каталогах и не будет пробовать файлы внутри них за исключением тех случаев,​ когда Вы явно укажете включать родительские каталоги файлов,​ которые Вы хотите включить. Для включения всех каталогов используйте --include '​*/'​ до --exclude '​*'​.
 +
 +Несколько примеров включения/​исключения:​
 +<​file>​
 +    --exclude "​*.o"​ исключить все имена файлов,​ соответствующие *.o 
 +    --exclude "/​foo"​ исключить файл с именем foo в верхнем каталоге ​
 +    --exclude "​foo/"​ исключить любой каталог с именем foo 
 +    --exclude "/​foo/​*/​bar"​ исключить любой файл с именем bar в двух уровнях вглубь по иерархии от
 +каталога "​foo"​ в вершине дерева ​
 +    --exclude "/​foo/​**/​bar"​ исключить любой файл с именем bar в двух и более уровнях вглубь
 +по иерархии от верхнего каталога "​foo" ​
 +    --include "​*/"​ --include "​*.c"​ --exclude "​*"​ включить только каталоги и файлы с Си-исходниками ​
 +    --include "​foo/"​ --include "​foo/​bar.c"​ --exclude "​*"​ включит только foo/bar.c (каталог foo/ нужно включать явно, иначе он будет пропущен из-за "​*"​)
 +</​file> ​
 +
 +
 +===== Коды завершения =====
 +  0     ​Успешно ​
 +  1     ​Синтаксическая ошибка или ошибка использования ​
 +  2     ​Несовместимость протоколов ​
 +  3     ​Ошибки выбора входных/​выходных файлов и каталогов ​
 +  4     ​Запрошенное действие не поддерживается:​ была сделана попытка работы с 64-битными файлами на платформе,​
 +        которая их не поддерживает;​ или указан параметр,​ который поддерживается только клиентом и не поддерживается сервером. ​
 +  5     ​Ошибка при попытке начать работать по протоколу клиент-сервер ​
 +  10    Ошибка сокета ввода/​вывода ​
 +  11    Ошибка ввода/​вывода файла ​
 +  12    Ошибка в потоке данных rsync-протокола ​
 +  13    Ошибки при диагностике ​
 +  14    Ошибка в IPC-коде ​
 +  20    Получены сигналы или SIGUSR1, или SIGINT ​
 +  21    Вызов waitpid() возвращает ошибку ​
 +  22    Error allocating core memory buffers ​
 +  23    Незавершенная передача из-за ошибки ​
 +  24    Незавершенная передача из-за пропадания исходного файла ​
 +  30    Время ожидания при передаче/​приеме данных ​
 +
 +===== Переменные окружения =====
 +  CVSIGNORE ​   Переменная окружения CVSIGNORE дополняет исключающие шаблоны из файла .cvsignore. За деталями см. параметр --cvs-exclude. ​
 +  RSYNC_RSH ​   Переменная окружения RSYNC_RSH позволяет переопределить программу удаленной оболочки,​ используемую rsync'​ом как транспорт.
 +               ​Параметры ​ командной строки для оболочки указываются после имени программы,​ также как и для параметра -e. 
 +  RSYNC_PROXY ​ Переменная окружения RSYNC_PROXY позволяет указать rsync-клиенту использовать web-прокси для подключения к rsync-серверу.
 +               Вы должны указать прокси в виде пары hostname:​port . 
 +  RSYNC_PASSWORD ​   Установка значения RSYNC_PASSWORD позволяет осуществить rsync-соединение к rsync-серверу без вмешательства
 +                    пользователя для ввода ​   пароля. Заметьте,​ что это не тоже самое,
 +                    что и пароль для транспортной оболочки,​ например,​ ssh. 
 +  USER или LOGNAME ​   Переменные окружения USER или LOGNAME используются для определения пользователя по умолчанию,​
 +                      имя которого предоставляется rsync-серверу для аутентификации. ​
 +  HOME    Переменная HOME используется для поиска пользовательского файла .cvsignore.
 +
 +====== Примеры скриптов rsync ======
 +<file bash>
 +#!/bin/bash
 +
 +# полный путь к вашему списку каталогов
 +BACKUP_LST=/​etc/​backup/​backup.lst
 +
 +cat ${BACKUP_LST} | while read Res; do
 +    rsync -e ssh -acq --delete --force $Res backup@B:/​var/​backup$Res
 +done
 +</​file>​
 +====== Ссылки ======
 +  * [[http://​www.opennet.ru/​man.shtml?​topic=rsync&​category=1&​russian=0|Русские man: rsync]]
 +  * [[http://​samba.anu.edu.au/​ftp/​rsync/​rsync.html|rsync 24 Dec 2009]]
 +  * [[http://​ru.wikipedia.org/​wiki/​Rsync|Rsync Материал из Википедии]]
 +  * [[http://​unixstuff.ru/​2009/​02/​rsync.html|Блог посвящённый unix документации:​rsync]]
 +  * [[http://​www.opennet.ru/​tips/​info/​1768.shtml|Полезные рецепты при работе с rsync]].
 +  * [[http://​www.webnext.ru/​blog/​2007/​07/​02/​rsync-howto.html|Rsync - современный способ синхронизации файлов]]
загрузка...
rsync.txt · Последние изменения: 2018/07/18 08:40 (внешнее изменение)