Установка, настройка и примеры синхронизации Rsync
Rsync — инструмент, используемый для создания бэкапов и восстановления данных при возникновении внештатных аварийных ситуаций. Утилита может быть установлена на тех узлах, развертка которых происходила в ручном режиме. Например, если пользователь оплатил доступ к физическому серверу у такого провайдера, как Obit, и самостоятельно развернул виртуальную машину и другие сервисы.
Дистрибутив Rsync для Linux CentOS 8 доступен в официальном репозитории операционной системы и может быть установлен с помощью следующей команды:
- dnf -y install rsync rsync-daemon
Это автоматически установит клиентский и серверный компоненты утилиты, включая демон-процесс Rsync, позволяющий в омниканально управлять потоком данных.
Чтобы открыть файл конфигурации для редактирования, например, с помощью редактора nano, выполните следующую команду:
- nano /etc/rsyncd.conf
Файл содержит следующие переменные:
- pid файл — файл, в котором система будет хранить идентификаторы процессов демона;7
- lock file — файл, созданный для предотвращения дублирования запусков программы Rsync;
- log файл — журнал, используемый для записи происходящих событий;
- path — ссылка на каталог, который необходимо синхронизировать;
- hosts allow — белый список удаленных машин, к которым разрешено подключение;
- hosts deny — черный список хостов, которым запрещено передавать данные;
- list — флаги для разрешения или запрета доступа к указанному каталогу;
- uid — логин учетной записи, используемой для синхронизации;
- gid — группа пользователей, имеющих разрешение на выполнение резервного копирования;
- только чтение — флаг, защищающий данные от удаления или изменения;
- комментарий — описание конфигурации.
Дополнительную информацию можно найти в документации.
В строках uid и gid рекомендуется использовать непривилегированные учетные записи (учетные записи пользователей для специализированных задач). Такой подход упрощает контроль доступа к функционалу для сотрудника и позволяет сохранить настройки при изменении обычными пользователями. После сохранения изменений в конфигурационном файле утилита готова к запуску, для чего необходимо создать указанный каталог:
- mkdir /tmp/share
Запустить программу можно с помощью следующей команды:
- systemctl enable —now rsyncd
Перед использованием рекомендуется настроить политики безопасности. В противном случае при обращении утилиты к хосту может возникнуть блокировка на межсетевого экрана или службы SELinux. Этого можно добиться с помощью следующей последовательности команд:
- setsebool -P rsync_full_access on
- firewall-cmd —add-service=rsyncd —permanent
- firewall-cmd -reload
Текущее состояние Rsync можно проверить с помощью следующей команды:
- systemctl status rsyncd
Синтаксис
Общий синтаксис для Rsync следующий:
- rsync -options <source> <destination>.
Параметры — это показатели для запуска программы, источник –- это ресурс, который является источником для синхронизации, а место назначения — это каталог-получатель, куда будут реплицированы синхронизированные файлы и каталоги.
Список опций Rsync:
- -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, -исполнимость — сохраняет разрешения на выполнение для файлов.
- -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=<file> — автоматизирует доступ к системе по паролю.
- -list-only — эмулирует синхронизацию путем отображения имен файлов.
- -bwlimit=<число> — ограничивает скорость передачи данных (в Кбит/с).
- -4, ipv4 — устанавливает приоритет протокола IPv4.
- -6, ipv6 — приоритет протокола IPv6.
- -version — отображает текущую версию утилиты Rsync.
Примеры использования
Наиболее популярные команды — копирование файлов, синхронизация целых каталогов из источников, в том числе по каналам SSH. Пользователи активно используют отображение хода операции, ограничивают скорость передачи, чтобы не забивать канал связи.
Копирование файлов
Рассмотрим в качестве примера локальное применение утилиты Rsync. В этом случае источник и приемник (речь идет о каталогах) будут принадлежать одному диску:
- rsync -avzhHl /path/of/source/folder /path/to/destination/folder
Если вы планируете работать с удаленным узлом, то к команде необходимо добавить логин пользователя и IP-адрес (имя узла):
- rsync -avzhHl /path/of/source/folder root@192.168.43.10:/path/to/destination/folder.
Во втором случае необходимо предварительно настроить доступ к ключу.
Синхронизация по SSH и демон Rsync
По умолчанию программа использует протокол безопасной передачи данных SSH (Rsync over SSH). Для его активации не требуется никаких дополнительных параметров. Благодаря этой функции можно получить прямой доступ к демону Rsync без использования сторонних утилит. Пример обращения:
- rsync -avz /tmp/share rsync://192.168.43.121:/tmp/share
Просмотр хода выполнения операции
Большие объемы данных лучше передавать с визуальным контролем прогресса. Это позволит убедиться, что все файлы и каталоги действительно были синхронизированы. Пример команды для включения Rsync Progress:
- rsync -avzhHl —progress /path/of/source/folder
root@192.168.43.10:/path/to/destination/folder
Удаление файлов во время синхронизации
По умолчанию в каталоге назначения хранятся все файлы, ранее скопированные туда. Даже те, которые пользователь давно удалил с рабочего диска как ненужные. Поэтому рекомендуется периодически удалять ненужные данные, а не уменьшать объем резервной директории. Пример команды:
- rsync -avzhHl —delete /path/of/source/folder
root@192.168.56.1:/path/to/destination/folder
Ограничение скорости передачи данных
Часто канал связи имеет ограниченную пропускную способность, так как используется для решения ряда других задач. Или планируется использовать в ближайшем будущем. Для этого процесс копирования снижается в приоритете путем ограничения максимальной скорости обмена данными. Команда:
- rsync -avzhHl —bwlimit=’100′ /path/of/source/folder
root@192.168.56.1:/path/to/destination/folder
Иногда выгоднее отказаться от резервного копирования больших файлов. Такой подход актуален, если они носят в основном временный характер, когда на удаленный хост передаются только результаты просчитанных проектов. Пример команды:
- rsync -avzhHl —max-size=’100M’ /path/of/source/folder
root@192.168.43.10:/path/to/destination/folder
Использование опций include и exclude
Процесс синхронизации проходит быстрее всего, когда пользователь создает список файлов, наиболее важных для бесперебойной работы. Остальные остаются только на исходном диске. Пример указания конкретных имен:
- rsync -avzhHl —include=’.txt’ —exclude=» /path/of/source/folder \
root@192.168.56.1:/path/to/destination/folder