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)
Причина: не доступен удаленный хост.
Решение: проверить, что хости доступен по сети. Проверить настройку брандмауэра.