Rsync примеры синхронизации windows

Обновлено: 04.07.2024

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

Попробую сберечь вам немного времени на чтение мануала и рассказать о самом важном и полезном. Простыми словами, как есть.

Зачем нужен rsync?

Зачем пользоваться rsync если есть привычные cp и scp , спросите вы.

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

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

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

Принцип применения

Если мы говорим о простом копировании файлов, то первым делом всегда стоит сделать пробный прогон (ключ -n ) в режиме с показом подробностей ( -v ):

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

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

В этой команде ключ -a подразумевает рекурсивное копирование всех файлов и каталогов включая их атрибуты, такие как дата создания и дата изменения. Ключ -v даст вам подробный отчет о работе по мере выполнения и по окончании.

Правила копирования каталогов

С одной стороны правила очень простые.

Если в конце пути до именованного источника нет слеша, то скопируется сам каталог.

Если слеш есть, или источник указывает на каталог без имени, то скопируется содержимое каталога.

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

Потому лучше всегда следовать обычному сценарию с предварительной проверкой операции.

Некоторые полезные ключи

Сначала поговорим об опциях которые вам будет здорово знать без шпор и шпаргалок.

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

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

Если вам хочется знать сколько всего, по мнению rsync, осталось работать, вам нужен ключ --info=progress2 . Если вы копируете целую файловую систему, то этот ключ, будучи использован сам по себе, вас разочарует: информация об итоговом объёме будет постоянно обновляться. Это происходит потому что rsync не пытается считать всю файловую систему до того как начнёт копирование, а делает обе задачи сразу.

Но не отчаивайтесь! Если вы хотите знать точно сколько осталось работать с самого начала, то можно отключить последовательное сканирование ключём --no-inc-recursive или, короче, --no-i-r .

Ключи выше есть начиная с версии 3.1.0, то есть уже работают в Debian stable.

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

С этим ключём rsync удалит лишние файлы из каталого-назначения.

Ключ -n в команде выше был оставлен намеренно.

Дальше я рассмотрю в деталях более интересные, хоть более редко используемые, опции.

О сжатии замолвим слово

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

В том, что при соединении с вашим сервером уже используется сжатие, можно убедиться так:

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

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

Копируем частично

Наверняка вам когда-нибудь понадобится чтобы rsync пропускал некоторые файлы при копировании.

В самом простейшем случае вам нужно чтобы rsync не копировал файлы разных систем контроля версий, включая каталог вроде .svn и .git . В этой задаче вам не нужно ничего кроме ключа -C (или --cvs-exclude в полной форме). Так файлы большинства популярных VCS будут проигнорированы будто их нет. Не забываем использовать -n при первом запуске.

Может получиться так что вы, по ошибке, скопируете кучу таких файлов от VCS. В этом случае для получения чистой копии вам пригодится ключ --delete-excluded , с которым все исключенные файлы будут удалены.

Исключаем через .rsync-filter

Если нужные более гибкие правила, что особенно актуально если копирование делается регулярно, то лучше не мелочиться и оформить все исключения в файле .rsync-filter .

Для исключения чего-либо из списка на перенос нужно добавить в этот файл строчку с правилом ( - или + в начале строки).

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

Если нужно исключить файл или каталог относительно каталога в котором находится .rsync-filter , то укажем со слешем в начале:

В правилах звездочка соответствует любым символам кроме слеша, а две звездочки соответствуют вообще любым символам:

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

Файлы .rsync-filter команда rsync умеет искать по всей структуре каталогов будучи запущена с ключём -F .

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

Как видите, лишние файлы не скопировались:

Ограничим rsync по ssh

Случается нужно разрешить работу rsync по ssh, удалённо и без пароля, только определённого для каталога и хоста, исключив копирование чего-либо в другие места или из других мест.

То сначала нужно получить команду, которую rsync выполняет при вызове ssh на удаленном хосте:

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

Если нужно чтобы ваш бекап нельзя было перезаписать или удалить на сервере назначения, то опцию --del следует заменить на --ignore-existing .

Машина времени

Те пользователи macOS и OS X, что делают бэкап, наверняка оценили работу Time Machine. Эта программа позволяет буквально в два клика вернуться к прошлой версии любого файла. Не смотря на все красивости, Time Machine не делает ничего такого чего мы не можем сделать с помощью rsync .

Скрипт следует положить в корень того диска или каталога, куда следует делать бэкапы.

Запускать с указанием единственного аргумента: каталога с исходными файлами. Например, так.

После нескольких запусков получается такая структура каталога:

При этом latest указывает на самый последний бэкап.

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

Всё множество копий занимает лишь немного больше места чем исходный каталог. Место уходит на изменившиеся файлы.

Если ничего не менялось, то место всё равно расходуется на создание каталогов, которые нельзя хранить как жесткие ссылки.

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

У одинаковых, не менявшихся, файлов будет один и тот же inode.

Конечно, по возможной экономии места на диске такому способу резервного копирования далеко до специальных программам, таких как Borg или Restic.

В процессе создания кластера стал вопрос: чем же можно обеспечить синхронизацию файлов и папок на отдельных узлах? После недолгих поисков всевозможных готовых решений наткнулся на известную утилиту, работающую под Unix – Rsync. У многих администраторов появилась необходимость синхронизировать каталоги между Unix-Windows серверами. Так получил жизнь проект cwRsynс. Суть этого проекта в том, что утилита Rsync запускается под Windows с помощью библиотеки cygwin.

В моем случае возможность взаимодействия с Unix серверами в перспективе очень радовала. Также отзывы админов о работе Rsync под Unix были очень положительными, и я решил попробовать.

В этой статье мы рассмотрим каким образом настраивается синхронизация жесткого диска с помощью cwRsynс.

В процессе создания кластера стал вопрос: чем же можно обеспечить синхронизацию файлов и папок на отдельных узлах? После недолгих поисков всевозможных готовых решений наткнулся на известную утилиту, работающую под Unix – Rsync. У многих администраторов появилась необходимость синхронизировать каталоги между Unix-Windows серверами. Так получил жизнь проект cwRsynс. Суть этого проекта в том, что утилита Rsync запускается по Windows с помощью библиотеки cygwin.

В моем случае возможность взаимодействия с Unix серверами в перспективе очень радовала. Также отзывы админов о работе Rsync под Unix были очень положительными, и я решил попробовать.

Принцип синхронизации с помощью cwRsync состоит в следующем: на главном сервере (в нашем случае Сервер№1) запускается демон cwRsync при старте системы. В конфиге указывается к каким ресурсам будет даваться доступ. Клиент конфигурируется на втором сервере (Сервер№2). С определенной периодичностью на втором сервере запускается клиент, который соединяется с сокетом первого сервера, после чего происходит синхронизация. Взаимодействие происходит по локальным IP адресам:

Пример: Схема синхронизации cwRsync.

Пример: Схема синхронизации cwRsync.

1. Установка cwRsync.
Для начала необходимо скачать и установить утилиту cwRsync. Установщик можно скачать отсюда.

Нужно выбрать последнюю версию. Перед установкой стоит убедиться, что совместима с конфигами старой версии.
Нам необходимо установить его на все узлы кластера. Процесс установки совсем прост: все значения можно оставить по умолчанию. cwRsync установиться в c:\Program Files\cwRsync\.

После установки можно выполнить следующие рекомендации:

У меня после установки проблем с кодировкой либо работой не наблюдалось. Также далее при конфигурировании я использовал прямые пути. Поэтому рекомендации можно не выполнять.

Мне так и не удалось заставить обменятся файлами клиент с сервером, если указать в path путь к папке. Если указать что-то типа path = /cygdrive/c/backup/ , клиент завершит работу ошибкой, а в логе появляется:
2009/01/06 13:27:35 [3748] name lookup failed for 127.0.0.1: Unknown server error
2009/01/06 13:27:35 [3748] connect from UNKNOWN (127.0.0.1)
2009/01/06 13:27:35 [3748] rsync: chdir / failed
: No such file or directory (2)
Зато когда указываешь имя папки в параметрах клиента, то всё работает.

Windows Firewall: Блокирование rsync демона.

Windows Firewall: Блокирование rsync демона.

Необходима нажать Unblock. Если всё работает нормально, то нужно добавить запуск bat файла в Планировщик Задач:

Планировщик задач: Запуск демона cwRsync при старте сервера.

Планировщик задач: Запуск демона cwRsync при старте сервера.

Таким образом, сервер cwRsync будет запускаться при старте узла.

Можно запускать с ключом –n при пробном запуске. С этим ключом отображается весь процесс, но реальные копирование, удаление, изменения не производятся.

Здравствуйте, уважаемый Xetrix! У меня имеется 2 сервера, на обоих ОС Windows Server 2003. Требуется синхронизировать содержимое нужных папок с помощью cwRsync. При этом возникает проблема: для синхронизации требуется в конфигурационном файле нужны uid и gid. Что нужно указать в gid для Windows-систем, чтобы все правильно работало?

Установка, настройка и примеры синхронизации Rsync

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

Rsync — утилита для удаленной синхронизации и копирования файлов. Ее еще можно назвать «SCP на стероидах». Из преимуществ: позволяет не передавать файлы полностью, а только изменения в них, синхронизирует директории и файлы, имеет встроенный механизм сжатия. Это далеко не полный список.


В статье будем использовать сервер конфигурации EL09-SSD с шестиядерным процессором Intel® Xeon® E-2236, 16 Гб оперативной памяти, двумя дисками по 480 Гб и операционной системой CentOS 8 64-bit.


После выбора операционной системы можно переходить к завершению заказа и нажатию на кнопку Заказать сервер. Через несколько минут сервер готов к работе.

Возможности Rsync

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

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

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

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

Как установить, настроить и выполнить запуск Rsync на CentOS 8

Установка Rsync на Centos 8 выполняется из репозитория операционной системы, стандартным пакетным менеджером dnf:

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

Перед началом работы необходимо выполнить настройку. Конфигурация выполняется в файле /etc/rsyncd.conf:

В файле конфигурации указываются следующие переменные:

Рекомендуем использовать для переменных uid и gid непривилегированные учетные записи.

Перед запуском утилиты, нужно также создать указанную в конфигурации директорию:

На этом настройка Rsync в Linux завершена и можно запускать утилиту:

Теперь выполним настройки безопасности. Чтобы Rsync работал корректно, важно настроить SELinux и сетевой экран:

Проверим статус сервиса rsyncd:


Синтаксис Rsync

В этом разделе мы приведем основные параметры, с которыми выполняется Rsync. Синтаксис в общем виде выглядит так:

-options — параметры, с которыми должна выполняться утилита.

<source>— каталог или файл, который является источником.

<destination> — каталог или файл, который является приемником.

Ниже приведены основные параметры, с которыми вызывается Rsync:

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

Копирование и синхронизация файлов с rsync (локально и удаленно)

При локальном режиме работы достаточно задать каталог/файл-источник и каталог/файл-приемник:

Если копирование нужно выполнить с удаленным узлом, добавляется имя пользователя и IP-адрес или имя узла:

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

Синхронизация по SSH и Rsync-демон

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

Автоматическая синхронизация папок

Автоматическая синхронизация папок выполняется штатным способом — планировщиком заданий (cron). Планировщиком удобнее выполнять скрипт, так будет упрощается управление конфигурацией синхронизации. Создадим скрипт:

Далее создадим задание в планировщике:

Просмотр прогресса синхронизации

Удаление при синхронизации

Ограничение максимального размера и скорости передачи

Опции include и exclude

Пример использования Rsync для синхронизации с облачным хранилищем Selectel


Зададим имя для контейнера и нажмем кнопку Создать контейнер:


Утилита Rsync умеет синхронизироваться по SSH с директориями или через демон Rsync. SSH-подключение к облачному хранилищу или установка в него Rsync невозможны. Один из вариантов доступа к облачному хранилищу — S3 API. В связи с этим есть возможность примонтировать его к файловой системе, чтобы обращаться как к локальному разделу. Чтобы реализовать такой подход, нам нужно установить и настроить специальную утилиту s3fs. Предварительно установим необходимые пакеты:

Далее перейдем в директорию /tmp, клонируем в нее репозиторий этой утилиты, скомпилируем ее и установим:

Теперь выполним подготовительные действия: создадим пользователя для доступа к облачному хранилищу Selectel, создадим в системе точку монтирования и примонтируем хранилище.

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


Имя пользователя создается в формате НомерАккаунта_ИмяПользователя, например, 12345_rsync. Пароль можно сгенерировать в этом же меню. Обязательно нужно выбрать чекбокс Использовать эти данные для доступа по протоколу S3. Теперь можно нажимать кнопку Создать:


Сохраним имя пользователя и пароль в специальном файле и ограничим права на чтение:

Создадим точку монтирования и примонтируем к ней облачное хранилище при помощи утилиты s3fs:

Теперь можно проверить результат. Перейдем в директорию /mnt/selectel и попробуем создать там пустой файл:

В результате этот же файл мы увидим в интерфейсе панели управления:

Теперь все готово к работе утилиты Rsync. Уже знакомым способом, можно выполнить синхронизацию так, как будто мы работаем с локальной директорией:

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

Таким образом, можно настроить синхронизацию выделенного сервера с облачным хранилищем Selectel или наоборот.

Заключение

Мы разобрали основные принципы работы утилиты Rsync и показали живой пример ее использования. Как вы смогли увидеть, она имеет множество преимуществ перед обычными для таких случаем SSH и SCP, например, не требует полного копирования файла в случае изменения его части и умеет передавать все метаданные вместе с файлом.

date

21.04.2020

directory

CentOS, Linux

comments

комментария 4

Утилиту Rsync можно использовать для копирования и синхронизации файлов и папок с локального сервера Linux на удаленный и наоборот. Rsync позволяет копировать ваши данные между серверами внутри защищенного SSH соединения. Так же, rsync, поддерживает сжатие данных на лету, что повышает производительность системы.

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

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

Установка и основные параметр rsync

Установка rsync не отличается от установки, любого другого пакета. В CentOS пакет rsync присутствует в базовом репозитории и устанавливается через yum (или dnf в CentOS 8):

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

В качестве источника и приемника можно указать локальную или удаленную директорию на другом сервере.

  • -v – вывести подробную информацию о процессе
  • -c – проверка контрольных сумм файлов
  • -q – минимальная информация

Rsync: локальное копирование/синхронизация каталогов

Rsync можно использовать для копирования файлов между локальными директориями сервера. Если вам нужно скопировать файлы из одной директории в другую, выполните команду:

В этом случае файл package.zip был просто скопирован в директорию /var/www/tmp/.

Можно добавить несколько опций для выполнения копирования. Например, чтобы перед выполнением копирования предварительно сжать файл, вывести подробную информацию и прогресс копирования файла, выполните:

rsync - копирование файлов с отображением прогресса

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

Мы скопировали директорию /var/www/site в директорию для резервных копий, опция -r позволила рекурсивно скопировать все вложенные директории и файлы.

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

rsync синхронизация с сохранением атрибутов

Если вы хотите скопировать только измененные файлы, добавьте опцию -c:

Я изменил только один файл и запустил команду. В результате в целевую директорию, был скопирован только измененный файл.

rsync -zvrac копирование только измененных файлов

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

rsync копирование с удалением

Rsync: настройка синхронизации с удаленным сервером

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

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

Для синхронизации через демона rsync адрес удаленного сервера указывается так rsync://. Например:

Чтобы скопировать файл на удаленный сервер, используйте команду:

Где IP, это адрес удаленного сервера. После запуска команды, удаленный сервер запросит пароль пользователя (если включена авторизация по паролю). Для автоматической авотризации нужно настроить SSH ключи.

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

бэкап на другой сервер по сети с помощью rsync

То есть, все тоже самое, что и с локальными директориями, только мы указываем адрес удаленного сервера.

Так же вы можете синхронизировать файлы и с удаленного сервера на локальный, команда для этого немного изменится:

rsync backup

Для принудительного использования SSH протокола для копирования файлов, укажите это в вашей команде (для выбора транспортного протокола копирования файлов используется опция –e):

Если удаленный SSH сервер имеет отличный от стандартного порт, его так же можно указать:

Другие примеры использования rsync

Если в рамках сессии синхронизации вы передаете много информации и важно ограничить скорость передачи, задайте это дополнительной опцией –bwlimit (указывается скорость в КБ/с):

При передаче файлов на удаленный сервер, вы можете ограничить максимальный размер файлов, которые нужно скопировать. Например, вы хотите скопировать все файлы, кроме файлов размером более 1 Мб:

После выполнения команды, файл был скопирован на удаленный сервер и удален на источнике:

rsync remove-source-files

исключения в rsync

В данном случае мы исключили директорию “administrator” при копировании на удаленный сервер.

rsync exclude

Резервное копирование в Linux с помощью rsync

В своей рабое я часть использую rsync для автоматических задач резервного копирования в Linux. Можно написать простые bash скрипты или просто добавить команду rsync в cron и выполнять по расписанию.

Например, можно добавить в cron команду:

01 30 * * * rsync -zvra root@IP:/backup/ /backup

В резульатате каждый день в 1-30 ночи, будет выполняться синхронизация каталогов локального и удаленного серверов.

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

Читайте также: