MyTetra Share
Делитесь знаниями!
RSYNC_НАСТРОЙКИ1
24.12.2018
12:59
Автор: alensav
Текстовые метки: sync, синхронизация, настройки
Раздел: MyTetra

RSYNC_НАСТРОЙКИ1

Настройка

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

/etc/init.d/rsync restart

service rsyncd restart

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

Firewalld:

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

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

firewall-cmd --reload

Iptables:

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

Процедура использования клиента cwRsync аналогична описанному выше. Скачиваем архив программы и распаковываем его. Запускаем командную строку и переходим в каталог 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

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

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)

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

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


 
MyTetra Share v.0.52
Яндекс индекс цитирования