Настройка rsync под виндовс. Решение частного вопроса создания резервной копии данных с помощью rsync. Графический интерфейс rsync. Rsync примеры использования в Handy Backup Server Network

  • Дата: 27.12.2022

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

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

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

Постановка задачи. Один из компьютеров в реальном масштабе времени синхронизирует важные данные на облако Диск.Яндекс. Для гарантии сохранения этого набора данных они должны быть переданы на облако MEGA. При этом резервная копия должна быть идентична источнику. Аппаратные мощности компьютера с источником данных не позволяют одновременно запустить 2 сеанса синхронизации данных в реальном масштабе времени (Диск.Яндекс и MEGA), так как на компьютере с источником данных производится одновременная работа с 10-15 файлами офисного ПО Microsoft Office.

Реализация решения возложена на компьютер c большими аппаратными возможностями, функционирующий под управлением Linux Mint.

Для получения идентичной копии данных источника владелец аккаунта Диск.Яндекс предоставил синхронизируемые данные в доступ другому аккаунта Диска.Яндекс. При этом для исключения непреднамеренного удаления данных доступ предоставлен уровнем "только чтение".

В комплект поставки дистрибутива Linux Mint включено ПО резервного копирования rsync. В целях более удобной настройки синхронизации каталогов через rsync дополнительно была установлена графическая оболочка управления – пакет grsync, представляющий из себя GTK+ frontend для rsync.

После установки grsync запускается уже с русскоязычным интерфейсом.


По умолчанию предлагается настроить задание под именем "default". Но кнопкой + (Добавить) можно создать задание с желаемым именем.


Настройки сессии условно разделены на 3 категории: основные, расширенные и дополнительные.

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


Далее следуют настройки, относящиеся к назначаемому заданию синхронизации.


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

Так как каталог-источник является копией данных с уровнем доступа "только чтение", а клиент синхронизации с облаком MEGA создаёт в синхронизируемом каталоге компьютера скрытый каталог.debris, то при выполнении задания синхронизации каталогов его необходимо исключить (в каталоге-источнике каталог.debris будет отсутствовать). Если этого не сделать, то в процессе синхронизации в каталоге-получателе каталог.debris будет удалён.

Что из себя представляет каталог.debris и для чего он нужен .

В опциях grsync настройки исключения каталогов не предусмотрено. Для указания исключения каталога из синхронизации в поле "Дополнительные опции" раздела "Расширенные опции" необходимо вписать строку --exclude ".debris"


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


После внесения настроек в задание можно запустить его текст или выполнение, для чего нажать кнопку главного меню: "Симуляция" или "Выполнить".

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

FreeFileSync - это программное обеспечение для сопоставления и синхронизации папок, которое создает и управляет резервными копиями всех важных файлов. Вместо того, чтобы копировать каждый файл каждый раз, FreeFileSync определяет различия между исходной и целевой папками и передает только минимальный объем данных. FreeFileSync - это программное обеспечение с открытым исходным кодом, доступное для Windows, Linux и macOS

Бесплатная (с ограничениями) Открытый код Mac Windows Linux openSUSE CentOS Ubuntu Debian

  • Syncthing

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

    Бесплатная Mac Windows Linux Android Android Tablet BSD Self-Hosted Cloudron

  • SyncToy

    SyncToy - это бесплатный PowerToy, разработанный Microsoft, который обеспечивает простой в использовании графический пользовательский интерфейс, который может автоматически синхронизировать локальные или сетевые файлы и папки, но не файлы WebDAV, «Windows Mobile» или папки и не синхронизировать треугольник, как только Allway Sync , Synkron, SyncLess или GoodSync

    Бесплатная Windows

  • SyncBack

    SyncBack - это программное обеспечение для резервного копирования и синхронизации файлов, которое позволяет выполнять резервное копирование и синхронизацию файлов на одни и те же или разные диски, на разные носители (CD, DVD, Flash, zip) или на удаленный сервер.
    Доступны три версии SyncBack: SyncBackFree, SyncBackSE (shareware) или SyncBackPro (shareware)

    Бесплатная (с ограничениями) Mac Windows Linux Android Android Tablet

  • GoodSync

    GoodSync - это профессиональное легкое и надежное программное обеспечение для резервного копирования файлов и синхронизации файлов.

    Бесплатная (с ограничениями) Mac Windows Android iPhone Android Tablet iPad

  • Synkron

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

    Бесплатная Открытый код Mac Windows Linux PortableApps.com

  • Unison

    Unison - это инструмент синхронизации файлов для Unix и Windows. Он позволяет хранить две копии коллекций файлов и каталогов на разных хостах (или разных дисках на одном и том же хосте), изменяться отдельно, а затем обновляться, распространяя изменения каждой реплики на другую.

    Бесплатная Открытый код Mac Windows Linux

  • Bvckup 2

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

    Платная Windows

  • Déjà Dup

    Déjà Dup - простой инструмент резервного копирования. Он скрывает сложность создания резервных копий «правильный путь» (зашифрованный, вне сайта и регулярно) и использует Duplicity в качестве бэкэнд. Он поддерживает локальные или удаленные места резервного копирования, включая Amazon S3.

    Бесплатная Открытый код Linux

  • Rclone

    Rclone - это программа командной строки для синхронизации файлов и каталогов с и из:
    - Гугл Диск
    - Amazon S3
    - Openstack Swift / Rackspace облачные файлы / Memset Memstore
    - Dropbox
    - Google Cloud Storage
    - Amazon Cloud Drive
    - Microsoft One Drive
    - Хубический
    - Backblaze B2
    - Yandex Disk
    - Локальная файловая система

    Бесплатная Открытый код Mac Windows Linux BSD Solaris FreeBSD NetBSD OpenBSD

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

    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)

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

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