Как настроить смартфоны и ПК. Информационный портал

Копирование rsync linux. Статусы завершения Rsync

Мартин Стрейчер (Martin Streicher)
Опубликовано 11.02.2010

Серия контента:

За последние 20 лет применение компьютерных сетей стало чрезвычайно широким. Это произошло главным образом благодаря развитию Интернет, инвестициям в национальную и международную сетевую инфраструктуру и падению цен на сетевое и компьютерное оборудование. Сегодня сети являются повсеместными, и всё новые приложения увеличивают требования к масштабируемости и скорости сетей. Когда-то Интернет начинался с нескольких небольших рабочих станций , но сейчас он и его частные аналоги соединяют бесчисленное количество компьютеров.

Часто используемые сокращения
  • FTP : File Transfer Protocol (протокол передачи файлов)
  • WebDAV : Web-based Distributed Authoring and Versioning (основанный на Web, распределенный протокол с поддержкой авторства и версионности файлов)

На протяжении этого же периода UNIX® также рос и предлагал для использования все более мощное ПО. Протокол FTP был одним из первых инструментов для обмена файлами между системами, он широко распространен и в наши дни. Команда rcp (сокращение от "remote copy" – удаленное копирование) была шагом вперед по сравнению с FTP, так как она не только предоставляла возможности стандартной утилиты cp , но и копировала файлы с одной машины на другую. rdist , основанная на rcp , автоматически распространяла файлы с одной машины на множество систем.

Сегодня все эти инструменты устарели, например, rcp и rdist не обеспечивают безопасность при передаче файлов. Теперь их место занимает scp . Хотя FTP все так же широко распространен, но везде, по возможности, следует использовать SFTP (Secure FTP), безопасную версию FTP. Есть также и другие возможности для обмена файлами, например WebDAV и BitTorrent™. Конечно, чем больше машин у вас есть, тем сложнее поддерживать их в синхронизованном или хотя бы известном состоянии. При работе с scp и WebDAV для этого необходимо написать свой собственный сценарий, выполняющий синхронизацию.

Идеальным инструментом для распределения файлов является rsync . Он умеет возобновлять передачу файлов после разрыва соединения, передает только те куски файла, которые различаются в исходном файле и его копии назначения, а также может выполнять полное или инкрементное резервное копирование. Кроме того, он доступен на всех разновидностях UNIX, в том числе Mac OS X, благодаря чему с его помощью можно легко связать практически любые версии UNIX.

Для знакомства с rsync сначала рассмотрим типичные варианты его использования, а затем перейдем к более сложным возможностям его применения. Для демонстрации работы rsync я буду использовать Mac OS X версии 10.5, Leopard (разновидность FreeBSD) и Ubuntu Linux® версии 8. Если вы используете другую операционную систему, то есть возможность перенести большинство примеров и на нее; обращайтесь к странице руководства (man) rsync на вашей машине чтобы узнать, поддерживаются ли у вас используемые здесь операции, и при необходимости попытаться найти аналог.

Знакомимся с rsync

Так же как cp , rsync копирует файлы из одного места в другое. В отличие от cp , rsync может осуществлять как локальное, так и удаленное копирование. Например, команда, приведенная в , копирует директорию /tmp/photos со всем ее содержимым в домашнюю директорию.

Листинг 1. Копируем директорию и ее содержимое
$ rsync -n -av /tmp/photos ~ building file list ... done photos/ photos/Photo 2.jpg photos/Photo 3.jpg photos/Photo 6.jpg photos/Photo 9.jpg sent 218 bytes received 56 bytes 548.00 bytes/sec total size is 375409 speedup is 1370.11

Параметр -v включает вывод подробных сообщений. Параметр -a (здесь a обозначает архив), является краткой формой записи параметров -rlptgoD , обозначающих, что нужно выполнять рекурсивное (recurse) копирование, копируя символические ссылки как символические ссылки (links), сохраняя у всех файлов права доступа (permissions), время создания (times), группу(group) и владельца файла (owner), а также сохраняя файлы устройств и специальные файлы (devices). Обычно ключ -a создает зеркальную копию файлов за исключением случаев, когда система, на которую выполняется копирование, не поддерживает какие-либо атрибуты копируемых файлов. Например, при копировании директории с UNIX на Windows® не всегда удается идеально отобразить атрибуты. Ниже приводятся несколько предложений для работы в нестандартных ситуациях.

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

Листинг 7. Копируем файлы на локальную машину
rsync --port=7777 mymachine.example.com::pickup/ Hello! Welcome to Martin"s rsync server. drwxr-xr-x 4096 2009/08/23 08:56:19 . -rw-r--r-- 0 2009/08/23 08:56:19 article21.html -rw-r--r-- 0 2009/08/23 08:56:19 design.txt -rw-r--r-- 0 2009/08/23 08:56:19 figure1.png

Поменяв местами адреса источника и назначения, можно записать в модуль файл(ы) с локальной машины, как показано в .

Листинг 8. Меняем местами директории источника и назначения
$ rsync -v --port=7777 application.js mymachine.example.com::dropbox Hello! Welcome to Martin"s rsync server. application.js sent 245 bytes received 38 bytes 113.20 bytes/sec total size is 164 speedup is 0.58

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

Организуем резервное копирование своих данных с помощью rsync

Регулярное сохранение резервных копий является необычайно важной, но, как правило, игнорируемой рутинной работой. Ни длительность процедуры резервного копирования, ни потребность в наличии большого внешнего хранилища файлов, ни что-либо другое не могут являться оправданием; копирование данных для обеспечения их сохранности должно быть ежедневной процедурой.

Чтобы сделать эту задачу безболезненной, используйте для резервного копирования rsync и удаленный сервер, возможно, предоставляемый вашим провайдером. Каждая из ваших UNIX-машин может использовать этот механизм, который является идеальным решением для безопасного хранения ваших данных.

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

Листинг 9. Создаем ежедневные резервные копии файлов
#!/bin/sh # This script based on work by Michael Jakl (jakl.michael AT gmail DOTCOM) and used # with express permission. HOST=mymachine.example.com SOURCE=$HOME PATHTOBACKUP=home-backup date=`date "+%Y-%m-%dT%H:%M:%S"` rsync -az --link-dest=$PATHTOBACKUP/current $SOURCE $HOST:PATHTOBACKUP/back-$date ssh $HOST "rm $PATHTOBACKUP/current && ln -s back-$date $PATHTOBACKUP/current"

Замените HOST именем вашего сервера резервного копирования, а SOURCE – директорией, которую вы хотите сохранять. Замените PATHTOBACKUP на имя модуля. (Также три последние строки сценария можно заключить в цикл и, изменяя переменную SOURCE , делать резервные копии множества директорий). Данный сценарий работает следующим образом.

  • Сначала в переменную date помещается строка вида 2009-08-23T12:32:18 , содержащая текущую дату и время; эта строка будет уникально идентифицировать каждую резервную копию.
  • Главную работу здесь выполняет команда rsync. Параметры -az сохраняют всю информацию о файлах и выполняют сжатие данных перед их передачей, а параметр --link-dest=$PATHTOBACKUP/current указывает, что если какой-либо файл не менялся, нужно не копировать его в новый экземпляр резервной копии, а создать жесткую ссылку, указывающую на этот файл в существующем архиве. Другими словами, новая резервная копия содержит только файлы, претерпевшие изменения , остальные файлы являются ссылками.

    Рассмотрим сценарий более подробно (и подставим вместо всех переменных их значения). Текущим архивом является mymachine.example.com::home-backup/current . Новый архив для каталога /home/strike будет находиться в каталоге mymachine.example.com::home-backup/back-2009-08-23T12:32:18 . Если файл в /home/strike не был изменен, то файл в новом архиве будет представлен жесткой ссылкой на соответствующий файл в текущем архиве. В противном случае новый файл копируется в новый архив.

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

  • В последнем шаге мы изменяем организацию резервных копий на удаленной машине, чтобы сделать вновь созданный архив текущим архивом и таким образом минимизировать различия, которые нужно будет записать во время следующего выполнения сценария. В последней команде удаляется текущий архив, (который является просто жесткой ссылкой) и создается символическая ссылка с тем же именем, указывающая на новый архив.

Начав работать с удаленным rsync в повседневных задачах, вам, вероятно, понадобится, чтобы демон был всегда в рабочем состоянии. Для Linux- и UNIX-машин имеется загрузочный сценарий rsync , который обычно находится по адресу /etc/init.d/rsync . Воспользовавшись этим сценарием и утилитой вашей операционной системы, управляющей включением и выключением компонентов, можно организовать запуск rsync при загрузке системы. Если же вы запускаете демон rsync без привилегий суперпользователя или у вас нет доступа к загрузочным сценариям, то вы можете запускать rsync с помощью cron:

@reboot /usr/bin/rsync --daemon --port=7777 --config=/home/strike/rsyncd/rsyncd.conf

Эта команда запускает демон каждый раз при перезагрузке машины. Поместите эту строку в файл crontab и сохраните его.

Вы уже видели, как можно заранее обнаружить проблему, используя предварительный просмотр с помощью -n . Также можно отслеживать состояние задач rsync с помощью двух параметров: --progress и --stats . Первый из этих параметров отображает шкалу хода выполнения задания. Второй показывает статистику сжатия и передачи данных. С помощью --compress можно ускорить передачу данных между машинами. Вместо пересылки данных в изначальном виде отправитель выполняет сжатие перед отправкой, а получатель их распаковывает, и в результате меньшее количество байтов передается за меньшее время.

По умолчанию rsync копирует все файлы из источника данных в место назначения. Это называется дублированием. Если вы хотите организовать зеркалирование данных, т.е. чтобы локальные и удаленные данные в точности совпадали, следует использовать параметр --delete . Например, если в источнике имеются файлы A, B и C, то по умолчанию rsync создаст на удаленной машине копии всех трех файлов. Однако если удалить из источника, например, файл B и выполнить дублирование еще раз, то на удаленной машине файл B останется, т.е. удаленная копия перестанет быть точной копией локальных данных. Команда --delete обеспечивает зеркалирование данных, убирая из удаленной копии файлы, которые уже не существуют в исходных данных.

Зачастую имеются файлы, которые вы не хотели бы помещать в архив или резервную копию. Это могут быть вспомогательные файлы, создаваемые редакторами (их имена обычно заканчиваются тильдой [ ~ ]) и другими утилитами, а также множество не имеющих для вас ценности файлов в вашей домашней директории, таких как MP3-файлы, которые при необходимости можно будет восстановить. В таком случае можно указать rsync шаблоны, по которым он будет исключать файлы из обработки. Можно указать в командной строке шаблон или же текстовый файл, содержащий список шаблонов. Также шаблоны можно использовать совместно с командой --delete-excluded , чтобы удалить подобные файлы из удаленной копии.

Чтобы исключить файлы, соответствующие определенному шаблону, используйте команду --exclude . Помните, что если какие-либо символы в шаблоне имеют для оболочки особое значение, например * , то шаблон следует заключить в одиночные кавычки:

$ rsync -a --exclude="*~" /home/strike/data example.com::data

Допустим, что файл /home/strike/excludes содержит следующий список шаблонов:

*~ *.old *.mp3 tmp

Тогда скопировать все файлы за исключением тех, которые соответствуют какомy-либо из этих шаблонов, можно с помощью следующей команды:

$ rsync -a --exclude-from=/home/strike/excludes /home/strike/data example.com::data

Синхронизируй это

Теперь, когда вы знакомы с rsync , у вас не осталось никаких причин не выполнять регулярное резервное копирование. Что случилось? Ваша собака разгрызла жесткий диск? (Бывает и такое!) Примите меры заранее, и тогда ваши данные останутся в полном порядке. Ведь теперь все ваши ценные файлы хранятся в

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

Rsync примеры синхронизации: основное использование

Давайте создадим две директории внутри / tmp, называемые «foo» и «bar», и создадим большое количество фиктивных файлов внутри / tmp / foo

mkdir /tmp/foo /tmp/bar
for i in `seq 1 100`;do touch /tmp/foo/file$i;done

Теперь у нас есть 100 файлов в / tmp / foo; / Tmp / bar все равно не должно быть. Мы можем использовать rsync для копирования всех файлов из / tmp / foo в / tmp / bar:

rsync /tmp/foo/* /tmp/bar

Используя базовое файловое расширение, мы можем захватить все файлы и скопировать их в другой каталог. Что делать, если есть каталог внутри / tmp / foo? Он не будет передан. Нам нужно будет использовать флаг -r (-рекурсивный), чтобы пройти по каталогу, передав каждый файл внутри:

rsync -r /tmp/foo/ /tmp/bar

Это очень простой пример и даже не затрагивает реальную силу команды rsync. Существуют флаги для сохранения разрешений, владельцев, групп, символических ссылок и т. Д. Поскольку эти флаги так часто используются, флаг -a (-archive) действует как псевдоним, чтобы включить их все, включая -r.

Очистите / tmp / bar, создайте символическую ссылку на один файл в / tmp / foo и используйте rsync для рекурсивной копирования всех файлов:

find /tmp/bar -delete
ln -s /tmp/foo/file100 /tmp/foo/file101
rsync -r /tmp/foo/ /tmp/bar

Мы видим, что rsync опустил символическую ссылку, которую мы создали. Снова очистите / tmp / bar, и давайте попробуем еще раз, на этот раз с использованием флага -a:

find /tmp/bar -delete
rsync -a /tmp/foo/ /tmp/bar

Используйте chown для изменения права собственности на файл в / tmp / foo другому пользователю и скопируйте файлы, используя -a to / tmp / bar. Запустите ls -l и обратите внимание, что право собственности перемещено вместе с файлом. Удобный материал!

ПРИМЕЧАНИЕ . Существует разница между включением косой черты (/) в конце пути источника и ее отсутствием; Первый передаст все файлы ВНУТРИ указанного каталога, в то время как последний передаст сам каталог со всеми файлами внутри.

The -a Flag

Как мы и говорили ранее, в этой статье мы разберем Rsync примеры синхронизации и команды. Но для того чтобы их выполнять, нужно знать основы для набора флагов.
Ранее мы упоминали, что флаг -a (-archive) является псевдонимом для набора других флагов -rltpgoD. Сломанный, каждый флаг выполняет следующие действия:

R — Рекурсивный

L — Перенести любые обнаруженные символические ссылки

T — Сохранять метки времени

P — Сохранять разрешения

G — Сохранять группы

O — Сохранять право собственности

D — Сохранение блоков и символьных устройств

Возможно, вы захотите добавить в свою команду следующие команды для упрощения чтения файлов:

H — Удобный для чтения формат файлов

Все любят отзывы

Флаг -v (–verbose) даст вам больше информации о состоянии передачи, включая краткое изложение в конце, которое будет выглядеть примерно так:

$ rsync -av foo/ bar
building file list … done
sent 1040 bytes received 20 bytes 2120.00 bytes/sec
total size is 7 speedup is 0.01

Если вы хотите получить больше статистики, запустите rsync с флагом -stats. Это даст вам подробный список общего количества файлов, переданных файлов, контрольных показателей и даже усредненной скорости передачи. С другой стороны, -q (-quiet) будет подавлять весь вывод, который может использоваться для скриптов, когда обратная связь не требуется.

Удаленные передачи сделаны просто

Истинная сила rsync заключается в способности выполнять не только локальные передачи, но и отдаленные передачи. Если вы раньше использовали scp, синтаксис для удаленных передач очень похож:

rsync @:

В качестве примера, rsync, использующий этот синтаксис, будет выглядеть следующим образом:

rsync -avh /tmp/foo/ root@host2:/tmp/bar

Обратите внимание на: (двоеточие) между удаленным сервером и удаленным путем; Это необходимо.

Больше вариантов

Rsync поставляется с большим списком доступных опций, слишком много, чтобы переходить в одну статью. Последними флагами, которые мы рассмотрим, являются флаги -exclude, -exclude-from, -update и -delete

Исключить файлы на основе шаблона. Rsync еще не поддерживает регулярное выражение, поэтому работает только стандартное сопоставление файлов и работа с глобусами

Исключить файлы, перечисленные в файле с разделителями строк.

Обновлять файлы в месте назначения ТОЛЬКО, если исходная копия была изменена совсем недавно

Удалите файлы в месте назначения ТОЛЬКО, если исходная копия больше не существует.

Альтернативные порты SSH

Если вы изменили порт SSH на своем сервере, вам нужно будет указать rsync использовать новый номер порта.

Пример с обычным портом SSH:
rsync -azh /local/path/file [email protected]:/remote/path/file

Пример с альтернативным портом SSH (22334):
rsync -azh /local/path/file -e ‘ssh -p 22334’ [email protected]:/remote/path/file

Удаленные передачи без пароля

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

Если у Вас остались вопросы по теме «Rsync примеры синхронизации» - пишите их в комментарии. Обязательно укажите какую версию операционной системы вы используете, чтобы мы могли помочь с вашим вопросом.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter .

rsync использует соглашение о длинных именах параметров GNU. Многие из параметров командной строки имеют два варианта: один - короткий, а другой - длинный. Ниже это отражено в разделении запятой двух вариантов. Некоторые параметры имеют только длинный вариант. Знак "=" для параметров с дополнительным значением необязателен и может быть заменен на пробел.

    H, --help Печатает короткую подсказку, описывающую доступные параметры rsync

    Version Печатает номер версии rsync и завершается

    V, --verbose Этот параметр увеличивает сумму подробностей, которые выводятся в течение передачи. По умолчанию, rsync работает молча. Один -v будет иметь следствием выдачу списка переданных файлов и короткий итог в конце. Два -v раскрывают детали о пропущенных файлах и выдают несколько больше информации в завершение. Большее число может понадобится только при отладке rsync.

    Q, --quiet Уменьшает сумму подробностей о передаче, преимущественно, сообщения от удаленного сервера. Этот параметр полезен при вызове из cron.

    I, --ignore-times Обычно rsync пропускает файлы, чей размер и время модификации идентичны. Этот параметр отключает такое поведение "быстрой проверки".

    Size-only Обычно rsync пропускает файлы, чей размер и время модификации идентичны. С --size-only файлы будут пропускаться, если их размер одинаков, независимо от времени модификации. Это полезно при использовании rsync сразу после работы другой зеркалирующей системы, которая не сохранила точно времена.

    Modify-window При сравнение двух меток времени rsync рассматривает эти метки равными, если они расходятся в пределах значения modify_window. Обычно это значение ноль, но Вы можете найти полезным установку его в большую величину в некоторых случаях. На практике, при передаче на файловую систему Windows FAT, которая не может представлять время с точностью до секунды, --modify_window=1 весьма полезна.

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

Однако заметьте, что -a не сохраняет жесткие ссылки, потому что поиск многосвязных файлов дорог. Вам придется отдельно указывать -H.

    R, --relative Использовать относительные пути. Это значит, что посылаются полные пути, указанные в командной строке, а не последние части имен файлов. На практике это полезно, когда Вам нужно послать несколько различных каталогов за раз. Например, если указать команду:

rsync foo/bar/foo.c remote:/tmp/

то она создаст файл foo.c в /tmp на удаленной машине. Если вместо этого указать

Rsync -R foo/bar/foo.c remote:/tmp/

то файл создастся в /tmp/foo/bar/foo.c на удаленной машине - полный путь сохранится.

Выключает параметр --relative. Это нужно только если Вы хотите использовать параметр --files-from без подразумеваемого им поведения с включенным параметром --relative.

    No-implied-dirs

В комбинации с --relative все затрагиваемые каталоги в каждом пути явно не копируются как часть процесса передачи. Это делает передачу более оптимальной и также позволяет иметь непарные (см. пример ниже) символьные ссылки в подразумеваемых передачей путях. Например, если передается файл "/path/foo/file" с параметром -R, то по умолчанию rsync следит, чтобы "/path" и "/path/foo" в точности соответствовали каталогам/ссылкам на приемной стороне. Параметр --no-implied-dirs позволяет игнорировать несоответствие, когда "/path" - реальный каталог на одной стороне и символьная ссылка на другой. rsync не пытается с этим параметром что-либо менять в этом случае.

    B, --backup С этим параметром существовавшие до передачи файлы на приемной стороне переименовываются, как только соответствующий файл передан или удален. Вы можете контролировать, куда перемещаются файлы и какой суффикс (если нужно) добавляется к имени, используя параметры --backup-dir и --suffix.

    Backup-dir=DIR В комбинации с --backup указывает каталог, куда сохранять резервные копии. Это весьма полезно для инкрементального резервирования. Вы можете дополнительно указать суффикс с помощью --suffix (иначе резервные копии файлов будут сохранять свои исходные имена).

    Suffix=SUFFIX Этот параметр позволяет указать суффикс, отличный от суффикса по умолчанию, для резервных копий файлов при установленном --backup (-b). По умолчанию этот суффикс установлен в ~ без установки --backup-dir, установка которого сбрасывает этот суффикс в пустую строку.

    U, --update Указывает пропускать любые файлы, уже существующие на приемной стороне с более поздней датой, чем у исходных файлов.

    L, --copy-links Если обнаружена символьная ссылка, то на приемную сторону копируется файл, на который она указывает, а не такая же символьная ссылка.

    Copy-unsafe-links Копирует все объекты за пределами исходного дерева каталогов, на которые ссылаются символьные ссылки. Абсолютные символьные ссылки, а также, при выставленном --relative, любые символьные ссылки в пределах исходного дерева каталогов, рассматриваются как обычные файлы.

    Safe-links Указывает игнорировать любую символьную ссылку, которая относится к объекту за пределами конечного дерева каталогов. Все абсолютные ссылки также пропускаются. Использование этого параметра в комбинации с --relative может дать неожиданные результаты.

    H, --hard-links Указывает пересоздать жесткие ссылки на конечной стороне в соответствии с тем, что имеется на исходной. Без этого параметра жесткие ссылки обрабатываются как обычные файлы.

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

    W, --whole-file Этот параметр отключает дифференциальный алгоритм rsync"а и с ним весь файл передается как есть, целиком. Передача может происходить быстрее с этим параметром, если полоса пропускания между исходной и конечной машинами шире, чем полоса пропускания доступа к диску (особенно, если "диск" в действительности сетевая файловая система). Этот параметр включен по умолчанию, если и исходная, и конечная цели находятся локально.

    No-whole-file Выключает действие параметра --whole-file, если последний включен по умолчанию.

    P, --perms Копирует все права на приемную сторону точь в точь с оригиналом.

Без указания этого параметра каждый новый файл получает те права доступа, что имеет исходный с учетом umask, действующей на приемной стороне, в то время как все другие (включая обновляемые) сохраняют свои уже существующие разрешения (это то же поведение, что имеют другие утилиты копирования файлов, такие как cp).

    O, --owner Копирует атрибуты владельца на приемную сторону в точности с оригиналом. На большинстве систем только супер-пользователь имеет право устанавливать владельца файла. Нужно заметить, что если удаленный демон действует в chroot-окружении, то подразумевается наличие параметра --numeric-ids, потому что на удаленной стороне в этом случае нет доступа к именам пользователей в /etc/passwd.

    G, --group Копирует атрибуты группы на приемную сторону в точности с оригиналом. Если удаленная сторона не действует из-под супер-пользователя, то сохранятся только те значения групп, членом которых является пользователь приемной стороны (имеет значение имя группы, а не ее id).

    D, --devices Указывает передавать информацию о символьных и блочных устройствах для пересоздания их на приемной стороне. Доступно только супер-пользователю.

    T, --times Указывает передавать время модификации файлов и обновлять им соответствующий атрибут на приемной стороне. Обратите внимание, что если этот параметр не установлен, то становится неэффективной оптимизация передачи по исключению не изменявшихся по времени файлов; другими словами, пропуск -t или -a будет означать, что следующая передача будет осуществляться с параметром -I, для всех файлов будут сравниваться контрольные суммы, а в журнале появятся соответствующие сообщения о них, даже если они не изменялись.

    N, --dry-run Указывает не осуществлять никаких передач, а только сообщать о тех действиях, которые могли бы произойти.

    S, --sparse Пытаться эффективнее обработать фрагментацию файлов, чтобы сэкономить пространство на приемной стороне.

ЗАМЕЧАНИЕ: Не используйте этот параметр, если в точке назначения имеется файловая система "tmpfs" Solaris. Не представляется возможным правильно управлять поиском среди "дырок" (null regions), что заканчивается повреждением файлов.

    Existing Указывает не создавать никаких новых файлов - только обновить те, которые уже существуют на приемной стороне.

    Ignore-existing Указывает не обновлять файлы, которые уже существуют на приемной стороне.

    Max-delete=NUM Не удалять больше, чем NUM файлов и каталогов. Это полезно при зеркалировании очень массивных деревьев каталогов для предохранения от неприятностей.

    Delete Удалять любые файлы на приемной стороне, которых нет на передающей. Файлы, исключенные из передачи, исключаются также и из процесса удаления, если не указана --delete-excluded.

Этот параметр не оказывает никакого влияния, если не включено рекурсивное копирование каталогов. Этот параметр может быть опасным при неправильном использовании! Очень хорошим правилом может стать использование сначала холостого выполнения rsync (-n) для просмотра того, что за файлы могут удалиться и нет ли среди них важных. При возникновении каких-либо ошибок ввода-вывода на передающей стороне удаление любых файлов на приемной автоматически отключается. Это предотвращает от массивного удаления файлов на приемной стороне из-за временных ошибок файловой системы (например, NFS) на передающей. Это поведение можно отключить параметром --ignore-errors.

    Delete-excluded В дополнение к файлам, удаляемым на приемной стороне из-за отсутствия их на передающей, указывает удалять также любые исключенные параметром --exclude файлы на приемной стороне. Подразумевается наличие параметра --delete.

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

    Ignore-errors При удалении (--delete) форсирует процесс и игнорирует любые ошибки, даже ошибки ввода-вывода.

    Force Удалять каталоги при замене их не-каталогами, даже если они не пусты. Уместен только без

    Delete, потому что удаление происходит только каталогов одного уровня. Требует --recursive (который подразумевается, если -a) для значимого эффекта.

    B, --block-size=BLOCKSIZE Регулирует размер блока, используемый rsync-алгоритмом. См. техническое описание на предмет деталей.

    E, --rsh=COMMAND Позволяет выбрать альтернативную программу удаленной оболочки для осуществления соединения между удаленной и локальной копиями rsync. Обычно rsync сконфигурирован для использования ssh по умолчанию, но Вы можете предпочесть использовать rsh в локальной сети.

Если этот параметр используется с указанием пути вида host::module/path, то программа удаленной оболочки COMMAND будет использована для запуска rsync-сервера на удаленной стороне, а все данные будут передаваться через соединение удаленной оболочки, а не напрямую через соединение с rsync-сервером на "том" конце. См. раздел "ПОДКЛЮЧЕНИЕ К RSYNC-СЕРВЕРУ ЧЕРЕЗ УДАЛЕННУЮ ОБОЛОЧКУ". Аргументы командной строки для COMMAND разрешено указывать в форме, при которой COMMAND представляется для rsync в виде одного аргумента. Например:

    E "ssh -p 2234" (Заметьте, что ssh-пользователи могут альтернативно настраивать специфичные для своего окружения параметры подключения в своих.ssh/config файлах.)

Вы также можете выбирать программу удаленной оболочки через переменную окружения RSYNC_RSH, которая принимает тот же диапазон значений, что и -e. См. также --blocking-io, на которую влияет установка параметра -e.

    C, --cvs-exclude Этим параметром Вы исключаете широкий диапазон файлов, которые Вы не хотите передавать между системами. При этом используется тот же алгоритм, что использует CVS для определения игнорируемых файлов.

Список исключений изначально включает в себя:

RCS/ SCCS/ CVS/ .svn/ CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* *.old *.bak *.BAK *.orig *.rej .del-* *.a *.o *.obj *.so *.Z *.elc *.ln core затем файлы, перечисленные в $HOME/.cvsignore , добавляются к первоначальному списку, а также любые, перечисленные в переменной окружения CVSIGNORE (разделенные пробелами). В заключение, любой файл пропускается, если в том же каталоге есть файл.cvsignore, в котором есть соответствующий файлу шаблон. См. руководство по cvs(1) для дальнейшей информации. * --exclude=PATTERN Позволяет выборочно исключать определенные файлы из процесса передачи. Это наиболее полезно при рекурсивной передаче.

Вы можете использовать так много --exclude, как Вам заблагорассудится для построения произвольного списка исключаемых файлов. См. секцию "ШАБЛОНЫ ИСКЛЮЧЕНИЯ" за информацией о синтаксисе для этого параметра.

    Exclude-file=FILE Подобен параметру --exclude, но в отличие от него использует шаблоны исключаемых фалов, перечисленные в файле FILE. Пустые строки вместе со строками, начинающимися с ";" или "#", игнорируются. Если FILE указан как -, то список шаблонов читается со стандартного ввода.

    Include=PATTERN Указывает шаблоны для имен тех файлов, которые нельзя исключать из процесса. Полезен тем, что позволяет Вам строить довольно сложные правила включения/исключения.

См. секцию "ШАБЛОНЫ ИСКЛЮЧЕНИЯ" за информацией о синтаксисе для этого параметра.

    Include-from=FILE Указывает брать список обязательно включаемых в передачу файлов из файла FILE. Если FILE указан как -, то список шаблонов читается со стандартного ввода.

    Files-from=FILE Позволяет задать точный список файлов для передачи (который будет прочитан из указанного FILE или из стандартного ввода, если указан -). Это также меняет поведение rsync по умолчанию в целях облегчения процесса передачи заданных файлов и каталогов. Например, по умолчанию включается использование опции --relative (для отключения этого используйте --no-relative), на принимающей стороне создаются все указанные в списке каталоги (а не пропускаются безгласно, как если бы не использовалась опция -r), а поведение -a (--archive) не подразумевает наличие -r (--recursive) - его, при необходимости, нужно указывать явно.

Все имена файлов, прочитанные из FILE, считаются относительными к исходному каталогу -- первые слэши убираются и не допускаются ссылки "..", указывающие выше по дереву исходного каталога. Для примера рассмотрим:

    rsync -a --files-from=/tmp/foo /usr remote:/backup

Если /tmp/foo содержит строку bin (или даже "/bin"), каталог /usr/bin будет создан как /backup/bin на удаленной машине (но содержимое /usr/bin не должно передаваться, кроме тех случаев, когда объекты явно указаны в /tmp/foo, или в случае указания параметра -r). Также учитывайте, что эффект от --relative (включенный по умолчанию) касается копирования путей, прочитанных из файла, -- он не принуждает копировать полностью указанный исходный путь (/usr в примере). В дополнение, --files-from файл может быть прочитан с удаленной машины, а не локально, если указать перед именем файла "host:" (это должно соответствовать одному из концов передачи). Для краткости, можно указывать только префикс ":" для обозначения удаленного участника копирования. Например: rsync -a --files-from=:/path/file-list src:/ /tmp/copy эта команда должна скопировать все файлы указанные в файле /path/file-list, который расположен на удаленной машине "src".

    0, --from0 Говорит rsync, что имена файлов, читаемые извне, заканчиваются символом "\0", не NL, CR или CR+LF. Это касается параметров --exclude-from, --include-from, and --files-from.

    T, --temp-dir=DIR

Инструктирует использовать DIR как каталог временных копий передаваемых файлов на принимающей стороне. По умолчанию временные файлы создаются в каталоге назначения.

    Compare-dest=DIR Инструктирует использовать DIR на машине назначения как каталог, относительно содержимого которого осуществляется сравнение во время процесса передачи при условии отсутствия файлов в каталоге назначения. Это полезно для осуществления передачи в новое место, оставляя существующие файлы неприкосновенными, а затем перенося и очищая, когда все файлы были переданы (например, при перемещении каталогов в новое место и удалении старого, хотя при этом пропускаются не изменявшиеся файлы; см. также --link-dest).

Прим. переводчика: Существование этого параметра обусловлено необходимостью обновлять, например, дерево с взаимозависимыми файлами. В этом случае нежелательно осуществлять копирование на пофайловой основе. Параметр --compare-dest позволяет указывать временный каталог назначения, куда и копируются передаваемые файлы. По окончании процесса передачи rsync переименовывает оригинальное дерево назначения, затем переименовывает временный каталог DIR в оригинальный и, наконец, удаляет переименованный на первом шаге оригинальный каталог со "старыми" файлами. Этот параметр повышает полезность --partial, потому что частично переданные файлы будут оставаться в новом временном каталоге до тех пор, пока не окажутся целиком на месте. Если DIR задан как относительный путь, то он соотносится к каталогу назначения.

    Link-dest=DIR Ведет себя также, как и --compare-dest, но также создает жесткие ссылки в DIR на не изменявшиеся файлы в каталоге назначения. Файлы с измененными правами и владением не подвергаются этому. Как и в случае --compare-dest, если DIR задается относительным именем, то и действия осуществляются относительно каталога назначения.

    Z, --compress С этим параметром rsync сжимает все передаваемые данные файлов. Это полезно на медленных линиях. Метод сжатия, используемый при этом, тот же, что реализует gzip.

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

    Numeric-ids Вместо имен групп и пользователей посылаются их числовые id и ставятся в соответствие друг другу на обоих концах.

По умолчанию rsync использует имена групп и пользователей для определения владельца файлов. Специальные uid 0 и gid 0 никогда не отображаются через имена пользователей/групп, даже если не указана --numeric-ids. Если исходная система работает в ограниченном chroot-окружении или если пользователь или группа не существуют на приемной стороне, то используются исходные числовые id.

    Timeout=TIMEOUT Позволяет устанавливать максимальное время ожидания ввода-вывода в секундах. Если за указанный период ничего не передано, то работа rsync завершается. По умолчанию 0, что означает без ожидания.

    Daemon Запускает rsync как демон. Демон доступен для клиентов через синтаксис host::module или rsync:/\/host/module. Если стандартным вводом является сокет, то rsync полагает условием запуск от inetd, иначе он отключается от текущего терминала и становится фоновым процессом-демоном. Демон читает конфигурационный файл (rsyncd.conf) на каждое соединение от клиентов и соответственно отвечает на их запросы.

    No-detach При запуске демоном этот параметр инструктирует rsync не отключаться от терминала и стать фоновым процессом. Он требуется при запуске службой под Cygwin, и также может быть полезен, если rsync находится под наблюдением таких программ как daemontools или AIX"s System Resource Controller. --no-detach также рекомендуется к применению при запуске rsync под отладчиком. Этот параметр не имеет никакого эффекта при запуске от inetd или sshd.

    Address По умолчанию rsync использует групповой адрес 0.0.0.0, когда запускается как демон с --daemon или при подключениях к rsync-серверу. --address позволяет Вам указать точный IP-адрес (или хост-имя) для этого. Это делает возможным виртуальный хостинг в сочетании с --config.

    Config=FILE Указывает альтернативный файл конфигурации. Это имеет значение только если указан --daemon. По умолчанию /etc/rsyncd.conf за исключением случая, когда демон запускается поверх удаленной оболочки и удаленный пользователь не root. В последнем случае rsyncd.conf по умолчанию располагается в текущем каталоге (обычно $HOME).

    Port=PORT Указывает альтернативный номер TCP порта для работы, а не 873 по умолчанию.

    Blocking-io Указывает использовать блокирующий ввод-вывод при запуске поверх программы-транспорта удаленной оболочки. Если этой программой являются либо rsh, либо remsh, то rsync использует блокирующий ввод-вывод по умолчанию, иначе по умолчанию используется неблокирующий ввод-вывод. (Заметьте, что ssh предпочитает неблокирующий.)

    No-blocking-io Отключает действие --blocking-io, когда оно активировано по умолчанию.

    Log-format=FORMAT Позволяет Вам точно указывать, что rsync сообщает (журналирует) на стандартный вывод на по-файловой основе. Формат сообщений определяется тем же соглашением, что и для параметра журналирования в файле rsyncd.conf.

    Stats Указывает выводить подробную статистику по передаче файлов, позволяя Вам оценить, насколько эффективен алгоритм rsync относительно Ваших данных.

    Partial По умолчанию rsync будет удалять все частично-переданные файлы в случае прерывания передачи. В некоторых случаях более желательно сохранять такие файлы. Используя параметр --partial, можно указать rsync сохранять частично-переданный файл, что может ускорить передачу всего файла при последовательном повторении таких передач.

    Progress Указывает выводить rsync информацию о ходе передачи. Скучающему пользователю будет на что посмотреть. Подразумевает наличие --verbose без увеличения подробностей.

    P Эквивалент для --partial --progress . Автор нашел для себя частым использование этой комбинации, поэтому для облегчения ввел отдельный параметр.

    Password-file Позволяет Вам предоставить пароль для доступа к rsync-серверу, сохранив его в файле. Заметьте, что этот параметр полезен только при использовании для доступа к rsync-серверу встроенного rsync-транспорта, при использовании программы удаленной оболочки он бесполезен. Файл не должен быть всем доступен на чтение. Он должен содержать только пароль, в одну строчку.

    Bwlimit=KBPS Позволяет указать максимальную скорость передачи, килобайт в секунду. Этот параметр наиболее эффективен при использовании rsync для передачи больших файлов (несколько мегабайт и выше). В соответствии с природой rsync-передач передается обычный блок данных, затем если rsync определяет, что скорость выше установленного, то он вводит задержку перед посылкой следующего блока. В результате средняя скорость передачи равна указанному пределу. Нулевое значение означает отсутствие этого ограничения.

    Write-batch=PREFIX Генерирует набор файлов, которые могут быть переданы в пакетном обновлении. Каждое имя файла в наборе начинается с PREFIX. См. раздел "ПАКЕТНЫЙ РЕЖИМ" за деталями.

    Read-batch=PREFIX Применяет ранее сгенерированный пакет изменений, используя тот набор файлов, чьи имена начинаются с PREFIX. См. раздел "ПАКЕТНЫЙ РЕЖИМ" за деталями.

Опции rsync

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

    V - подробный вывод информации о происходящем. Можно указывать несколько раз. Позволяет развлечься разглядыванием кучи внутренней информации о пересылки данных в процессе обновления.

    Inplace - обновление образа производится без создания временного файла. Полезно при недостатке места, а также в случае нестабильной связи: --inplace позволяет продолжить обновление образа с того места, на котором обновление прекратилось из-за обрыва связи. Использование этой опции слегка снижает эффективность работы алгоритма расчёта разницы между файлами.

    H, --human-readable - показывать размеры переданных/обработанных данных в удобном виде (вместо байт), например 234K или 1,35G

    Z, --compress - включить сжатие передаваемых данных.

    Progress - показывать индикацию процесса обработки файла.

    Partial - не удалять локальный файл перед синхронизацией

    P - тоже что и --partial вместе с --progress

    Stats - выводить статистику - показывает сколько было принято/передано, сколько удалось сэкономить и т.п.

Rsync является утилитой для синхронизации файлов и их резервного копирования. Она работает на многих *nix системах).

Ограничение rsync состоит в том, что данные не могут копироваться между 2 удалёнными (remote) системами. В этом случае Вам пришлось бы скопировать данные с одной удалённой системы, а потом перенести на другую.

В aptosid у Вас есть различные возможности запускать процесс синхронизации. Вы можете запускать rsync командой в терминале, или установить дополнительные пакеты из Debian Sid:

Чтобы установить deb пакет:
apt-get install luckybackup
Инструкция по использованию в терминале

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

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

rsync может копировать данные:
* с локальной системы на локальную систему,
* с локальной системы на удалённую (remote) систему,
* с удаленной (remote) системы на локальную систему.

При этом rsync использует клиент ssh (входит в основную установку), либо rsync-daemon, которые работают на исходной и на целевой системе. В manpages rsync говорится, если системы могут связываться по ssh, ssh также может использоваться для rsync.

Ограничение с rsync состоит в том, что данные не могут копироваться между 2 удалёнными (remote) системами. В этом случае Вам придётся скопировать данные с одной удалённой системы, а потом перенести с rsync на другую.

Чтобы пояснить это, рассмотрим следующий пример с 3 компьютерами:

Neo – локальная система morpheus – удаленная система trinity – удаленная система

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

Имя пользователя на neo является cuddles, Имя пользователя на morpheus является tartie, Имя пользователя на trinity является taylar.

Целью является синхронизация каталогов /home/$user/Files:

Neo:/home/cuddles/данные с morpheus и trinity, morpheus:/home/tartie/данные с neo и trinity, trinity:/home/taylar/данные с neo и morpheus.

Теперь возникает проблема, что rsync не может быть применён между 2 удалёнными компьютерами:

Neo-> morpheus - с локальной на удалённую, получится neo-> trinity - с локальной на удалённую, получится morpheus-> neo - с удаленной на локальную, получится trinity-> neo - с отдаленной на локальную, получится morpheus-> trinity - нельзя, с удалённой на удаленную trinity-> morpheus - нельзя, с удалённой на удаленную

Чтобы обойти это ограничение, поступаем как указано ниже:

Morpheus --> trinity - станет: morpheus --> neo и neo --> trinity trinity --> morpheus - станет: trinity --> neo и neo --> morpheus

Этот дополнительный шаг не изменяет ничего в конечном итоге. Тем не менее, указывает на то, что:

Это ограничение с rsync должно быть учтено при планировании процесса резервного копирования.

Применение имён хоста с именами хоста в rsync.

Применение имён хостов neo, morpheus, и trinity, вместо IP-адресов, может позволить сделать процесс копирования нагляднее и Вам будет легче разобраться.

Для этого Вы должны отредактировать /etc/hosts и вставить имена хостов и ему принадлежащие IP-адреса. Таким образом в нашем примере файл /etc/hosts будет выглядеть так:

192.168.1.15 neo 192.168.1.16 morpheus 192.168.1.17 trinity

Первая строка переводит IP-адрес 192.168.1.15 на “neo”, вторая 192.168.1.16 на “morpheus” и третья 192.168.1.17 на “trinity”. После записи может использоваться дополнительно имя хоста вместо IP-адреса. Этот особенно удобно, если изменяются распределённые IP-адреса, например, у "neo" с 192.168.1.15 на 192.168.1.25 Это облегчает работу со скриптами, так как они в случае изменения IP-адресов не должны изменяться, а только файл /etc/hosts.

Два способа использования rsync.

Первый способ - данные “толкают (push)” на целевую машину; другой - данные “вытягиваются (pull)” с источника. Каждый метод имеет свои за и против, которые будут рассмотрены ниже. В нашем примере используются локальная и удаленная системы, чтобы более отчетливо объяснить терминологию.

“push” - локальная система несет исходные каталоги и файлы, целью является удаленная система. Команда rsync запускается на локальной системе и "толкает" данные на целевую систему.

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

Недостатки:
* Если скрипт используется с синхронизацией через cron, то crontab-ы должны задаваться на каждой системе. При модификации скрипта необходимо вносить соответствующие изменения на каждой системе, при изменениях календарного плана должен изменяться каждый crontab на каждом компьютере. Вследствие этого административное обслуживание становится очень громоздким и запутанным. * Процесс резервного копирования не возможно проверить, был ли целевой раздел смонтирован целевой системой. Если он не смонтирован, резервного копирования не произойдёт.

“pull” - удаленная система несет исходные каталоги и файлы, целью является локальная система. Команда rsync запускается на локальной системе и "вытягивает" данные из исходной системы.

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

Синтаксис rsync (часть из "man rsync"):
rsync ... SRC ... DEST rsync ... SRC ... HOST:DEST rsync ... SRC ... HOST::DEST rsync ... SRC ... rsync://HOST[:PORT]/DEST rsync ... SRC rsync ... HOST:SRC rsync ... HOST::SRC rsync ... rsync://HOST[:PORT]/SRC
Рабочие примеры команд rsync:

Объяснение составных частей этой команды:

Источник: (/путь/файл) morpheus:/home/tartie, целью является: /media/sda7/SysBackups/morpheus/home

Каталог /home/tartie (включая подкаталоги) будет сохранен в /media/sda7/SysBackups/morpheus/home, что после rsync будет выглядеть таким образом:

/media/sda7/SysBackups/morpheus/home/tartie

Обратите внимание, копируется только каталог /tartie, в путь указанный rsync /media/sda7/SysBackups/morpheus/home. "Источник" выбирает только, откуда прибывают данные, а "Цель" указывает rsync, куда должны копироваться данные из "источника" он воспринимает его уже не как /home/tartie, а просто /tartie, которого он направить в /media/sda7/SysBackups/morpheus/home. Ещё пример:

Rsync [...] /home/user/data/files /media/sda7/SysBackups/neo

Здесь будет копироваться исходный каталог /files и все в нём находящиеся каталоги и файлы в целевую папку /media/sda7/SysBackups/neo/ - а не в /media/sda7/SysBackups/neo/home/user/data/files.

На это необходимо обращать внимание при использовании резервного копирования с rsync.

Пояснення опцій (чорновий переклад з англомовного "man rsync"):
-a для способа с архивацией. manpage по этому поводу говорит: “проще говоря, этот метод, для создания рекурсивного резервного копирования и копирования почти всех атрибутов. Не сохраняются только жёсткие ссылки из-за сложности процесса. Опция -a соответствует: -rlptgoD, что это значит: -r = rekursiv - копировать подкаталоги и файлы в них из "исходного места". -l = Links - символические ссылки восстанавливаются в пункте назначения. -p = права - права идентичны с ними в исходном месте. -t = временной штамп - временной штамп в исходном месте идентичен с ним. -q = quiet - минимальный вывод информации. Большее количество информации получают с опцией -v после опции -a. Выполнение без какого-либо ответа будет достигнуто без постановки опции -v. -o = владелец - если rsync проводится как root, владельцы исходных файлов остаются соответствующим образом сохранёнными. -D = соответствует этим обеим командам: --devices --specials --devices = символьные файлы и файлы блочного устройства будут копироваться в удаленную систему, чтобы затем восстанавливаться. Нужно обратить внимание, что без опции --super , опция --devices не работает. --specials = rsync копирует специальные файлы как sockets и fifos. --g: группы сохраняются соответственно исходным файлам. -E: сохраняется атрибут "выполнимо". -v: для подробного вывода. Если подробности не важны, эта опция может быть опущена. Тем не менее, если необходимо видеть, что происходит, эта опция очень полезна. -z: копируемые данные архивируются, что ускоряет копировальный процесс, так как перемещённый объем данных будет меньше. --delete-after= целевые каталоги или целевые файлы, которых больше нет в источнике, удаляются после перемещения, а не перед этим. В случае проблем или катастроф будет “after” использован, "delete” предотвращает использование лишнего пространства больше ненужными файлами и каталогами в пункте назначения. -- exclude = указывает на файлы или каталоги исключаемые из копировального процесса. В примере, --exclude = “*~” были бы ВСЕ файлы с окончанием “~” из процесса резервного копирования исключены. С одной опцией --exclude может передаваться только один аргумент, при большем количестве аргументов исключения необходимо использовать несколько опций --exclude.
Дополнительные команды:
-c - проводит дальнейшие сравнительные проверки, что требует большого времени. Так как rsync уже проводит сравнительные проверки, эта команда не была интегрирована в --a из-за её избыточности, а также для экономии времени. В этой опции, как правило, нет нужды. --super - целевая система попытается проводить действия суперпользователя (root) (смотрите manpage) --dry-run - тестовый запуск: просто показывает, что должно копироваться. Никакие файлы не копируются.

И напоследок, варианты указания исходных и целевых каталогов.

Примерные команды:
rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home

Эта команда копирует все каталоги и файлы ниже от /home/tartie на систему "morpheus" и размещает их в этот каталог /media/sda7/SysBackups/morpheus/home. Структура каталога tartie сохраняется.

Rsync -agEvz --delete-after --exclude=”*~” /home/tartie neo:/media/sda7/SysBackups/morpheus/home

Это - противоположная команда первого примера. Она "двигает" каталог /home/tartie и его содержание в указанный каталог системы "neo" - отметим, что систему рассматривают как "удаленную (remote)", если ставится “:” двоеточие перед путем.

Rsync -agEvz --delete-after --exclude=”*~” /home/cuddles /media/sda7/SysBackups/neo/home

Это - процесс резервного копирования на локальном компьютере. Здесь нужно обращать внимание на то, что никакое двоеточие не установлено. Локальный каталог /home/cuddles копируется на /media/sda7/SysBackups/neo/home на том же самом локальном компьютере.

rsync с многими опциями --exclude:
rsync -agEvz --delete-after --exclude=”*~” --exclude=”*.c” --exclude=”*.o” "/*" /media/sda7/SysBackups/neo

Эта команда копирует все из каталога root локальной системы (все каталоги и файлы) на /media/sda7/SysBackups/neo - исключенными из этого являются все файлы и каталоги, которые кончаются на “~”, “.c” или “.o”.

Замена имени хоста IP-адресом:

Первая команда установлена с методом имени хоста, второй с методом IP-адресов. Обе команды идентичны в своём выполнении:

Rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie /media/sda7/SysBackups/morpheus/home rsync -agEvz --delete-after --exclude=”*~” 192.168.1.16:/home/tartie /media/sda7/SysBackups/morpheus/home

Метод имён хоста не должен применяться, но по нашему мнению он упрощает резервное копирование с rsync в сетях.

class="highlight-2">Невозможная команда:

rsync -agEvz --delete-after --exclude=”*~” morpheus:/home/tartie trinity:/home

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

Мы надеемся, с этим маленьким руководством Вам будет легче приступить к использованию rsync, это очень удачная программа резервного копирования.

rsync в основном предназначен для удаленной синхронизации.
rsync используется для выполнения операций резервного копирования в UNIX / Linux.
rsync — это утилита, которая используется для синхронизации файлов и директорий двух различных локаций. Считается как одна из самых эффективных. Резервные копии можно создавать как на локальном сервере так и на удаленном.

Некоторые важные возможности rsync

Скорость : В первый раз, rsync реплицирует полностью весь контент между источниками и каталогами назначения. В дальнейшем, rsync перемещает только измененные блоки или байты в назначенную локацию, причем делает это действительно быстро. Также имеется возможность ограничить скорость синхронизации.
Безопасность : rsync позволяет шифровать информацию, используя ssh протокол в процессе перемещения данных.
Меньшая пропускная способность : rsync использует блочное сжатие и распаковку данных на приемной и отправляющей стороне в указанном порядке, возможность «докачки» файлов. Таким образом пропускная способность будет использоваться rsync-ом всегда гораздо меньше по сравнению с остальными протоколами передачи данных.

Если имеется доступ по ssh к серверу, это наиболее простой способ для осуществления синхронизации.

Rsync по ssh — это частный случай использования, общий вид команды выглядит так:

Rsync [ОПЦИИ] [ПОЛЬЗОВАТЕЛЬ@]СЕРВЕР:ИСТОЧНИК... [ПОЛУЧАТЕЛЬ] Pull (копирование файлов с удаленной системы на локальную) rsync [ОПЦИИ] ИСТОЧНИК 1 [ИСТОЧНИК N] [ПОЛЬЗОВАТЕЛЬ@]СЕРВЕР:ПОЛУЧАТЕЛЬ

Push (копирование файлов с локальной машины на удаленную)
Обязательным параметром является «ИСТОЧНИК», их может быть несколько.

Рассмотрим несколько примеров:

Примеры:

Скопируется на сервер 192.168.1.1 содержимое папок /backup/file1/ /backup/file2/ в папку backup

В этом примере уже скопируются сами папки

# rsync -zavP /backup/file1/ /backup/file2/ [email protected]:/backup

Как ограничить скорость передачи файлов? Нужно поставить опцию --bwlimit:

# rsync -zavP --bwlimit=100 /backup/file1/ [email protected]:/backup

Как синхронизировать файлы с проверкой по контрольной сумме?

# rsync -сzavP /backup/file1/ [email protected]:/backup

Как скопировать файлы с удаленной машины на локальную?

# rsync -zavP [email protected]:/backup /backup/file1/

Как исключить файл или директорию при копировании?
Исключаем директорию temp файл test.txt и все файлы с расширением tgz расположенные в /home/data

# rsync -azVP --exclude temp/ --exclude test.txt --exclude *.tgz /home/data/ [email protected]:/backup

Как удалить файлы на приемнике, если их не существует на источнике?

# rsync -azVP --exclude /temp/ --exclude test.txt --exclude *.tgz --force --delete /home/data/ [email protected]:/backup

Исключаем директорию /temp файл test.txt и все файлы с расширением tgz расположенные в /home/data

Как использовать нестандартный порт ssh при копировании rsync?

# rsync -zavP "-e ssh -p 12345" /var/lib/ [email protected]:/backup # rsync --progress -avz -e ssh /home/ root@сайт:/home/

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

Rsync --progress --bwlimit=10 -avz -e ssh /home root@сайт:/home/

Небольшое изменение. Удаляем «/» после папки home и у нас уже копируется сама папка вместе со всем содержимым. Так же ограничиваем скорость копирования до 10кБ/с, что бы не забивать интернет канал.

Опции:
-a, --archive режим архива, при использовании заменяет несколько ключей (-rlptgoD)

— n отладочный режим
-t , --times – обновлять время модификации файла на приёмной стороне. При отсутствии этой опции или -a становиться неэффективной оптимизация передачи по времени изменения файлов
-r рекурсивно. (Копирует все файлы, включая вложенные каталоги)
-l при копировании сохраняет символические ссылки
-p сохраняет права на файлы
— t сохраняет время изменения файлов
— g сохраняет группу файлов
— o сохраняет владельца файлов (работает только из под root)
— D сохраняет файлы устройств и специальны файлы
— P, отображение прогресса при копировании;
— q, не выводит сообщения об ошибках;
— с, --checksum проверка файлов по контрольной сумме, а по размеру и дате модификации. Дополнительная нагрузка на процессор, сильно увеличивает время синхронизации;
— size-only – использование для сверки только размер файлов
— ignore-errors, продолжение копирования и удаления даже после появления ошибок;
— max-delete, максимальное число удаляемых за один раз файлов и каталогов;
— files-from=FILE, задается список файлов и директорий для копирования в файле;
— numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удалённой стороне номера как есть
— R – использовать относительные пути при создании символических ссылок
— A, --acls – сохранение списков ACL
— H, --hard-links – сохранение жестких ссылок
— S, --sparse – оптимизировать разреженные файлы
— x, --one-file-system – не выходить за пределы текущей точки монтирования
— u, update пропускать обновление файлов, которые новее исходных
— h, human-readable вывод цифр в читаемом виде (Кб, Мб, Гб)
-v verbose подробные вывод операций (отладочной информации)
-z сжатие файлов при копировании
— compress-level - уровень сжатия
— e ssh использовать при копировании ssh

Progress показывает прогресс выполнения копирования
--bwlimit =KBPS ограничивает скорость передачи файлов (Kbit/s)
--del – удалить файлы в папке назначения которых нет в источнике (точная копия)
– –delete-after удалить после. Если в основном месте был удален какой-то файл, или каталог,
то после синхронизации в backup сервере, в каталоге он тоже будет удален
- - password-file Путь, где находится файл с паролем.

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

Rsync -a --progress /home/ /mnt/export/

Копирует внутри одного компьютера содержимое папки home, в папку /mnt/export/. Подобное копирование применяется когда необходимо сохранить все права на перемещаемые файлы.

Лучшие статьи по теме