Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Кратко о задаче
Привлекает в этом решении поддержка выборочной синхронизации – хоть отдельных файлов, хоть целой структуры каталогов. Процедура одинаково эффективна при обмене данными между виртуальными машинами, сетевыми хранилищами, дисками. Сразу после запуска все выбранные файлы копируются целиком, а затем система передает только измененные блоки. Благодаря такому подходу задача выполняется даже при наличии только «узкого» сетевого канала.
Возможно и сжатие данных перед их передачей. В Rsync используется алгоритм Deflate, являющийся модифицированной библиотекой zlib. Его запуск дает дополнительную экономию по пропускной способности в сравнении с аналогичным продуктом, утилитой SCP. Возможно включение опции сохранения метаданных (разрешений доступа, атрибутов чтения-записи, времени создания-редактирования файлов). В таком виде задача синхронизации работает под любым пользователем и не требует прав аккаунта ROOT.
Как установить, настроить и запустить утилиту Rsync (на примере CentOS 8 Stream)
Перечисленные возможности определяют основное назначение утилиты – резервирование данных или их восстановление после системных крахов. Наличие такой системы обязательно для любого удаленного хоста, развернутого в «ручном режиме». Например, если пользователь оплатил доступ к физическому серверу у провайдера Simple-Server и самостоятельно развернул виртуальную машину и другие сервисы.
Дистрибутив утилиты Rsync на Linux CentOS 8 доступен в официальном репозитории операционной системы и загружается командой:
dnf -y install rsync rsync-daemonПосле ее ввода будет автоматически установлена клиентская часть утилиты и ее серверная часть (Rsync Daemon). Второй модуль нужен для приема входящих обращений без использования канала SSH, когда передача данных осуществляется по протоколу rsync. Работает она в соответствии с настройками, внесенными в файл конфигурации /etc/rsyncd.conf.
Чтобы открыть его на изменение, например, с помощью редактора nano, нужна команда:
В файле используются следующие переменные:
- pif file – файл, куда система будет сохранять номера процессов демона;
- lock file – создается файл, блокирующий запуск дубликата программы Rsync;
- log file – журнал, предназначенный для фиксации происходящих событий;
- path – ссылка на каталог, который предстоит синхронизировать;
- hosts allow – «белый список» удаленных машин с допуском для подключения;
- hosts deny – «черный список» хостов, кому запрещена передача данных;
- list – флаги запрета/разрешения на чтение указанного каталога;
- uid – логин аккаунта, под которым будет осуществляться синхронизация;
- gid – то же, но имеет отношение к группе пользователей с допуском к резервированию;
- read only – флаг, позволяющий защищать данные от удаления или изменения;
- comment – описание конфигурации.
Дополнительные сведения можно найти в документации.
В строках uid и gid рекомендуется указывать непривилегированные аккаунты (учетные записи для решения специализированных задач). Такой подход упрощает контроль над доступом к служебным задачам и позволяет сохранить настройки при смене рядовых пользователей. После сохранения изменений в конфигурационном файле утилита готова к запуску, остается лишь создать указанный в настройках каталог:
Запуск программы осуществляется по команде:
systemctl enable --now rsyncdИ первое, что рекомендуется сделать перед эксплуатацией, это настроить безопасность. Иначе при обращении утилиты к хосту возможна блокировка на уровне сетевого экрана и сервиса SELinux. Это выполняется последовательностью команд:
setsebool -P rsync_full_access on
firewall-cmd --add-service=rsyncd --permanent
firewall-cmd –reloadТеперь можно проверить текущий статус Rsync:
Общий синтаксис Rsync выглядит так:
rsync -options <source> <destination>Options – это параметры для запуска программы, source – ресурс, являющийся источником для синхронизации, destination – каталог-приемник, куда будут скидываться синхронизируемые файлы и каталоги.
- -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.
Пример использования утилиты
Наиболее востребованные команды – копирование файлов, синхронизация целого каталога с источников, в том числе посредством канала 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Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.