Тематические термины: rsync, SSH, CentOS, Ubuntu
Утилита rsync позволяет синхронизировать содержимое двух каталогов как для локальной системы, так и удаленных серверов. Это может использоваться как для резервного копирования, так и поддержания в актуальном состоянии нод кластера.
Использование Rsync Server позволит более тонко настроить работу утилиты и оптимизировать сам процесс синхронизации.
Не стоит путать резервную копию с архивом. Если удалить важный файл, при синхронизации он также будет удален на другом устройстве. Для более корректного резервирования данных, также стоит настроить их архивирование.
Установка и запускНастройкаЗапуск клиентаКлючи rsyncИспользование на WindowsПримеры командВозможные ошибки
По умолчанию, утилита может быть не установлена в системе. Установка и последующий запуск выполняются следующими командами.
yum install rsync rsync-daemon
systemctl enable rsyncd –now
yum install rsync
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 = 10exclude = 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 = *
где первая группа параметров являются общими настройками:
а также каждый ресурс настраивается отдельно (в нашем примере data1 и data2):
Создаем файл для аутентификации:
vi /etc/rsyncd.scrt
rsync_d1:password1rsync_d2:password2backup: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 [email protected]::data1 /tmp/
* данная команда выполнит синхронизацию нашего ресурса data1 с каталогом /tmp.
Устанавливаем rsync, если еще не установлен:
* первая команда для CentOS, вторая — Ubuntu.
Запускаем синхронизацию:
rsync -avv [email protected]::data1 /tmp/
* где 192.168.0.5 — IP-адрес rsync сервера.
Скрипт довольно прост:
#!/bin/bashPATH=/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 [email protected]$ip::$source $destination
* где:
После создаем файл с паролем:
* в данном файле указываем только пароль без имени учетной записи.
После задаем права:
Автоматизировать синхронизацию можно с помощью CRON:
crontab -e
0 */1 * * * /scripts/syncing.sh
* где /scripts/syncing.sh — наш скрипт. В данном примере задание будет выполняться каждый час.
Общий синтаксис:
rsync <опции> <источник> <назначение>
Список и описание опций:
* самый свежий список ключей rsync можно посмотреть командой man rsync.
Реализация rsync для Windows носит название cwRsync (не является аналогом программы — по сути, это утилита Rsync + библиотека Cygwin). Скачать ее можно на официальном сайте. Для загрузки доступны платная и бесплатная версии. Последняя не позволит поднять 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:
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 [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 в Windows не умеет копировать права для файлов и папок. В результате, мы получим либо копию с неправильными ACL-правами, либо они будут назначены неправильно (права будут выданы по хаотичному алгоритму). Чтобы решить данную проблему после клонирования, можно воспользоваться утилитой robocopy — она входит в состав Windows, начиная с 7-ки.
Команда, которая позволит выполнить исправление прав:
robocopy c:\test d:\backup /MIR /SEC /SECFIX
* в данном примере мы возьмем папку c:\test в качестве источника и отзеркалируем его d:\backup. Ранее скопированные данные не будут копироваться вновь, но будут исправлены права.
Простая команда для синхронизации двух каталогов:
rsync -a –delete-after [email protected]::data_source /data_destination
Команда для резервного копирования:
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 /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
Причина: нет прав на синхронизируемые файлы.
Решение: задать правильного пользователя (uid) в настройках ресурса на стороне сервера.
Причина: не доступен удаленный хост.
Решение: проверить, что хости доступен по сети. Проверить настройку брандмауэра.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies