Использование утилиты rsync для синхронизации данных.

Использование утилиты rsync для синхронизации данных.

Life-Hack - Linux/Хакинг/Хакер/ИБ/Osint

Rsync — утилита для удаленной синхронизации и копирования файлов. Ее еще можно назвать «SCP на стероидах». Из преимуществ: позволяет не передавать файлы полностью, а только изменения в них, синхронизирует директории и файлы, имеет встроенный механизм сжатия. Это далеко не полный список.

Перед началом работы необходимо выполнить настройку. Конфигурация выполняется в файле  /etc/rsyncd.conf:

pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[share]
path = /tmp/share/
hosts allow = localhost 192.168.56.1
hosts deny = *
list = true
uid = nonroot
gid = nonroot
read only = false
comment = Shared folder

В файле конфигурации указываются следующие переменные:

  • pid file — файл, в котором будет храниться номер процесса демона Rsync;
  • lock file — файл блокировки для защиты от повторного запуска Rsync;
  • log file — журнал сообщений, генерируемых демоном Rsync в процессе работы;
  • path — путь до каталога, для которого выполняется синхронизация или копирование;
  • hosts allow — хосты, которым явно разрешено подключаться к демону Rsync для передачи файлов;
  • hosts deny — хосты, которым явно запрещено подключаться к демону Rsync для передачи файлов (в примере выше со всех, кроме разрешенных);
  • list — флаг разрешения/запрета чтения каталога;
  • uid — пользователь, от имени которого будет выполняться синхронизация для конкретного ресурса;
  • gid — группа, от имени которой будет выполняться синхронизация для конкретного ресурса;
  • read only — флаг для защиты имеющихся данных от изменения или удаления;
  • comment — описание конфигурации.

Рекомендуем использовать для переменных uid и gid непривилегированные учетные записи.

Перед запуском утилиты, нужно также создать указанную в конфигурации директорию:

mkdir /tmp/share

На этом настройка Rsync в Linux завершена и можно запускать утилиту:

systemctl enable --now rsyncd

Общий синтаксис Rsync выглядит так:

 rsync -options <source> <destination>

Перечень Rsync Options:

  • -v, -verbose – процесс синхронизации отображается на экране;
  • -q, -quiet – вывод об ошибках будет заблокирован;
  • -c, -checksum – включается сравнение контрольной суммы вместо даты, времени и размера как индикаторов изменения файлов;
  • -a, -archive – активируется поддержка архивации данных;
  • -r, -recursive – будет использоваться рекурсивный режим копирования каталогов;
  • -b, -backup – обновление оригинальных файлов приводит к созданию резервной копии;
  • -backup-dir=<каталог> – принудительное указание, где хранить резервные копии;
  • -suffix=SUFFIX – дополнительный символ, добавляемый к резервным файлам;
  • -u, -update – файлы с более поздней датой корректировки будут пропускаться;
  • -l, -links – включается режим сохранения символических ссылок;
  • -H, hard-links – будут сохраняться жесткие ссылки;
  • -p, -perms – утилита сохранит неизменными разрешения на файл или каталог;
  • -E, executability – также сохранятся права на исполнение (запуск файлов);
  • -chmod=<права> – после копирования объекта права меняются на указанные;
  • -o, owner – сохранять информацию о первоначальном владельце файлов и каталогов;
  • -g, group – то же, но имеет отношение к целой группе владельцев;
  • -S, -sparse – одновременно с копированием осуществляется дефрагментация данных;
  • -n, -dry-run – сервер осуществляет только тестирование канала резервирования;
  • -W, -whole-file – файлы всегда копируются полностью, а не только их измененная часть;
  • -delete – файлы, отсутствующие в источнике, считаются старыми и удаляются;
  • -delete-before – перед началом синхронизации каталог-приемник полностью очищается;
  • -max-delete=<количество файлов> – ограничивает максимальное число удаляемых файлов;
  • -max-size=<размер файлов> – ограничивается максимальный объем копируемых файлов;
  • -min-size=<размер файлов> – аналогично, но в отношении минимального объема;
  • -z, -compress – сжатие файлов происходит при передаче на удаленный сервер;
  • -compress-level=<число> – пользователь устанавливает степень сжатия;
  • -exclude=<имена файлов> – указанные файлы будут переданы без архивации;
  • -exclude-from=<имя файла> – исключить ряд файлов из синхронизации;
  • -include=<имена файлов> – принудительная синхронизация указанных файлов;
  • -include-from=<имя файла> – синхронизировать то, что указано списком в файле;
  • -port=<порт> – выбор порта, используемого для подключения к удаленному хосту;
  • -progress – отображать строку прогресса, указывающую процент выполнения задачи;
  • -log-file=<файл> – указать расположение файла для журналирования процессов;
  • password-file=<файл> – позволяет автоматизировать парольный доступ к системе;
  • -list-only – включается эмуляция синхронизации с отображением имен файлов;
  • -bwlimit=<число> – вводится ограничение скорости передачи (в единицах Кбит/с);
  • -4, ipv4 – приоритет отдается протоколу IPv4;
  • -6, ipv6 – то же в отношении IPv6;
  • -version – на экран выводится текущая версия утилиты Rsync.

При локальном режиме работы достаточно задать каталог/файл-источник и каталог/файл-приемник:

rsync -avzhHl /path/of/source/folder /path/to/destination/folder

Если копирование нужно выполнить с удаленным узлом, добавляется имя пользователя и IP-адрес или имя узла:

rsync -avzhHl /path/of/source/folder root@192.168.56.1:/path/to/destination/folder

Автоматическая синхронизация папок выполняется штатным способом — планировщиком заданий (cron). Планировщиком удобнее выполнять скрипт, так будет упрощается управление конфигурацией синхронизации. Создадим скрипт rsync_to_cron.sh:

!/bin/sh

RSYNC=/usr/bin/rsync 
SSH=/usr/bin/ssh 
KEY=/root/.ssh/id_rsa
RUSER=root
RHOST=192.168.56.1 
RPATH=/remote/dir
LPATH=/local/dir

$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH

Далее создадим задание в планировщике:

crontab -e
0 22 * * * /root/scripts/rsync_to_cron.sh

В процессе синхронизации можно удалять файлы на сервере-приемнике, которых уже нет на сервере-источнике. Для этого используется опция —delete:

rsync -avzhHl --delete /path/of/source/folder root@192.168.56.1:/path/to/destination/folder

Специальные опции —include и —exclude позволяют включать или исключать из синхронизации файлы с определенными именами:

rsync -avzhHl --include='.txt' --exclude='' /path/of/source/folder root@192.168.56.1:/path/to/destination/folder

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


Report Page