Настройка rsync под виндовс. Rsync: копирование с Windows на Linux

Решение для резервного копирования, основанное на реализации rsync для Windows , используют популярную технологию синхронизации файлов и папок , находящихся в разных местах сети, с минимальным объёмом передаваемых данных.

Технология Rsync бэкапа

Название технологии копирования rsync (remote synchronization) – дословно: «удалённая синхронизация». Она изначально разрабатывалась, как приложение для Unix. Существует аналог rsync для Windows, cwrsync . Итак, каковы же преимущества резервного копирования rsync для бэкапа и синхронизации в Windows?

Rsync примеры использования в Handy Backup Server Network

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

Скачать

Купить!

Версия 8.0.4 от 10 июля 2019. 104 MB
Программа резервного копирования Handy Backup. 27800 RUB за лицензию

Handy Backup Network Server

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

Скажем, у Вас есть две рабочие станции в сети, которые вы хотите синхронизировать. Бэкап с помощью rsync для Windows позволяет пересылать лишь данные, различающиеся в конкретных папках на двух машинах, значительно экономя таким образом время работы.

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

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

Инкрементальный бэкап при помощи rsync в сетях Windows-Unix: за и против

Давайте посмотрим внимательнее на программный бэкап при помощи rsync. Обратим внимание на наиболее интересные ситуации. Предположим, что у нас теперь смешанная сеть ОС Windows-Unix.

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

Существует и ряд возможных проблем использования rsync в Windows :

  • Неопределённость с поддержкой 64-битных серверных платформ;
  • Нестабильность в процессе длительной обработки большого объёма информации;
  • Необходимость настройки приложения для каждой конкретной задачи.

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

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

Планы расширения технологии Rsync Windows в программе Handy Backup

В настоящее время разработчики программного обеспечения Handy Backup уделяют большое внимание технологии копирования Rsync, активно внедряя её в такие прикладные операции, как:

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

Разработчики Handy Backup внедрили функционал для бэкапа Rsync Windows и Linux компьютеров, и список возможностей постоянно расширяется! А что, если бы вы могли управлять всей сетью с мобильного устройства Android? Или делать бэкап карты памяти телефона как рабочей станции вашей локальной сети? Нравится идея? Тогда вам понравятся и релизы Handy Backup, работающие на алгоритме rsync backup для Windows от Новософт.

Интересная заметка, которая по каким-то причинам до сих пор не попала в блог. В примере настройки 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) или к их переводам на русский язык

Добрый день! Возникла проблема: Никак не могу скопировать файлы с сервера на локальный компьютер под 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 на сервер.

В процессе создания кластера стал вопрос: чем же можно обеспечить синхронизацию файлов и папок на отдельных узлах? После недолгих поисков всевозможных готовых решений наткнулся на известную утилиту, работающую под 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)

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

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

Немного 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 папку для юзера. Но это уже другая история.