Меню

Centos 7 синхронизация файлов



Centos + unison синхронизация файлов

Рассмотрим две задачи в ОС Centos по синхронизации файлов с помощью unison

Создадим каталоги на двух linux машинах:

mkdir /root/unison
mkdir /root/unison2

Подключим на них репозитории(для каждой ОС свой):

## RHEL/CentOS 7 64-Bit ##
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -ivh epel-release-7-5.noarch.rpm

## RHEL/CentOS 6 32-Bit ##
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

## RHEL/CentOS 6 64-Bit ##
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

## RHEL/CentOS 5 32-Bit ##
# wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# rpm -ivh epel-release-5-4.noarch.rpm

## RHEL/CentOS 5 64-Bit ##
wget http://download.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -ivh epel-release-5-4.noarch.rpm

Установим:
yum install unison

Создадим файлы:

touch 1.txt 2.txt

1 задача, локальная синхронизация:

unison /root/unison/ /root/unison2/

2 задача, сетевая синхронизация:

unison -testServer /root/unison/ ssh://1.1.1.1:22//root/unison/

unison -batch /root/unison/ ssh://2.2.2.2:22//root/unison/

Если Вы хотите обменяться ссылками со мной между сайтами — пишите в контактах

Источник

Настройка и использование Rsync Server

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

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

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

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

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

CentOS 8 / 7

yum install rsync

systemctl enable rsyncd —now

Ubuntu

apt-get install rsync

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

Настройка

Открываем конфигурационный файл rsync:

И настраиваем его, примерно, следующим образом:

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 серверу (в данном примере, со всех, кроме разрешенных).

Создаем файл для аутентификации:

rsync_d1:password1
rsync_d2:password2
backup:password3

* где rsync_d1:password1 — соответственно, пользователь rsync_d1 с паролем password1.

В целях безопасности, устанавливаем доступ только для владельца:

chmod 600 /etc/rsyncd.scrt

Перезапускаем сервис одной из команд:

systemctl restart rsyncd

service rsyncd restart

Читайте также:  Как синхронизировать контакты вайбер на компьютере и телефоне

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

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

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

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 сервера.

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

Скрипт довольно прост:

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 — каталог, в который синхронизируем файлы.

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

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

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

chmod 600 /etc/rsyncd.scrt

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

0 */1 * * * /scripts/syncing.sh

* где /scripts/syncing.sh — наш скрипт. В данном примере задание будет выполняться каждый час.

Ключи запуска rsync

Список и описание опций:

Ключ Описание
-v, —verbose Вывод подробной информации о процессе синхронизации. Стоит использовать для отладки.
-q, —quiet Не выводит сообщения об ошибках.
—no-motd Не выводит приветствие в MOTD
-c, —checksum Сравнивать файлы по контрольной сумме, а не времени или размеру.
-a, —archive Режим архивирования или то же самое, что с ключами -rlptgoD (без -H,-A,-X). Используется для удобства, чтобы не перечислять много опций.
—no- Отключает конкретную опцию, например, вышеописанная no-motd.
-r, —recursive Рекурсивный режим для каталогов.
-R, —relative Использовать относительные пути.
—no-implied-dirs Выключить параметр —relative.
-b, —backup Режим резервного копирования. С его помощью при обновлении файлов в папке назначения для них создается копия.
—backup-dir= В режиме резервного копирования указывает каталог, в котором будут храниться копии.
—suffix=SUFFIX В режиме резервного копирования задает суффикс для сохраненных файлов.
-u, —update Пропускать файлы, которые новее в папке назначения (копировать только измененные файлы).
-d, —dirs Не использовать рекурсию для каталогов.
-l, —links Копировать симлинки как симлинки.
-L, —copy-links Копировать не симлинк а ее содержимое (трансформировать симлинк в каталог).
-k, —copy-dirlinks Преобразовать симлинк на каталог в обычный каталог.
-K, —keep-dirlinks В папке назначения обрабатывать симлинк как каталог.
-H, —hard-links Сохранять жесткие ссылки.
-p, —perms Сохранять разрешения (права доступа).
-E, —executability Сохранить права на исполнение.
—chmod= Изменить права доступа на конкретные.
-A, —acls Сохранить права ACL.
-X, —xattrs Сохранить атрибуты файлов.
-o, —owner Сохранить владельца (только от суперпользователя).
-g, —group Сохранить группу владельца.
—devices Копировать файлы-устройства (разрешено только при выполнении команды с правами суперпользователя).
—copy-devices Копировать файлы устройства как обычные файлы.
—specials Сохранять специальные файлы.
-D Заменяет —devices и —specials одновременно.
-t, —times Сохранять временные отметки.
-S, —sparse Выполнение дефрагментации в момент копирования данных.
-n, —dry-run Режим тестирования. Выполняется пробный запуск, при котором будет показаны изменения, но сами изменения выполнены не будут.
-W, —whole-file Копировать файлы целиком. По умолчанию, для копирования файлов используется алгоритм дельта-хэфера, который позволяет переносить только часть с изменениями. На практике, это сильно ускоряет процесс копирования. Ключ применяется в тех случаях, когда нужно перенести файл целиком.
-x, —one-file-system Не разрешает переходить границы файловой системы. Например, если в один из синхронизируемых каталогов может быть примонтирована сетевая файловая система, ее копирование может вызвать неудобства.
-B, —block-size= Принудительно фиксировать размер блока контрольной суммы
-e, —rsh= Указать оболочку для использования, например SSH.
—existing Не создавать новые файлы в каталоге назначения.
—ignore-existing Не обновлять существующие файлы в каталоге назначения.
—remove-source-files Источник удаляет свои файлы после выполнения синхронизации.
—delete Удалить файлы в папке назначения, если их больше нет в папке источнике (удаление старых файлов).
—delete-before Удалить файлы в папке назначения до начала синхронизации.
—delete-during Удалить файлы в папке назначения в момент синхронизации.
—delete-delay Поиск файлов на удаление в момент синхронизации, а удаление после.
—delete-after Удалить файлы в папке назначения после синхронизации.
—delete-excluded Удалить исключенные из синхронизации файлы в каталоге назначения.
—ignore-errors Удалять файлы даже при ошибках ввода/вывода.
—force Принудительное удаление не пустых каталогов.
—max-delete= Не удалять больше заданного числа файлов.
—max-size= Не передавать файлы с размером более заданного.
—min-size= Не передавать файлы с размером менее заданного.
—partial Оставлять файлы, которые переданы не до конца (процесс копирования завершился в процессе).
—partial-dir= Хранить частично переданные файлы в специальном каталоге.
—timeout= Установить время ожидания от системы ввода/вывода.
—contimeout= Установить время ожидания для подключения к демону rsync.
-I, —ignore-times Все равно копировать файлы, если они имеют одинаковые разметы или время изменения.
—size-only Не копировать только те файлы, которые имеют одинаковые размеры.
-T, —temp-dir= Все временные файлы размещать в определенном каталоге.
-z, —compress Сжимать данные файла во время передачи
—compress-level= Устанавливает уровень сжатия от 0 до 9.
—skip-compress= Не выполнять компрессию для перечисленных файлов.
-C, —cvs-exclude Исключить от копирования файлы, которые исключаются CVS (RCS/ SCCS/ CVS/ .svn/ CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *

#* .#* ,* *.old *.bak *.BAK *.orig *.rej .del-* *.a *.o *.obj *.so *.Z *.elc *.ln core)

-f, —filter= Добавить правило для фильтра.
—exclude= Исключить из синхронизации файлы, соответствующие выражению.
—exclude-from= Исключить из синхронизации файлы, перечисленные в файле.
—include= Включить в синхронизацию файлы, соответствующие выражению.
—include-from= Включить в синхронизацию файлы, перечисленные в файле.
—files-from= Читать список имен исходных файлов из файла.
—address= Привязать IP-адрес для исходящего сокета.
—port= Использовать определенный сетевой порт.
—sockopts=OPTIONS Использовать специальные опции для TCP.
—blocking-io Использовать блокирующий ввод-вывод для удаленной оболочки
—stats Вывод статистики по передаче данных.
-h, —human-readable Вывод чисел в удобном для чтения формате.
—progress Показывать строку прогресса для синхронизации.
-P То же самое, что —partial и —progress.
-i, —itemize-changes Выводить сводку изменений для всех обновлений
—log-file= Вывод лога в специальный файл.
—password-file= При аутентификации пароль можно хранить в специальном файле. Это необходимо для автоматизации выполнения команды без пароля.
—list-only Показать список файлов, но не копировать их.
—bwlimit= Ограничить пропускную способность (КБит в секунду).
—protocol= Принудительно использовать более старую версию протокола.
—iconv= Запрос кодировки преобразования имен файлов.
-4, —ipv4 Предпочтительно, использовать IPv4.
-6, —ipv6 Предпочтительно, использовать IPv6.
—version Вывод версии rsync.
(-h) —help Вывод справочной информации по использованию rsync.

* самый свежий список ключей rsync можно посмотреть командой man rsync.

Rsync на Windows

Реализация rsync для Windows носит название cwRsync (не является аналогом программы — по сути, это утилита Rsync + библиотека Cygwin). Скачать ее можно на официальном сайте. Для загрузки доступны платная и бесплатная версии. Последняя не позволит поднять Rsync-сервер, получать поддержку, обновления безопасности и возможность работать в графическом интерфейсе.

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

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

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)

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

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

Источник