Rsync копирование файлов windows

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

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

Сам сервис работает на SSH протоколе по умолчанию, но может работать и на собственном протоколе rsyncd, но обо всем по порядку.

Установка

По умолчанию rsync есть не везде, поэтому если вы получили ошибку «bash: rsync: command not found» — значит его нужно установить (как на локальной, так и на удаленной машине):

# для debian 
apt install rsync

# для centos
yum install rsync

Базовый синтаксис

rsync <опции> <что копируем с компьютера> <пользователь@хост:/куда_копируем>

Основные опции RSync

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

Базовые опции:

-n, --dry-run – что-то типа тестового режима, указывает не осуществлять никаких передач, а только сообщать о тех действиях, которые могли бы произойти.
-a, --archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца (эта опция включает в себя опции rlptgoD, они будут описаны следующими). Учтите, эта опция не сохраняет жесткие ссылки.
-r, --recursive – рекурсивный режим (копирование всех директорий и файлов в них).
-l, --links – копировать символьные ссылки как символьные ссылки.
-p, --perms – сохранять права для файлов. Без указания этой опции каждый новый файл получает те права доступа, что имеет исходный с учетом umask, действующей на приемной стороне, в то время как все другие (включая обновляемые) сохраняют свои уже существующие разрешения (это то же поведение, что имеют другие утилиты копирования файлов, такие как cp).
-t, --times – обновлять время модификации файла на приёмной стороне (при отсутствии этой опции или -a становиться неэффективной оптимизация передачи по времени изменения файлов).
-g, --group – сохранять группу пользователя. Если удаленная сторона не действует из-под супер-пользователя, то сохранятся только те значения групп, членом которых является пользователь приемной стороны, т.е. имеет значение имя группы, а не ее id.
-o, --owner – сохранять владельца на приемной стороне в точности с оригиналом. На большинстве систем только супер-пользователь имеет право устанавливать владельца файла. Нужно заметить, что если удаленный демон действует в chroot-окружении, то подразумевается наличие параметра --numeric-ids (он описан ниже), потому что на удаленной стороне в этом случае нет доступа к именам пользователей в /etc/passwd.
-D, --devices – сохранять файлы устройств (root only).

Работа с файлами:

-u, --update – не перезаписывать более новые файлы: указывает пропускать любые файлы, уже существующие на приемной стороне с более поздней датой, чем у исходных файлов.
--delete – удалять файлы, которых нет в источнике (полезно для создания точной копии).
--ignore-errors – продолжать копирование и удаление после появления ошибок (При удалении (--delete) форсирует процесс и игнорирует любые ошибки, даже ошибки ввода-вывода.)
--exclude – исключить файлы (подробно описано ниже).
--include – не исключать файлы (подробно описано ниже).
-F – опция которая заставляет искать файл .rsync-filter, в котором настраиваются фильтры (exclude/include). Если опция указана дважды то будет исключен и сам файл .rsync-filter.
-x, --one-file-system – не переходить границ файловой системы при рекурсивном копировании. Это полезно при необходимости копирования только одной файловой системы.
-R, --relative – использовать относительные пути при создании символических ссылок. Это значит, что посылаются полные пути, указанные в командной строке, а не последние части имен файлов. На практике это полезно, когда Вам нужно послать несколько различных каталогов за раз.
-H, --hard-links – пересоздать жесткие ссылки на конечной стороне в соответствии с тем, что имеется на исходной. Без этого параметра жесткие ссылки обрабатываются как обычные файлы.
-L, --copy-links – Если обнаружена символьная ссылка, то на приемную сторону копируется файл, на который она указывает, а не такая же символьная ссылка.
--numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удалённой стороне номера как есть.
Вместо имен групп и пользователей посылаются их числовые id и ставятся в соответствие друг другу на обоих концах.
По умолчанию rsync использует имена групп и пользователей для определения владельца файлов. Специальные uid 0 и gid 0 никогда не отображаются через имена пользователей/групп, даже если не указана --numeric-ids.
Если исходная система работает в ограниченном chroot-окружении или если пользователь или группа не существуют на приемной стороне, то используются исходные числовые id.
-m, --prune-empty-dirs – не копировать пустые директории. 

Настройка синхронизации/подключения/передачи файлов:

-c, --checksum – использование сверки по контрольным суммам, а не по времени изменения и размеру файлов.
--size-only – сверять только размер файлов (по умолчанию проверяется размер и время модификации).
-z, --compress – компрессия данных при передаче (реализуется gzip).
-e,--rsh="command" – опция позволяет выбрать альтернативный протокол подключения между удаленной и локальной машинами.
--max-size – максимальный размер файла для передачи.
--bwlimit — ограничение скорости для передачи файлов (Kbit/s).
--partial – По умолчанию rsync будет удалять все частично-переданные файлы в случае сбоя передачи. Если этот параметр указан, то rsync будет сохранять частично-переданные файлы, что может сократить время копирования при повторном запуске.
-P – данная опция включает в себя опцию --partial и --progress.

Отображение/результат:

--progress – выводить прогресс передачи файлов.
--stat – показать статистику передачи.
-v, --verbose – вывести подробную информацию о процессе: один -v будет выдавать список переданных файлов и итог в конце, два -v выдает детали о пропущенных файлах и более подробный итог, больше -v полезно для отладки.
-q, --quiet – минимальная информация.

Опции полезные для создания инкрементальных резервных копий:

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

Теперь пройдемся по базовым примерам.

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

Вот так:

rsync -av /home/user/Downloads/files/ /home/user/Downloads/copyfiles

Данная команда копирует файлы (т.е. содержимое) из каталога /home/user/Downloads/TEMP/files/ в каталог /home/user/Downloads/TEMP/copyfiles.

Важный момент:

  • если в конце пути до источника (каталога) нет слэша, то будет скопирован сам каталог (в примере выше это files).
  • если слэш указан, то будет скопировано содержимое каталога (т.е. то, что внутри files, из примера выше)

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

rsync -av ./2021 ./logo.svg.png ./copy2021 ./copydir

Находясь в нужном каталоге, мы скопировали каталог 2021, файл logo.svg.png и еще один каталог copy2021 в несуществующий ранее каталог copydir.

Вот как это выглядит наглядно:

rsync -av ./2021 ./logo.svg.png ./copy2021 ./copydir
sending incremental file list
created directory ./copydir
logo.svg.png
2021/
2021/filefromsrv
2021/filestorage.png
2021/login.png
2021/mainweb.png
2021/motiondetection.png
2021/motioneye-movies.png
2021/motioneye-recordetmovies.png
copy2021/
copy2021/just-file.txt

sent 723,033 bytes  received 349 bytes  1,446,764.00 bytes/sec
total size is 721,629  speedup is 1.00

Получается это не плохая альтернатива cp :)

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

Вот так

Важно указывать полный путь на удаленном сервере, иначе rsync попытается скопировать каталог «2021» в корень удаленного сервера.
Еще важно указывать полный путь до удаленного сервера, так как, к примеру, копируя файл «file.txt» на сервер указав путь /home/user/somedir, каталог somedir не будет создан, вместо этого файл file.txt скопируется на сервер под именем somedir. Чтобы избежать этого используйте путь полный путь /home/user/somedir/.

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

Но важно понимать, что сжатие имеет смысл использовать там где это нужно, так как в новых версиях ssh уже использует сжатие передаваемых данных, тратить ресурсы CPU не стоит, особенно на слабых машинах или NAS серверах.

Как скопировать/синхронизировать с удаленного сервера на компьютер

Вот так:

В данном примере мы копируем файл filefromsrv в каталог, в котором находимся.

Как указать другой порт ssh и ключ?

С помощью опции -e (она же —rsh). Вот как скопировать файл с компьютера на сервер у которого не стандартный ssh порт:

А вот как можно указать ключ авторизации и порт:

rsync -av -e "ssh -p 2013 -i ~/.ssh/id_rsa" ./filefromsrv  [email protected]:/home/user/mydir/

Кстати, если мы настроим ssh алиас, то мы можем копировать файлы не указывая лишних ключей.

Пример конфига:

$ cat ~/.ssh/config
Host srv
   HostName 10.10.20.7
   Port 2013
   User user

Пример команды:

rsync -av ./filefromsrv srv:/home/user/somedir/

Я хочу видеть прогресс копирования/синхронизации

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

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

rsync -av ./somedir [email protected]:/home/leo/
sending incremental file list
somedir/
somedir/Screenshot from 2021-01-22 17-42-17.png
somedir/Screenshot from 2021-01-24 02-17-17.png

sent 1,996,838 bytes  received 58 bytes  3,993,792.00 bytes/sec
total size is 2,041,319  speedup is 1.02

Если мы хотим видеть наиболее интересный вывод, то нам в этом поможет ключ —progress. Вот пример:

rsync -aP ./somedir [email protected]:/home/user/
sending incremental file list
somedir/
somedir/Screenshot from 2021-01-22 17-42-17.png
        194,291 100%   51.35MB/s    0:00:00 (xfr#1, to-chk=1/3)
somedir/Screenshot from 2021-01-24 02-17-17.png
      1,847,028 100%   21.22MB/s    0:00:00 (xfr#2, to-chk=0/3)

Некоторые могут советовать ключ -P, но имейте в виду, -P включает в себя ключ —partial и —progress одновременно (что в целом не так страшно).

Как ограничить скорость передачи файлов?

Нужно указать опцию —bwlimit=SPEED, где SPEED это скорость в Кбайт в секунду:

Полезно бывает на слабом интернете с большими файлами.

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

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

rsync -av --exclude={'user/.local/share/Trash','user/.cache'} /home/user [email protected]:/home/user/bkp/

Конечно можно указать одну директорию:

Еще мы можем исключить файлы с определенным расширением:

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

rsync -av --exclude="*.tmp" --exclude="tmp/*" --exclude="*~" /var/www/site [email protected]:/home/user/bkp/

Для копирования определенного типа файлов (да и не только) мы можем использовать опцию —include. Используется она точно так же, как и exclude. Вот пример, в котором я загружаю на сервер только все файлы с расширением .sql:

Исключения с помощью .rsync-filter

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

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

Ниже приведен один из примеров настройки исключений в файле .rsync-filter с комментариями:

cat .rsync-filter 
# исключаем только каталог .cache (не будут исключены каталоги work/lo*/.cache и dir2/.cache)                                                                        
- /.cache
# исключаем все каталоги Trash во всех папках
- /**/Trash/
# исключаем каталог Cache в каталогах .mysoft/soft*/
- /.mysoft/*/Cache
# исключаем файл pass.md
- pass.md
# исключаем все файлы с расширением .tmp
- *.tmp
# исключаем весь каталог example
- /example/
# Оставляем каталог Trash в каждом каталоге work/lo*/..
+ /work/**/Trash/

Для того, чтобы rsync заметил файл .rsync-filter, достаточно указать опцию -F:

rsync -avF ./somedir 10.10.20.15:/home/leo/

В итоге на сервер будут скопированы только эти файлы:

Кстати, если мы не хотим чтобы сам .rsync-filter не копировался, то -F нужно будет указать дважды

Другие полезные опции

—delete / —delete-after / —del (—delete_during)

Если мы делаем ежедневные резервные копии и не хотим засорять удаленный сервер лишними файлами (которых уже нет в источнике), то мы можем использовать опцию —delete:

В результате будет удален файл, которого больше нет в директории источника (в somedir):

rsync -avz -e "ssh -p 2013" --delete ./somedir [email protected]:/home/bkp/
[email protected]'s password: 
sending incremental file list
deleting somedir/lolo
somedir/

sent 159 bytes  received 77 bytes  67.43 bytes/sec
total size is 2,041,319  speedup is 8,649.66

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

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

Кстати, это не все «delete» параметры, которые есть, вот их полный список с кратким описанием:

--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

А если вам по какой-то причине не нужно обновлять файлы на принимающем сервере, вместо опции —del.. можно использовать опцию —ignore-existing.

—no-perms —no-owner —no-group

Иногда нам может потребоваться не переносить атрибуты (права файлов, пользователя и группу пользователя). Для этого мы можем воспользоваться опциями —no-p —no-o —no-g (оно же —no-perms —no-owner —no-group):

rsync -avz -e "ssh -p 2013" --no-p --no-o --no-g ./somedir 

Важно соблюдать порядок (особенности работы «—no-OPTION» в rsync).

—inplace

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

rsync -av --inplace ./Видео.mp4 ./vidinplace.mp4

-W, —whole-file

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

Что в итоге?

Я постарался описать наиболее частые примеры использования rsync, и сказу сразу: это только минимум того, что может эта утилита.

Если вы где-то нашли ошибку, или есть еще какие-то интересные способы использования rsync — пишите, я добавлю их в статью ;).

Источники:

  • https://download.samba.org/pub/rsync/rsync.html
  • http://www.opennet.ru/man.shtml?category=1&russian=0&topic=rsync
  • https://www.alexeykopytko.com/2017/rsync-howto/
  • https://centos.name/?page/howto/rsync
  • https://obu4alka.ru/rsync-synchronization-dir-linux.html
  • https://superuser.com/questions/156664/what-are-the-differences-between-the-rsync-delete-options
  • https://unix.stackexchange.com/questions/102211/rsync-ignore-owner-group-time-and-perms

Хочу поделиться вариантом использования rsync для синхронизации файлов между внешней UNIX/Linux системой и локальной системой Windows.

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

Мною были найдены несколько вариантов реализации rsync под платформу win32:

  1. rsync-win — вполне работоспособная сборка версии 2.5.7, но достаточно старая — датируемая 2002 годом. Содержит в себе команду rsync, которая имеет те же ключи, что и оригинальный rsync. В работе себя показало очень медленным и нестабильным решением.
  2. RsyncShare — дружественная по интерфейсу реализация rsync сервера под Windows.
  3. winrsync — графический клиент написанный на PHP4 и использованием библиотеки GTK.
  4. cwRsync — сборка rsync версии 3.04.

Из рассмотренных вариантов, я выбрал cwRsync.

Инсталляция

Скачиваем дистрибутив с домашней страницы cwRsync

У меня это был файл cwRsync_2.1.5_Installer.zip

Устанавливаем в систему. Скорее всего путь будет «C:\Program Files\cwRsync\»

Поскольку это консольное приложение и вызов его может потребоваться в разных контекстах. Я рекомендую обеспечить возможность нахождения приложения с помощью переменной окружения %Path%, мне больше нравится копировать подобные утилиты в специальный каталог, предназначенный для множества консольных утилит и который давно прописан в переменной %Path%. Если такого каталога нет, можно положить в %Systemroot%, поскольку этот каталог перечислен в %Path% по умолчанию. Либо добавить путь C:\Program Files\cwRsync\ в %Path% (изменения вступают в силу после повторного входа в систему). Вообщем, выбирайте по вкусу. В любом случае при наборе rsync в коммандной строке — мы должны увидеть вывод встроенной справки.

Использование

Формат вызова:
rsync опции источник приемник

Пример вызова:
rsync -rut -v -e ssh username@192.168.0.1:/remotefolder localfolder/
Данный пример копирует файлы с внешней системы в локальный фолдер.

Итак, какие опции использованы в даном примере:

-rut — в одну «кучу» собраны ключи определяющие режим копирования файлов:
r — рекурсивный обход дерева каталогов
u — обновлять только измененные файлы
t — сохранять значения даты и времени изменения файла

-e ssh — Как известно, утилита rsync может работать, используя разные оболочки для связи хостов, по умолчанию используется ssh. Для однозначности, я всегда указываю используемую оболочку.

username@192.168.0.1:/remotefolder localfolder/ — авторизация под пользователем username на хосте с адресом 192.168.0.1, будут браться файлы из каталога /remotefolder, копируемые дерево каталогов и файлы будут помещены в папку localfolder/ относительно текущего пути в момент вызова rsync.

При каждом запуске rsync будет запрашивать пароль для username. Для пакетного режима, следует воспользоваться возможностью авторизации SSH по ключам.

Чтобы изменить направление копирования файлов, достаточно в качестве источника указать локальный ресурс, а в качестве приемника — внешний.

Авторизация по ключам

Запускаем ssh-keygen.exe под тем пользователем от имени которого будет запускаться rsync в пакетном режиме:
На все вопросы нажимаем Enter. Пароль для ключа тоже не указываем, иначе в пакетном режиме будет запрашиваться пароль, но уже для самого ключа. Ключ должен быть успешно создан — в домашнем каталоге windows пользователя (переменная %USERPROFILE%) будет создан каталог .ssh, в нем записаны файлы ключей: id_rsa и id_rsa.pub. Теперь содержимое файла id_rsa.pub нужно скопировать на сервер (в нашем случае хост 192.168.0.1), добавив эту строку в файл ~/.ssh/authorized_keys домашнего каталога пользователя, под которым мы хотим авторизоваться на внешней системе.

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

  1. Настройка автоматического копирования на компьютере ← вы здесь.
  2. Запуск собственного удалённого файлового сервера ← на следующей неделе.
  3. Настройка автоматического копирования на свой сервер. 

В чём задача

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

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

Решение будет состоять из двух частей: 

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

Что делаем

Сначала напишем скрипт, который делает бэкапы, а потом настроим всё так, чтобы он запускался автоматически. Звучит сложно, но на деле всё займёт 5 минут.

Скрипт мы сделаем с помощью системной утилиты rsync на Linux или Mac OS. На Windows используем утилиту nnBackup.

Автоматику будем запускать с помощью crontab — планировщика задач для Linux и Mac OS. На Windows используем либо встроенный планировщик задач, либо nnCron — клон crontab. 

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

Вам может быть интересно:

Настраиваем резервное копирование в Mac OS и Linux

Чтобы скопировать данные из одного места в другое, во всех дистрибутивах Linux, UNIX и Mac OS используют команду rsync. Она почти всегда идёт в комплекте с системой и решает только одну задачу — что-то куда-то копирует, при этом сам процесс можно настроить довольно гибко.

Общий вид команды такой:

rsync -как_копируем что_копируем куда_копируем

Что_копируем — это путь к папкам, где лежат наши данные. Их мы будем копировать

Куда_копируем — это путь к папке, где будет храниться бэкап. Если второй папки нет, программа сама её создаст. Если папка на другом устройстве, а самого устройства в системе нет, rsync может завершить работу. 

-как_копируем — её параметры копирования. Их очень много; если нужен полный список, наберите rsync —help. Сейчас нас интересует только два параметра — архив и вывод на экран. Для справки — вот полный перечень: 

-v, —verbose   выводить на экран всё, что программа делает
-q, —quiet   тихонько работать, если нет ошибок
-c, —checksum    пропускать ненужные файлы, смотря на контрольную сумму, а не на дату
 -a, —archive   сделать архив; то же самое, как если использовать ключи -rlptgoD (no -H,-A,-X)
—no-OPTION не использовать какие-то опции (например, —no-D)
-r, —recursive обработать все вложенные папки и подпапки
-R, —relative использовать относительные пути к файлам
-b, —backup сделать бэкап-файл
-u, —update пропустить файлы, если в папке назначения они более свежие
—inplace обновить файлы в папке назначения
-d, —dirs обработать просто папку, без вложенных папок
-p, —perms сохранять разрешения
-E, —executability сохранять флаг возможности выполнения файла
—chmod=CHMOD поменять права доступа к файлам или папкам
-X, —xattrs сохранять внешние атрибуты файла
-o, —owner сохранять владельца (только для суперпользователя)
-g, —group сохранять группу
—devices сохранять файлы устройств (только для суперпользователя)
—specials сохранять специальные файлы
-D то же самое, что —devices —specials
-t, —times сохранять время изменения файлов
-O, —omit-dir-times не смотреть на папки при использовании —times
—super экран помощи
—fake-super сохранять или восстанавливать особые атрибуты, используя xattrs
-n, —dry-run запустить вхолостую, без изменений в файлах, просто чтобы убедиться, что ошибок не будет
-W, —whole-file копировать файлы целиком
-e, —rsh=COMMAND указать программу выполнения на удалённом компьютере
—rsync-path=PROGRAM путь к команде rsync на удалённом компьютере
—existing пропустить создание новых файлов на получателе
—ignore-existing не обновлять уже существующие файлы на получателе
—remove-source-files удалить синхронизированные файлы у отправителя (не влияет на папки)
—del то же самое, что —delete-during
—delete удалить посторонние файлы из папки получателя
—delete-before удалить всё у получателя перед передачей данных (используется по умолчанию)
—delete-during удалять файлы во время передачи
—delete-delay сначала найти все удаляемые файлы, а потом удалить все сразу
 —delete-after получатель удаляет необходимые файлы после получения нужных файлов, а не до этого
 —delete-excluded если в конечной папке есть файлы, которые попали под исключения, и их надо удалить — всё равно удалить их
—ignore-errors удалять файлы, даже если есть ошибки ввода-вывода
—force даже если папка не пустая, всё равно удалять её
—max-delete=NUM не удалять более стольких-то (NUM) файлов
—max-size=SIZE не трогать файлы больше размера SIZE
—min-size=SIZE не трогать файлы меньше размера SIZE
 —partial если файл передался не полностью, всё равно сохранить его
—partial-dir=DIR если файл передался не полностью, положить его в папку DIR
 —delay-updates обработать обновлённые файлы в последнюю очередь
 -m, —prune-empty-dirs выбросить пустые папки из списка файлов на копирование
 -I, —ignore-times не пропускать файлы, если они совпадают по времени и размеру
—size-only если файлы одинаковые по размеру, пропустить
 —modify-window=NUM сравнить время изменения файлов с уменьшенной точностью (чтобы файл, изменённый через секунду, например, не считался новым)
 -T, —temp-dir=DIR create temporary files in directory DIR
-y, —fuzzy  если конечного файла нет, найти похожие
—compare-dest=DIR ещё сравнить полученные файлы относительно каталога DIR
—copy-dest=DIR …и приложить копии неизменённых файлов
 -z, —compress сжимать данные при передаче
-C, —cvs-exclude игнорировать файлы по типу CVS
 -f, —filter=RULE добавить правило RULE для фильтрации файлов
-F то же, что —filter=’dir-merge /.rsync-filter’
 —exclude=PATTERN исключить из копирования файлы, которые совпадают с паттерном PATTERN
—exclude-from=FILE взять из FILE паттерны, по которым исключить файлы из копирования
 —include=PATTERN не исключать из копирования файлы, которые совпадают с паттерном PATTERN
 —include-from=FILE взять из FILE параметры включения файлов в задачу копирования
—files-from=FILE забрать список исходных файлов для копирования из FILE
 —port=PORT дополнительный порт для обмена данными с удалённым компьютером
—sockopts=OPTIONS особые параметры связи с сервером по TCP
—stats вывести статистику по передаче файлов
 -8, —8-bit-output оставить нетронутыми восьмибитные символы во время вывода на экран
 -h, —human-readable вывести всё в формате, понятном человеку
—progress показывать прогресс передачи
-P то же самое, что —partial —progress
-i, —itemize-changes вывести отчёт об изменениях в копированных файлах
—log-file=FILE записать в FILE лог событий копирования
—password-file=FILE взять пароль демона из FILE
—list-only не копировать файлы, а просто перечислить
—bwlimit=KBPS ограничить пропускную способность канала передачи данных, если копируем через интернет
—protocol=NUM использовать более древний протокол для совместимости со старым софтом и железом
—iconv=CONVERT_SPEC запросить преобразование названий файлов в зависимости от языка
-4, —ipv4 использовать протокол TCP IPv4
-6, —ipv6 использовать протокол TCP IPv6
—version показать версию программы
(-h) —help показать помощь

Чтобы команда знала, что нам нужно не просто скопировать, а сделать бэкап, используется ключ -a. Без него компьютер будет просто копировать файлы каждый раз, даже если в резервной копии они уже есть, и тратить на это каждый раз много времени. А с ключом -a команда поймёт, что это бэкап, и не будет туда добавлять те файлы, которые там уже есть. А если в бэкапе будет лежать старая версия, а у нас уже новая, то она просто заменит старую на новую, чтобы у нас всегда были актуальные данные.

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

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

Например, если нам нужно на флешке сделать бэкап папки с фотографиями, то пишем такую команду:

rsync -av /Users/mike/Pictures /Volumes/WIN10_64/Pictures

Вот что она означает:

  • rsync — название нашей команды;
  • -av — добавляем архивный ключ и вывод процесса на экран;
  • /Users/mike/Pictures — здесь лежат фотографии;
  • /Volumes/WIN10_64/Pictures — на флешке с названием WIN10_64 появится папка Pictures, в которой будет лежать бэкап.

Если бы нам понадобилось сделать не архивный бэкап (со всеми старыми файлами), а точную копию папки с фото, то добавился бы ключ —delele:

rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures

Что за пути к файлам? В наших примерах используются адреса файлов, которые применяются в Linux и Mac OS. В них отсчёт идёт не от физического диска, как в Windows, а от корневой папки системы. В папке есть подпапка Users, где живут данные разных пользователей системы. В папке Users лежит папка mike — это папка пользователя Миши. Внутри этой папки уже лежат все его документы. 

В Windows это выглядело бы, например, так: C:/Users/mike/Pictures

Защита важных файлов: автоматический бэкап за пять минут

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

Открываем две папки и смотрим содержимое. Всё совпадает, значит, команда работает как нужно

Резервное копирование в Windows

Для Windows нет родной команды rsync, поэтому разработчику Николаю Немцову пришлось сделать её аналог — nnBackup. Она устанавливается как обычная программа, и потом тоже запускается из командной строки. Чтобы с ней было проще работать, ставим её в свою папку в корень диска C:

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

nnbackup.exe sync -i C:\Users\Mike\Pictures\ -o
F:\Pictures\ -v -da

Теперь посмотрим, что внутри:

Устанавливаем nnBackup на диск C:

Защита важных файлов: автоматический бэкап за пять минут

Защита важных файлов: автоматический бэкап за пять минут

Запуск программы через командную строку Windows

А что, если мне нужно создать бэкап нескольких папок?

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

rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures

rsync -av --delete /Users/mike/Misic /Volumes/WIN10_64/Music

Как будет работать автоматизация

Мы научились создавать бэкапы, но пока всё делается вручную. Это не дело — нужно, чтобы компьютер следил за этим сам.

Самый простой способ автоматизировать бэкапы — настроить выполнение команд по времени, например каждые 10 минут. Работает это так:

  1. Когда проходят очередные 10 минут, компьютер запускает нашу команду на создание бэкапа.
  2. Если флешка вставлена — всё отлично, бекап делается, данные в безопасности.
  3. Если флешка не вставлена — компьютер попытается выполнить нашу команду, не найдёт флешки и просто закончит выполнение команды.
  4. В итоге достаточно будет вставить флешку, и через 10 минут у вас начнёт создаваться актуальная резервная копия всех важных данных.

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

Настраиваем расписание в Mac OS и Linux

За запуск команд по расписанию в Mac OS и Linux отвечает команда crontab. У неё много параметров и возможностей, но сейчас нас интересует только одно — как с её помощью запускать нашу команду для бэкапа раз в 10 минут.

Для этого делаем так.

  1. В терминале пишем команду crontab -e и нажимаем Enter. 
  2. Появляется окно редактора, где нужно нажать сначала s, а потом вставить такую строчку:

*/10 * * * * rsync -av --delete /Users/mike/Pictures /Volumes/WIN10_64/Pictures

  1. Нажимаем сначала Esc, а потом по очереди :wq (двоеточие, потом w, потом q) — это сохранит нашу команду и закроет редактор.
  2. Проверяем, что всё записалось командой crontab -l — мы должны увидеть свою команду.

За запуск каждые 10 минут отвечает начало команды — */10 * * * *. Остальные звёздочки отвечают за часы, дни, недели и месяцы, а косая черта — за постоянное повторение каждые сколько-то минут. 

Теперь 6 раз в час наша команда будет запускаться и следить за актуальностью резервной копии. Если нужно несколько команд, то просто добавьте новые строчки и сохраните всё таким же образом.

Защита важных файлов: автоматический бэкап за пять минут

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

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

Чтобы всё работало без сбоев, в Системных настройках нужно выбрать раздел «Защита и безопасность» → «Доступ к диску». В нём нажать на плюсик, потом ⇧+⌘+G, вставить /usr/sbin/cron и нажать Enter. В списке появится cron, а это значит, что он может выполнять любые задачи с файлами в любой момент

Настраиваем расписание в Windows

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

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

Для запуска планировщика выберите Пуск → Средства администрирования → Планировщик заданий.

Защита важных файлов: автоматический бэкап за пять минут

Интерфейс планировщика. Много настроек, окон, вкладок, полей и меню

Мы пойдём другим путём — используем программу nnCron Lite. Это аналог crontab для Windows того же Николая Немцова. Скачиваем программу и устанавливаем её в папку C:\cron, чтобы было проще запускать.

Теперь нужно сказать программе, что и как запускать. Для этого в ней есть специальный текстовый файлик cron.tab — его нужно отредактировать. 

Заходите в папку с программой C:\cron, находите там файл cron.tab, открываете в Блокноте. Логика наполнения такая же, как в MacOS: сначала звёздочками указываем периодичность запуска, а потом пишем команду, которую нужно выполнить. В нашем случае это будет так: 

*/10 * * * * nnbackup.exe sync -i C:\Users\Mike\Pictures\ -o  F:\Pictures\ -v -da

Защита важных файлов: автоматический бэкап за пять минут

Защита важных файлов: автоматический бэкап за пять минут

Правой кнопкой мыши щёлкаем на файле cron.tab и выбираем Блокнот
Защита важных файлов: автоматический бэкап за пять минут

Содержимое нашего файла в Windows. Сохраняйте, закрывайте

Что дальше

Резервное копирование по времени — просто, но неоптимально. Намного круче запускать создание бэкапов именно в тот момент, когда мы вставляем флешку в компьютер. Как это сделать, расскажем в будущих статьях. Подписывайтесь на нас везде, где ещё можно :-)

Вёрстка:

Кирилл Климентьев

Обновлено:
Опубликовано:

Тематические термины: rsync, SSH, CentOS, Ubuntu

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

Использование Rsync Server позволит более тонко настроить работу утилиты и оптимизировать сам процесс синхронизации.

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

Установка и запуск
Настройка
Запуск клиента
Ключи rsync
Использование на Windows
Примеры команд
Возможные ошибки

Установка и запуск

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

CentOS 8

yum install rsync rsync-daemon

systemctl enable rsyncd —now

CentOS 7

yum install rsync

systemctl enable rsyncd —now

Ubuntu

apt update

apt install rsync

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

vi /etc/default/rsync

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

RSYNC_ENABLE=false

И меняем на:

RSYNC_ENABLE=true

Запускаем.

а) на Linux DEB:

systemctl enable rsync

systemctl start rsync

б) на Linux RPM:

systemctl enable rsyncd

systemctl start rsyncd

Настройка

Открываем конфигурационный файл 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

[data1]
    path = /data1/
    comment = Public folders
    read only = yes
    list = yes
    auth users = rsync_d1
    secrets file = /etc/rsyncd.scrt
    hosts allow = localhost 192.168.0.15 192.168.0.20
    hosts deny = *

[data2]
    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 || systemctl restart rsync

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

а) Firewalld:

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

firewall-cmd —reload

б) Iptables:

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

Сохраним правила с помощью iptables-persistent:

apt install iptables-persistent

netfilter-persistent save

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

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

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

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

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

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

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

yum install rsync

apt install rsync

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

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

rsync -avv rsync_d1@192.168.0.5::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

password

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

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

chmod 600 /etc/rsyncd.scrt

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

crontab -e

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-адрес> Привязать 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). Скачать ее можно на сайте sourceforge.net в качестве пакета BackupPC. Для загрузки доступны платная и бесплатная версии. Последняя не позволит поднять Rsync-сервер, получать поддержку, обновления безопасности и возможность работать в графическом интерфейсе.

Запуск в качестве сервера

Мы будем использовать бесплатную поставку для поднятия сервера. Переходим на страницу загрузки BackupPC и дожидаемся скачивание архива. Создаем в корне системного диска папку, например, C:\Rsyncd, распаковываем содержимое загруженного архива в созданную папку.

Находим в корне содержимого файл rsyncd.conf и открываем его в блокноте. Добавляем следующие строки:

[data1]
    path = /cygdrive/d/backup
    read only = false
    transfer logging = yes

[data2]
    path = /cygdrive/d/Папки пользователей
    read only = false
    transfer logging = yes
    strict modes = false
    auth users = home
    secrets file = /cygdrive/c/Rsyncd/rsyncd.secrets

* в данном примере мы создали группы настроек data1 для папки D:\backup и data2 для D:\Папки пользователей. Регистр важен! Для второй папке для синхронизации требуется аутентификация.
* синтаксис для настройки аналогичен описанному выше для Linux. Только пути пишутся, начиная с /cygdrive/<буква диска>.

Регистрируем rsync в качестве службы — для этого открываем командную строку от администратора и выполняем команду:

c:\rsyncd\bin\cygrunsrv -I «RsyncServer» -p /cygdrive/c/rsyncd/bin/rsync.exe -a «—config=/cygdrive/c/rsyncd/rsyncd.conf —daemon —no-detach» -o -t auto -e «CYGWIN=nontsec binmode» -1 /cygdrive/c/rsyncd/rsyncd-stdin.log -2 /cygdrive/c/rsyncd/rsyncd-stderr.log -y tcpip -f «Rsync service»

* где c:\rsyncd или /cygdrive/c/rsyncd — каталог, куда мы распаковали скачанный архив.

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

Пробуем выполнить локальную синхронизацию. В командной строке переходим в каталог установки rsync:

C:\

cd c:\Rsyncd\bin

Выполняем команду:

rsync.exe -avv —progress 127.0.0.1::data1 /cygdrive/c/Temp

* данная команда синхронизирует содержимое модуля data1 (в нашей настройке это папка D:\backup) в папку C:\Temp (если ее нет, нужно создать перед выполнением команды).

Или в обратном направлении:

rsync.exe -avv —progress /cygdrive/c/Temp 127.0.0.1::data1

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

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

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

rsync.exe -avv —progress admin@192.168.0.15::data1 /cygdrive/c/temp

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

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

rsync.exe -avv -e «./ssh -p 22» —progress admin@192.168.0.15:/data/ /cygdrive/c/temp

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

Права на папки и файлы

Rsync в Windows не умеет копировать права для файлов и папок. В результате, мы получим либо копию с неправильными ACL-правами, либо они будут назначены неправильно (права будут выданы по хаотичному алгоритму). Чтобы решить данную проблему после клонирования, можно воспользоваться утилитой robocopy — она входит в состав Windows, начиная с 7-ки.

Команда, которая позволит выполнить исправление прав:

robocopy c:\test d:\backup /MIR /SEC /SECFIX

* в данном примере мы возьмем папку c:\test в качестве источника и отзеркалируем его d:\backup. Ранее скопированные данные не будут копироваться вновь, но будут исправлены права.

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

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

rsync -a —delete-after user@192.168.0.15::data_source /data_destination

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

rsync -ab —delete-after user@192.168.0.15::data_source /data_destination

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

rsync -a —delete-after -e «ssh -p 22» user@192.168.0.15:/data_source /data_destination

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

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

rsync -a —delete-after /data_destination user@192.168.0.15::data_source

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

rsync -a —delete-after user@192.168.0.15::data_source /data_destination

rsync -a —delete-after /data_destination user@192.168.0.15::data_source

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

rsync -a —include=’*.txt’ —exclude=’*’ user@192.168.0.15::data_source /data_destination

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

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

rsync -a —exclude=’folder/*’ user@192.168.0.15::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

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

Возможности утилиты

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

Рассмотрим основные опции утилиты, которые будут использоваться чаще всего. Более подробный список доступных опций можно найти в документации man( командаman rsync ):

-v — вывести подробную информацию о процессе
-c — проверка контрольных сумм файлов
-q — минимальная информация
-a — режим архивирования
-R — относительные пути
-y — не перезаписывать более новые файлы
-b — создать резервную копию
-l — копировать симлинки
-L — копировать содержимое ссылок
-H — копировать жесткие ссылки
-g — сохранить группу
-p — сохранить права доступа к файлу
-t — сохранять время модификации
-x — работать только в этой ФС
-e — использовать другой транспортный протокол (например, ssh)
-z — сжимать файлы перед передачей
—delete — удалять файлы, которых нет в источнике
—exclude — исключить файлы
—recursive — перечислять каталоги рекурсивно
—no-recursive — отключить рекурсию
—progress — отобразить прогресс передачи файлов
—stat — показать статистику передачи
—max-size — максимальный размер файла для передачи
—bwlimit — ограничение скорости передачи файлов

Краткое объяснение синтаксиса

rsync -az —progress /home/user/test.file boxxxx@boxxxxx.introserv.cloud:/remote_folder/

Опции-az —progress указывают на необходимость архивирования передаваемого файла, сжатия его перед передачей, а также отображения прогресса копирования на экране;

/home/user/test.file — это путь к файлу и сам файл, который необходимо передать;

boxxxx@boxxxxx.introserv.cloud: это ресурс назначения (в нашем примере это облачное хранилище, но это может быть и удаленный сервер) boxxxx — имя пользователя, после знака @ — имя ресурса или IP-адрес удаленного сервера;

/remote_folder/ — это папка на удаленном ресурсе. В нашем примере — в облачном хранилище Introserv Cloud Storage.

Копирование одного файла в папку на удаленном хранилище

rsync -az --progress /home/user/Desktop/test.file boxxxxx@boxxxxx.introserv.cloud:/remote_folder/

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

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

Введите пароль и продолжите, вы увидите прогресс и скорость передачи файла:

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

Копирование папки в папку на удаленном хранилище

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

rsync -azr --progress /home/user/Desktop boxxxx@boxxxx.introserv.cloud:/remote_folder/

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

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

Копирование содержимого локальной папки в папку на удаленном хранилище

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

rsync -avzr --progress /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/

Вы увидите прогресс и скорость копирования:

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

Копирование папки с удаленного хранилища в папку локального сервера

С помощью Rsync можно инициировать копирование папки с удаленного хранилища. Команда выглядит следующим образом:

rsync -zra --progress boxxxxx@boxxxxx.introserv.cloud:/remote_folder /home/user/Desktop/

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

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

Копирование содержимого папки из удаленного хранилища в папку локального сервера

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

rsync -zra —progress boxxxxx@boxxxxx.introserv.cloud:/remote_folder/ /home/user/Desktop/

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

Копирование содержимого папки, исключая и/или включая файлы

Утилита позволяет явно указать, какие файлы нужно передать, а какие исключить. Для этого используйте опции —include и —exclude.

rsync -azr --progress --include 'test.file' --exclude 'test.file2' /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/

Вы увидите, что передается только один файл, указанный опцией —include. Обратите внимание, что опции include и exclude можно использовать отдельно друг от друга

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

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

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

rsync -azrс --progress /home/user/Desktop/ boxxxx@boxxxx.introserv.cloud:/remote_folder/

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

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

Использование Rsync через SSH с нестандартным портом SSH

Чтобы передать файлы с/на сервер с измененным портом SSH, используйте опцию -e ‘ssh -p port_number’ .

Команда для копирования файла на сервер, на котором порт SSH изменен на 44, будет выглядеть следующим образом:

rsync -azrс --progress -e 'ssh -p44' /home/user/Desktop/ user@server_ip:/remote_folder/

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Asp net hosting windows service
  • По vipnet client for windows 4 x kc3
  • Некоторыми параметрами управляет ваша организация windows 2016
  • Wireshark portable windows xp
  • Установка windows на mac mini 2014