Skip to main content

Rsync Server

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

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

apt-get install rsync

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

vi /etc/default/rsync

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

RSYNC_ENABLE=false

И меняем на:

RSYNC_ENABLE=true

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

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

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

apt-get install rsync

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

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 — наш скрипт. В данном примере задание будет выполняться каждый час.

Ключ Описание
-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.