Настройка rsync под виндовс. Rsync: копирование с Windows на Linux. Примеры использования rsync

По умолчанию, утилита может быть не установлена в системе. Установка и последующий запуск выполняются следующими командами.

CentOS 7

yum install rsync

systemctl enable rsyncd

systemctl start rsyncd

Ubuntu

apt-get install rsync

Открываем следующий файл:

vi /etc/default/rsync

Находим запись:

RSYNC_ENABLE=false

И меняем на:

RSYNC_ENABLE=true

Запускаем:

/etc/init.d/rsync start

Настройка

Открываем конфигурационный файл rsync:

vi /etc/rsyncd.conf

И настраиваем его, примерно, следующим образом:

max connections = 10
exclude = lost+found/
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 *.rar *.7z *.mp3 *.jpg


path = /data1/
comment = Public folders
read only = yes
list = yes
auth users = rsync_d1

hosts allow = localhost 192.168.0.15 192.168.0.20
hosts deny = *


uid = root
gid = root
path = /data2/
comment = Private folders
read only = yes
list = yes
auth users = rsync_d2, backup
secrets file = /etc/rsyncd.scrt
hosts allow = localhost 192.168.0.16 192.168.0.21
hosts deny = *

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

  • max connections — максимальное число одновременных подключений. Стоит задать, чтобы не перегружать сервер.
  • exclude — папки, которые стоит исключить из синхронизации. В конкретном примере каталог для размещения восстановленных после проверки диска файлов.
  • dont compress — указываем, какие файлы не нужно сжимать при отправке. Имеет смысл указать те, сжатие которых не даст результата, например, архивы, сжатые аудио и изображения.

а также каждый ресурс настраивается отдельно (в нашем примере data1 и data2 ):

  • uid — пользователь, от которого будет выполнена синхронизация для конкретного ресурса.
  • gid — группа, от которой будет выполнена синхронизация для конкретного ресурса.
  • path — путь до ресурса, для которого выполняется синхронизация.
  • comment — описание для удобства.
  • read only — режим для чтения; позволяет защитить данные от удаления или изменения.
  • list — разрешает или запрещает чтения содержимого каталога. Если запрещено (no ), синхронизация может выполняться для конкретно перечисленных файлов.
  • auth users — проверка подлинности, вводом логина с паролем.
  • secrets file — файл, в котором размещены логин и пароль.
  • hosts allow — перечисление хостов, с которых разрешено обращаться к rsync серверу.
  • hosts deny — перечисление хостов, с которых запрещено обращаться к rsync серверу (в данном примере, со всех, кроме разрешенных).

Создаем файл для аутентификации:

vi /etc/rsyncd.scrt

rsync_d1:password1
rsync_d2:password2
backup:password3

* где rsync_d1:password1 — соответственно, пользователь rsync_d1 с паролем password1 .

В целях безопасности, устанавливаем доступ только для владельца:

chmod 600 /etc/rsyncd.scrt

Перезапускаем сервис одной из команд:

systemctl restart rsyncd

/etc/init.d/rsync restart

service rsyncd restart

Добавляем порты в брандмауэр.

firewall-cmd --permanent --add-port=873/tcp

firewall-cmd --permanent --add-port=22/tcp

firewall-cmd --reload

iptables -I INPUT 1 -p tcp --dport 873 -j ACCEPT

iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT

Запуск клиента

Проверка на локальном компьютере

Сначала выполним следующую команду на нашем сервере:

rsync -avv --progress rsync_d1@localhost::data1 /tmp/

* данная команда выполнит синхронизацию нашего ресурса data1 с каталогом /tmp .

Проверка на удаленном компьютере

Устанавливаем rsync, если еще не установлен:

yum install rsync

apt-get install rsync

* первая команда для CentOS, вторая — Ubuntu.

Запускаем синхронизацию:

rsync -avv [email protected]::data1 /tmp/

* где 192.168.0.5 — IP-адрес rsync сервера.

Пример готового скрипта для синхронизации папок

Скрипт довольно прост:

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

Password_file="/etc/rsyncd.scrt"
user="opros"
ip="192.168.0.15"
source="data1"
destination="/tmp/"

Rsync -a --delete-after --password-file=$password_file $user@$ip::$source $destination

* где:

  • password_file — пароль, в котором будет храниться пароль.
  • user — учетная запись для авторизации.
  • ip — IP-адрес сервера rsync.
  • source — имя ресурса на сервере.
  • destination — каталог, в который синхронизируем файлы.

После создаем файл с паролем:

vi /etc/rsyncd.scrt

* в данном файле указываем только пароль без имени учетной записи.

После задаем права:

chmod 600 /etc/rsyncd.scrt

Автоматизировать синхронизацию можно с помощью CRON:

0 */1 * * * /scripts/syncing.sh

* где /scripts/syncing.sh — наш скрипт. В данном примере задание будет выполняться каждый час.

Ключи запуска rsync

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

rsync <опции> <источник> <назначение>

Список и описание опций:

Ключ Описание
-v, --verbose Вывод подробной информации о процессе синхронизации. Стоит использовать для отладки.
-q, --quiet Не выводит сообщения об ошибках.
--no-motd Не выводит приветствие в MOTD
-c, --checksum Сравнивать файлы по контрольной сумме, а не времени или размеру.
-a, --archive Режим архивирования или то же самое, что с ключами -rlptgoD (без -H,-A,-X). Используется для удобства, чтобы не перечислять много опций.
--no-<опция> Отключает конкретную опцию, например, вышеописанная no-motd.
-r, --recursive Рекурсивный режим для каталогов.
-R, --relative Использовать относительные пути.
--no-implied-dirs Выключить параметр --relative.
-b, --backup Режим резервного копирования. С его помощью при обновлении файлов в папке назначения для них создается копия.
--backup-dir=<каталог> В режиме резервного копирования указывает каталог, в котором будут храниться копии.
--suffix=SUFFIX В режиме резервного копирования задает суффикс для сохраненных файлов.
-u, --update Пропускать файлы, которые новее в папке назначения (копировать только измененные файлы).
-d, --dirs Не использовать рекурсию для каталогов.
-l, --links Копировать симлинки как симлинки.
-L, --copy-links Копировать не симлинк а ее содержимое (трансформировать симлинк в каталог).
-k, --copy-dirlinks Преобразовать симлинк на каталог в обычный каталог.
-K, --keep-dirlinks В папке назначения обрабатывать симлинк как каталог.
-H, --hard-links Сохранять жесткие ссылки.
-p, --perms Сохранять разрешения (права доступа).
-E, --executability Сохранить права на исполнение.
--chmod=<права> Изменить права доступа на конкретные.
-A, --acls Сохранить права ACL.
-X, --xattrs Сохранить атрибуты файлов.
-o, --owner Сохранить владельца (только от суперпользователя).
-g, --group Сохранить группу владельца.
--devices Копировать файлы-устройства (разрешено только при выполнении команды с правами суперпользователя).
--copy-devices Копировать файлы устройства как обычные файлы.
--specials Сохранять специальные файлы.
-D Заменяет --devices и --specials одновременно.
-t, --times Сохранять временные отметки.
-S, --sparse Выполнение дефрагментации в момент копирования данных.
-n, --dry-run Режим тестирования. Выполняется пробный запуск, при котором будет показаны изменения, но сами изменения выполнены не будут.
-W, --whole-file Копировать файлы целиком. По умолчанию, для копирования файлов используется алгоритм дельта-хэфера, который позволяет переносить только часть с изменениями. На практике, это сильно ускоряет процесс копирования. Ключ применяется в тех случаях, когда нужно перенести файл целиком.
-x, --one-file-system Не разрешает переходить границы файловой системы. Например, если в один из синхронизируемых каталогов может быть примонтирована сетевая файловая система, ее копирование может вызвать неудобства.
-B, --block-size=<размер> Принудительно фиксировать размер блока контрольной суммы
-e, --rsh=<команда> Указать оболочку для использования, например SSH.
--existing Не создавать новые файлы в каталоге назначения.
--ignore-existing Не обновлять существующие файлы в каталоге назначения.
--remove-source-files Источник удаляет свои файлы после выполнения синхронизации.
--delete Удалить файлы в папке назначения, если их больше нет в папке источнике (удаление старых файлов).
--delete-before Удалить файлы в папке назначения до начала синхронизации.
--delete-during Удалить файлы в папке назначения в момент синхронизации.
--delete-delay Поиск файлов на удаление в момент синхронизации, а удаление после.
--delete-after Удалить файлы в папке назначения после синхронизации.
--delete-excluded Удалить исключенные из синхронизации файлы в каталоге назначения.
--ignore-errors Удалять файлы даже при ошибках ввода/вывода.
--force Принудительное удаление не пустых каталогов.
--max-delete=<число> Не удалять больше заданного числа файлов.
--max-size=<размер> Не передавать файлы с размером более заданного.
--min-size=<размер> Не передавать файлы с размером менее заданного.
--partial Оставлять файлы, которые переданы не до конца (процесс копирования завершился в процессе).
--partial-dir=<каталог> Хранить частично переданные файлы в специальном каталоге.
--timeout=<секунды> Установить время ожидания от системы ввода/вывода.
--contimeout=<секунды> Установить время ожидания для подключения к демону rsync.
-I, --ignore-times Все равно копировать файлы, если они имеют одинаковые разметы или время изменения.
--size-only Не копировать только те файлы, которые имеют одинаковые размеры.
-T, --temp-dir=<каталог> Все временные файлы размещать в определенном каталоге.
-z, --compress Сжимать данные файла во время передачи
--compress-level=<число> Устанавливает уровень сжатия от 0 до 9.
--skip-compress=<список> Не выполнять компрессию для перечисленных файлов.
-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)
-f, --filter=<правило> Добавить правило для фильтра.
--exclude=<выражение> Исключить из синхронизации файлы, соответствующие выражению.
--exclude-from=<файл> Исключить из синхронизации файлы, перечисленные в файле.
--include=<выражение> Включить в синхронизацию файлы, соответствующие выражению.
--include-from=<файл> Включить в синхронизацию файлы, перечисленные в файле.
--files-from=<файл> Читать список имен исходных файлов из файла.
--address= Привязать IP-адрес для исходящего сокета.
--port=<порт> Использовать определенный сетевой порт.
--sockopts=OPTIONS Использовать специальные опции для TCP.
--blocking-io Использовать блокирующий ввод-вывод для удаленной оболочки
--stats Вывод статистики по передаче данных.
-h, --human-readable Вывод чисел в удобном для чтения формате.
--progress Показывать строку прогресса для синхронизации.
-P То же самое, что --partial и --progress.
-i, --itemize-changes Выводить сводку изменений для всех обновлений
--log-file=<файл> Вывод лога в специальный файл.
--password-file=<файл> При аутентификации пароль можно хранить в специальном файле. Это необходимо для автоматизации выполнения команды без пароля.
--list-only Показать список файлов, но не копировать их.
--bwlimit=<число> Ограничить пропускную способность (КБит в секунду).
--protocol=<число> Принудительно использовать более старую версию протокола.
--iconv=<кодировка> Запрос кодировки преобразования имен файлов.
-4, --ipv4 Предпочтительно, использовать IPv4.
-6, --ipv6 Предпочтительно, использовать IPv6.
--version Вывод версии rsync.
(-h) --help Вывод справочной информации по использованию rsync.

* самый свежий список ключей rsync можно посмотреть командой man rsync .

Rsync на Windows

Реализация rsync для Windows носит название cwRsync (не является аналогом программы — по сути, это утилита Rsync + библиотека Cygwin). Скачать ее можно на официальном сайте . Для загрузки доступны платная и бесплатная версии. Последняя не позволит поднять Rsync-сервер, получать поддержку, обновления безопасности и возможность работать в графическом интерфейсе.

Процедура использования клиента cwRsync аналогична описанному выше. Скачиваем архив программы и распаковываем его. Запускаем командную строку и переходим в каталог bin (находится в папке, куда была распакована программа).

Запускаем синхронизацию:

rsync.exe -avv --progress [email protected]::data1 /cygdrive/c/temp

* обратите внимание на путь назначения — чтобы обратиться к диску C мы написали /cygdrive/c . Итоговое назначение — C:\temp .

Копирование с помощью SSH:

rsync.exe -avv -e "./ssh -p 22" --progress [email protected]:/data/ /cygdrive/c/temp

* обратите внимание, что мы пишем не ssh, а ./ssh , иначе, если мы используем 64-х битную систему и бесплатный пакет cwRsync, система не найдет путь до ssh и выдаст ошибку Failed to exec ssh: No such file or directory .

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

Простая команда для синхронизации двух каталогов:

Команда для резервного копирования:

rsync -ab --delete-after [email protected]::data_source /data_destination

Выполнение синхронизации по SSH:

rsync -a --delete-after -e "ssh -p 22" [email protected]:/data_source /data_destination

* по SSH запросы идут не через rsync server. В данном примере подключение будет выполнено по 22 порту, под учетной записью user .

Копирование файлов на удаленную машину:

Синхронизация в обе стороны (запускаем две команды по очереди):

rsync -a --delete-after [email protected]::data_source /data_destination

rsync -a --delete-after /data_destination [email protected]::data_source

Синхронизация файлов по маске:

rsync -a --include="*.txt" --exclude="*" [email protected]::data_source /data_destination

* в этом примере будут синхронизированы только файлы с расширением txt .

Исключить каталог:

rsync -a --exclude="folder/*" [email protected]::data_source /data_destination

Возможные проблемы

rsync: change_dir "/" failed: Permission denied

Причина: нет прав на синхронизируемые файлы.

Решение: задать правильного пользователя (uid) в настройках ресурса на стороне сервера.

rsync: failed to connect to x.x.x.x (x.x.x.x): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(122)

Причина: не доступен удаленный хост.

Решение: проверить, что хости доступен по сети. Проверить настройку брандмауэра.

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

1. Настройка rsync-сервера

Для настройки rsync-сервера нужно установить пакет rsync:
# apt-get install rsync Затем, прописать опции командной строки, с которыми будет запускаться rsync-сервер в файл /etc/default/rsync. В данном файле можно задать следующие опции:

  • RSYNC_ENABLE - настройка автозапуска сервера при загрузке операционной системы. Переменная принимает следующие значения:
    • false - запретить запуск сервера rsync,
    • true - запускать самостоятельный сервер rsync,
    • inetd - запускать сервер rsync при необходимости из супер-сервера inetd.
  • RSYNC_CONFIG_FILE - задаёт место расположения файла конфигурации. По умолчанию этим файлом является /etc/rsyncd.conf
  • RSYNC_OPTS - задаёт дополнительные опции командной строки для запуска rsync-сервера.
    Например, можно задать опцию "--address=123.45.67.89" (по умолчанию - все локальные адреса), чтобы указать на каком адресе следует принимать соединения и/или опцию "--port=8730" (по умолчанию - 873), чтобы указать на каком порту следует принимать соединения.
  • RSYNC_NICE - задаёт приоритет процесса в планировщике задач.
Создать файл конфигурации rsync-сервера /etc/rsync.conf:
uid = rsyncd gid = mirror max connections = 50 read only = yes list = yes syslog facility = local5 dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz *.rar *.mp3 use chroot = yes outgoing chmod = Fu=rw,g=rw,o=,Du=rwx,g=rx,o= path = /home/mirror/debian/ comment = Debian Lenny i386 and amd64 repository path = /home/mirror/debian-cd/ comment = Debian Lenny i386 and amd64 DVD images Описание указанных опций:
  • uid - идентификатор пользователя, от имени которого будет работать rsync-сервер,
  • gid - идентификатор группы, от имени которой будет работать rsync-сервер,
  • max connections - максимальное количество одновременных подключений к rsync-серверу. Все подключения сверх указанного лимита будут отброшены.
  • read only - разрешать клиентам только чтение,
  • list - разрешать клиентам получать список файлов. Если запретить просмотр списка файлов, то клиенты смогут получить файл только зная его точное имя,
  • syslog facility - уровень отладочных сообщений для демона syslog,
  • dont compress - указывает шаблоны имён файлов, содержимое которых не нужно сжимать при передаче. Здесь полезно указать уже сжатые файлы, повторное сжатие которых не даст никакой выгоды, а только потратит ресурсы системы - это большинство аудио-, видео-файлов, большинство графических файлов, архивы.
  • use chroot - указывает, должен ли rsync сервер в целях обеспечения большей безопасности, менять корневой каталог на указанный в path.
  • outgoing chmod - задаёт права доступа к отдаваемым файлам. Поскольку протокол rsync позволяет вместе с содержимым файлов передавать права доступа к ним и идентификаторы владельца и группы, можно задать особые права доступа, которые будут заменять реальные права доступа к данному файлу или каталогу при его передаче по сети.
В квадратных скобках задаётся имя секции. Каждая секция обязана иметь собственный параметр path. Дополнительно в ней могут быть переопределены значения глобальных опций.

После изменения опций, если ваш rsync-сервер будет работать в самостоятельном режиме, нужно перезапустить его:
# /etc/init.d/rsync restart 2. Использование rsync-клиента

Для установки rsync-клиента нужно установить пакет rsync:
# apt-get install rsync Чтобы начать копирование с rsync-сервера, можно воспользоваться подобной командой:
$ rsync -avv rsync://[email protected]:873/debian/ debian/ Или проще:
$ rsync -avv rsync://mirror.yandex.ru/debian/ debian/ rsync-клиент может работать не только с rsync-сервером, он может работать и через ssh-подключение с теми машинами, где установлен rsync:
$ rsync -avv user@computer:/home/mirror/debian/ debian/ При этом он по сравнению с командой scp будет иметь следующие преимущества:

  • не будет копировать те файлы, временная отметка об изменении которых совпадает с временной меткой об изменении локальной копии файла,
  • умеет докачивать недокачанные фрагменты файла,
  • при всём при этом умеет проверять идентичность файлов с помощью хэш-функции, при необходимости докачивая отдельные блоки файла, результат вычисления хэш-функции для которых отличается.
Также rsync можно использовать для копирования локальных файлов:
$ rsync -avv /home/mirror/debian/ debian/ По сравнению с командой cp будет иметь следующие преимущества:
  • не будет копировать те файлы, временная отметка об изменении которых совпадает с временной меткой об изменении копии файла,
  • умеет копировать ссылки, устройства,
  • копирует права доступа к файлам,
  • при запуске от имени пользователя root будет копировать принадлежность файлов пользователям и группам.
При копировании можно задавать шаблоны включения и исключения файлов из процесса копирования, имеется масса других возможностей.

При синхронизации на Samba-ресурс или файловую систему FAT может случиться, что копируются не только изменённые файлы, а половина всех файлов плюс изменившиеся. Это связано с тем, что в файловой системе FAT исторически под хранение секунд отводилось лишь 5 бит. В 5 битах можно хранить не более 32 разных значений, поэтому секунды хранятся с округлением до чётного значения. Из-за этого rsync может решить, что файл изменился, хотя разница между отметками времени двух файлов составляет 1 секунду. Чтобы rsync не обращал внимание на разницу в одну секунду, следует указать ему дополнительную опцию --modify-window=1:
$ rsync -avv --modify-window=1 /home/fileserv1/ /home/fileserv2/ За более подробной информацией по программе rsync можно обратиться к системным страницам руководства rsync(1) и rsync.dconf(5) или к их переводам на русский язык

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

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

В этой статье мы рассмотрим каким образом настраивается синхронизация жесткого диска с помощью cwRsynс. Русскоязычных статей по работе с cwRsync я не нашел – все дружно копируют четыре шага по установке, и не касаются работы и настройки. Основную массу информации я черпал из http://rsync.samba.org , ведь параметры запуска для Rsync и cwRsync остаются одинаковыми.

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

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

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

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

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

Добавте $CYGWIN_INSTALL_PATH/bin/ в переменную окружения PATH
Панель управления -> Система -> Дополнительно -> Переменные окружения
Решите проблему с не-ascii символами. Т.е. нужно с www.okisoft.co.jp/esc/utf8-cygwin/ скачать файл cygwin.dll и заменить им тот, что идет в комплекте с cwRsync.
Для того чтобы файлы с не-ascii смволами в имене нормально передавались, добавте --iconv=. в опции при вызове rsync.

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

2. Работа с cwRsync на Сервер№1:
Для начала необходимо создать конфиг. файл. Создадим в c:\Program Files\cwRsync\bin\ папки conf и log . В папке conf создадим файл rsyncd.conf следующего содержания:

#### rsyncd.conf file #### uid = user_id gid = user_id use chroot = false # Даём разрешение использовать все диски а не только C. Если мы # установим в true, то rsync сможет обращатся только к диску С. hosts allow = 192.168.1.6 # Разрешаем обращаться только с Сервер№2 # Метка диска С path = /cygdrive/c/ comment = this is system drive read only = true #Метка диска Д path = /cygdrive/d/ comment = this is date drive read only = true #transfer logging = yes #### End of configuration file #### use chroot = yes – запуск rsync в chroot, для пущей безопасности; – название модуля; uid – должен соответствовать id владельца каталога, в который мы собираемся записывать; path – полный путь до каталога, в который будем записывать; list = no – не показывать секцию в листинге; comment – комментарий; read only = false – открыть секцию на запись; hosts allow – разрешить доступ к секции push только для определённых адресов; auth users = push – разрешить доступ только пользователю push; secrets file – файл соответствия имени пользователя определённому паролю.

Примечание:

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

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

"C:\Program Files\cwRsync\bin\rsync.exe" --config "C:\Program Files\cwRsync\bin\conf\rsyncd.conf" --daemon --log-file "C:\Program Files\cwRsync\bin\log\rsyncservice.log" --address 192.168.1.5

Config rsyncd.conf – указываем, где находится файл конфигурации. --daemon – запуск демона --log-file – включение ведения лога --address – указываем, какой адрес слушать

Полный перечень возможных параметров:

Daemon run as an rsync daemon --address=ADDRESS bind to the specified address --bwlimit=KBPS limit I/O bandwidth; KBytes per second --config=FILE specify alternate rsyncd.conf file --no-detach do not detach from the parent --port=PORT listen on alternate port number --log-file=FILE override the "log file" setting --log-file-format=FMT override the "log format" setting --sockopts=OPTIONS specify custom TCP options -v, --verbose increase verbosity -4, --ipv4 prefer IPv4 -6, --ipv6 prefer IPv6 -h, --help show this help (if used after --daemon)

После запуска демона появится окно Windows Firewall и процесс в менеджере задач.

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

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

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

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

3. Работа с cwRsync на Сервер№2:
Установим cwRsync на Сервер№2. Создадим в c:\Program Files\cwRsync\bin\ папки bat и log. В папке bat создадим следующий файл с именем sync_all.bat. В этом файле создадим записи для синхронизации каждой необходимой папки. Следует включать исключения для папок с логами и статистикой. Вот общий вид строки.

"C:\Program Files\cwRsync\bin\rsync.exe" -av --delete --exclude "/logs/" ::drive_c/Folder1/ "/cygdrive/c/Folder1/">"C:\Program Files\cwRsync\bin\log\Folder1.log"

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

Примечание:

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

Каждая запись состоит из следующих частей

A равносильно –rlptgoD r - рекурсивный режим l - пересоздание symlinks, это значит, что символические ссылки будут так же переноситься p – перенос прав t - передача времени модификации и его обновление на удаленной системе. Этот ключ должен быть установлен для точной синхронизации g - установить группу конечного файла таким же, как и у исходного o - установить владельца конечного файла таким же, как и у исходного v - verbose. Вывод сообщений в терминал. --delete - удаляет файлы, которых нет в источнике. --exclude – указываем то, что синхронизировать не нужно. user_id – uid, описанный на сервере @192.168.1.5 – IP адрес сервера::drive_d /Folder_sync1/ – Метка сервера и путь "/cygdrive/d/Folder_sync1/" - куда >"C:\Program Files\cwRsync\bin\log\Folder_sync1.log" - весь вывод в файл

Обратите внимание на последний слеши в путях, так как они имеют значение для rsync. Если на конце исходной директории стоит «/», то это означает копирование содержимого директории; отсутствие слеша означает копирование директории и ее содержимого.
Если не указать /, то на клиент в папке создастся папка с файлами. Иначе просто её содержимое.
При первом запуске синхронизации на Cервер№2, также появится сообщения от брандмауэра Windows о блокировании Rsync. Необходимо нажать Unblock.
Вот список всех допустимых параметров:

V, --verbose increase verbosity -q, --quiet suppress non-error messages --no-motd suppress daemon-mode MOTD (see caveat) -c, --checksum skip based on checksum, not mod-time & size -a, --archive archive mode; equals -rlptgoD (no -H,-A,-X) --no-OPTION turn off an implied OPTION (e.g. --no-D) -r, --recursive recurse into directories -R, --relative use relative path names --no-implied-dirs don"t send implied dirs with --relative -b, --backup make backups (see --suffix & --backup-dir) --backup-dir=DIR make backups into hierarchy based in DIR --suffix=SUFFIX backup suffix (default ~ w/o --backup-dir) -u, --update skip files that are newer on the receiver --inplace update destination files in-place --append append data onto shorter files --append-verify --append w/old data in file checksum -d, --dirs transfer directories without recursing -l, --links copy symlinks as symlinks -L, --copy-links transform symlink into referent file/dir --copy-unsafe-links only "unsafe" symlinks are transformed --safe-links ignore symlinks that point outside the tree -k, --copy-dirlinks transform symlink to dir into referent dir -K, --keep-dirlinks treat symlinked dir on receiver as dir -H, --hard-links preserve hard links -p, --perms preserve permissions -E, --executability preserve executability --chmod=CHMOD affect file and/or directory permissions -A, --acls preserve ACLs (implies -p) -X, --xattrs preserve extended attributes -o, --owner preserve owner (super-user only) -g, --group preserve group --devices preserve device files (super-user only) --specials preserve special files -D same as --devices --specials -t, --times preserve modification times -O, --omit-dir-times omit directories from --times --super receiver attempts super-user activities --fake-super store/recover privileged attrs using xattrs -S, --sparse handle sparse files efficiently -n, --dry-run perform a trial run with no changes made -W, --whole-file copy files whole (w/o delta-xfer algorithm) -x, --one-file-system don"t cross filesystem boundaries -B, --block-size=SIZE force a fixed checksum block-size -e, --rsh=COMMAND specify the remote shell to use --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 --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 -m, --prune-empty-dirs prune empty directory chains from file-list --numeric-ids don"t map uid/gid values by user/group name --timeout=SECONDS set I/O timeout in seconds --contimeout=SECONDS set daemon connection timeout in seconds -I, --ignore-times don"t skip files that match size and time --size-only skip files that match in size --modify-window=NUM compare mod-times with reduced accuracy -T, --temp-dir=DIR create temporary files in directory DIR -y, --fuzzy find similar file for basis if no dest file --compare-dest=DIR also compare received files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged -z, --compress compress file data during the transfer --compress-level=NUM explicitly set compression level --skip-compress=LIST skip compressing files with suffix in LIST -C, --cvs-exclude auto-ignore files in the same way CVS does -f, --filter=RULE add a file-filtering RULE -F same as --filter="dir-merge /.rsync-filter" repeated: --filter="- .rsync-filter" --exclude=PATTERN exclude files matching PATTERN --exclude-from=FILE read exclude patterns from FILE --include=PATTERN don"t exclude files matching PATTERN --include-from=FILE read include patterns from FILE --files-from=FILE read list of source-file names from FILE -0, --from0 all *from/filter files are delimited by 0s -s, --protect-args no space-splitting; wildcard chars only --address=ADDRESS bind address for outgoing socket to daemon --port=PORT specify double-colon alternate port number --sockopts=OPTIONS specify custom TCP options --blocking-io use blocking I/O for the remote shell --stats give some file-transfer stats -8, --8-bit-output leave high-bit chars unescaped in output -h, --human-readable output numbers in a human-readable format --progress show progress during transfer -P same as --partial --progress -i, --itemize-changes output a change-summary for all updates --out-format=FORMAT output updates using the specified FORMAT --log-file=FILE log what we"re doing to the specified FILE --log-file-format=FMT log updates using the specified FMT --password-file=FILE read daemon-access password from FILE --list-only list the files instead of copying them --bwlimit=KBPS limit I/O bandwidth; KBytes per second --write-batch=FILE write a batched update to FILE --only-write-batch=FILE like --write-batch but w/o updating dest --read-batch=FILE read a batched update from FILE --protocol=NUM force an older protocol version to be used --iconv=CONVERT_SPEC request charset conversion of filenames --checksum-seed=NUM set block/file checksum seed (advanced) -4, --ipv4 prefer IPv4 -6, --ipv6 prefer IPv6 --version print version number (-h) --help show this help (see below for -h comment)

Добрый день! Возникла проблема: Никак не могу скопировать файлы с сервера на локальный компьютер под Windows. Пробовал так: Нахожусь на сервере, в папке с сайтами. Пишу такую команду: rsync -czavP сайт_1 localhost:Z:/home/сайт_1/ . Либо пишет, что пароль неправильный, либо запрашивает пароль к локальной машине, которого у меня на самом деле нет. В чем беда? Буду благодарен за помощь)Дмитрий

Что такое rsync?

Во-первых, rsync это утилита использующася только в Linux-системах. Для того, чтобы она работала в windows, её нужно устрановить там и настроить, например через cygwin. Во-вторых, почему вы пытаетесь отправлять файлы на localhost ? Localhost — это внутренний адрес-петля 127.0.0.1. При попытке отправить файлы туда, находясь в linux, вы пытаетесь подключиться с сервера на самого себя, т.е на сам сервер.

Как сделать синхронизацию папки c Linux на Windows?

Для того чтобы отправить файлы в windows c помощью rsync самый лучший способ — это смонтировать файловую систему локального windows-компьютера на сервер через по smb. Тогда не потребуется устанавливать rsync на сам Windows и это решает проблему с доступом между сервером и домашним компьютером.

Для этого нужно подключаясь к серверу с локального компьютера сделать . Пробрасывать нужно localhost:445. Затем, нужно чтобы в системе на сервере был установлен пакет cifs-utils. Расшариваете на локальном компьютере нужную папку, затем создаете точку монтирования на сервере, и монтируете туда уже c localhost. Кстати, на нашем сайте есть генератор-скриптов для бэкапов сайта, и в нем реализована генерация такого скрипта.

Пример скрипта для синхронизации папок

Давайте посмотрим на примере такого скрипта подобное копирование:

Start /b d:plink.exe -pw rootpassword [email protected] -N -R 445:localhost:445
d:plink.exe -pw rootpassword [email protected] -C "mkdir /tmp/win&&mount -t cifs -o rw,nounix,soft,intr,username=user,password=windowspass //localhost/backup /tmp/win"
d:plink.exe -pw rootpassword [email protected] -C "rsync -a --no-p --no-o --no-o --no-t /var/www/example.com/ /tmp/win && umount /tmp/win&&rmdir /tmp/win"
taskkill /f /im plink.exe

В первой строке запускаем в фоне программу plink.exe (консольный ssh-клиент для Windows). Подключаемся на удаленный сервер example.com и туннелируем порт 445 с локальной машины на lo-интерфейс сервера. После подключения по ssh сервер будет «думать», что у него на localhost:445 есть windows-шара или запущен smb, сервер.

start /b d:plink.exe -pw rootpassword [email protected] -N -R 445:localhost:445

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

d:plink.exe -pw rootpassword [email protected] -C "mkdir /tmp/win&&mount -t cifs -o rw,nounix,soft,intr,username=user,password=windowspass //localhost/backup /tmp/win"

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

d:plink.exe -pw rootpassword [email protected] -C "rsync -a --no-p --no-o --no-o --no-t /var/www/example.com/ /tmp/win && umount /tmp/win&&rmdir /tmp/win"

Здесь мы «убиваем» SSH-cессию, запущенную в фоне в самом начале.

taskkill /f /im plink.exe

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

Если у вас возникло желание поддерживать рабочие станиции в максимально «защищённом» состоянии, а так же насколько возможно «автоматизировать» этот процесс, то этот пост для вас.

Будет использоваться:

Немного batch файла
Немного Linux сервера
Немного Windows Server 2008 R2 и Групповых политик

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

Для этого начнём с клиентской части. Мы используем shadow volume create - expand, дабы исключить проблему нечитания открытых пользователем файлов, таких как Outlook pst, или документов. Нам понадобится набор от Microsoft, который содержит vshadow - это Volume Shadow Copy Service SDK 7.2, который можно бесплатно скачать с серверов Microsoft, http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23490 .Нам понадобятся vshadow.exe и vshadow.pdb файлы из этого SDK. Внимание - они разные для 64-битных, и 32-битных систем.

64-bit - %PROGRAMFILES%\Microsoft\VSSSDK72\TestApps\vshadow\bin\obj-chk\amd64
32-bit - %PROGRAMFILES%\Microsoft\VSSSDK72\TestApps\vshadow\bin\release-xp

Так же нам понадобится набор файлов из cwrsync под Windows -

После инсталляции их можно будет найти тут:

%PROGRAMFILES%\cwRsync\bin

Складываем все файлы в одну папку, назовём её для удобства «Backup», и начинаем создавать файл, который будет запускать эту «машину смерти» - по факту, это простой batch файл, который будет отрабатывать все действия. Назовём его для удобства «backup.cmd»

Пишем в файл:

(неведома магия)

Setlocal
if NOT "%CALLBACK_SCRIPT%"=="" goto:IS_CALLBACK
set SOURCE_VOLUME=C:
set DESTINATION_VOLUME=O:
set CALLBACK_SCRIPT=%~dpnx0
set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd
%~dp0\vshadow.exe -nw -p -script=%TEMP_GENERATED_SCRIPT% -exec=%CALLBACK_SCRIPT% %SOURCE_VOLUME%
del /f %TEMP_GENERATED_SCRIPT%
goto:EOF
:IS_CALLBACK
setlocal
call %TEMP_GENERATED_SCRIPT%
%~dp0\vshadow.exe -el=%SHADOW_ID_1%,%DESTINATION_VOLUME%

Эта часть «макаронного кода» делает shadow volume copy с C: и подключает её на O:, который мы и будем использовать для копирования, а потом тем же скриптом уберём. Теперь часть, которая отвечает за действия rsync:

(неведома магия)

Setlocal
SET CWRSYNCHOME=C:\Backup\ (где папка с файлами rsync и vshadow)
SET CWOLDPATH=%PATH%
SET CYGWIN=nontsec
SET PATH=%CWRSYNCHOME%;%PATH%
SET HOME=С:\Backup\LOG\ (сюда будем сохранять логи)
SET RSYNC_PASSWORD=(тут пароль, который установлен на принимающем сервере rsync)
SET MY_NAME=%computername%

(теперь указываем, что копировать)

SET FS_SRC_HOME="/cygdrive/O/Users/" (используем именно в таком формате, указываем папку до "Users")
SET FS_SRC_BCK="/cygdrive/C/Backup/" (где файлы rsync, чтобы положить их вместе с логами на бекап сервер)

Del /q С:\backup\log\*.log (стираем старые логи перед запуском)

(запускаем)

Rsync -av --chmod=ug=rwx %FS_SRC_B2% backupusr@hostname::sbackupusr/%MY_NAME%
rsync -avhP --inplace --stats --del --modify-window=1 --log-file=%FS_SRC_BCK%DATA/backupwork.log --exclude-from=%FS_SRC_BCK%DATA/exclude %FS_SRC_HOME% backupusr@hostname::sbackupusr/%MY_NAME%/snapshot/
rsync -av %FS_SRC_BCK% backupusr@hostname::sbackupusr/%MY_NAME%/snapshot/Backup/

Первой командой мы создаём директорию по имени компьютера %computername%
Второй командой мы копируем данные с временно подключенного диска O:\Users, с сохранением лог-файла.
Третьей командой мы копируем всю папку C:\Backup, для сохранности лога и самой программы.

Вот эта строка «backupusr@hostname::sbackupusr» - указывает на пользователя на принимающей стороне а так же хост принимающей стороны. (Будет рассмотрено во втором псто).

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

(неведома магия)

SET HOME=%HOMEDRIVE%%HOMEPATH%

VSHADOW.EXE -ds=%SHADOW_ID_1%

Это всё нужно сложить в обычный.cmd файл, как я уже указывал выше, сохранить его в папку Backup, где хранятся файлы rsync и vshadow, и запускать по мере надобности. Работает на Windows Vista, Windows 7, Windows XP, 32 и 64-bit

P.S: Конечно, будет необходимо поднять принимающую машину, в нашем случае на базе *nix, и создать разделы, которые будут защищены true-crypt в случае кражи сервера. Так же в дальнейшем эту папку можно запаковать в msi инсталлер для установки на все рабочие станции через Групповые Политики и использовать их же для создания Scheduled Tasks и закрытия доступа в Backup папку для юзера. Но это уже другая история.