Передача файлов – одна из распространенных операций между удаленным хостом и локальным рабочим местом. И часть такой работы заключается в синхронизации файлов и каталогов, которая обычно осуществляется в автоматическом режиме (например, при совместной обработке проектов, для создания резервных копий важных данных). С этой целью на серверах часто используют утилиту Rsync, способную поддерживать коннект по зашифрованным каналам SSH и SSL.
Привлекает в этом решении поддержка выборочной синхронизации – хоть отдельных файлов, хоть целой структуры каталогов. Процедура одинаково эффективна при обмене данными между виртуальными машинами, сетевыми хранилищами, дисками. Сразу после запуска все выбранные файлы копируются целиком, а затем система передает только измененные блоки. Благодаря такому подходу задача выполняется даже при наличии только «узкого» сетевого канала.
Возможно и сжатие данных перед их передачей. В Rsync используется алгоритм Deflate, являющийся модифицированной библиотекой zlib. Его запуск дает дополнительную экономию по пропускной способности в сравнении с аналогичным продуктом, утилитой SCP. Возможно включение опции сохранения метаданных (разрешений доступа, атрибутов чтения-записи, времени создания-редактирования файлов). В таком виде задача синхронизации работает под любым пользователем и не требует прав аккаунта ROOT.
Перечисленные возможности определяют основное назначение утилиты – резервирование данных или их восстановление после системных крахов. Наличие такой системы обязательно для любого удаленного хоста, развернутого в «ручном режиме». Например, если пользователь оплатил доступ к физическому серверу у провайдера timeweb.cloud и самостоятельно развернул виртуальную машину и другие сервисы.
Дистрибутив утилиты Rsync на Linux CentOS 8 доступен в официальном репозитории операционной системы и загружается командой:
dnf -y install rsync rsync-daemon
После ее ввода будет автоматически установлена клиентская часть утилиты и ее серверная часть (Rsync Daemon). Второй модуль нужен для приема входящих обращений без использования канала SSH, когда передача данных осуществляется по протоколу rsync. Работает она в соответствии с настройками, внесенными в файл конфигурации /etc/rsyncd.conf.
Чтобы открыть его на изменение, например, с помощью редактора nano, нужна команда:
nano /etc/rsyncd.conf
В файле используются следующие переменные:
Дополнительные сведения можно найти в документации.
В строках 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
vds
Общий синтаксис Rsync выглядит так:
rsync -options <source> <destination>
Options – это параметры для запуска программы, source – ресурс, являющийся источником для синхронизации, destination – каталог-приемник, куда будут скидываться синхронизируемые файлы и каталоги.
Перечень Rsync Options:
Наиболее востребованные команды – копирование файлов, синхронизация целого каталога с источников, в том числе посредством канала 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 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
Быстрее всего синхронизация происходит, когда пользователь составляет список файлов, которые наиболее критичны для бесперебойной работы. Остальные же остаются только на диске-источнике. Пример указания конкретных имен:
rsync -avzhHl --include='.txt' --exclude='' /path/of/source/folder \
root@192.168.56.1:/path/to/destination/folder
Разверните свой Linux VDS в Timeweb Cloud
Программа Rsync привлекательна для использования по нескольким причинам. Во-первых, она работает как с параметрами по умолчанию, так и по спискам файлов-каталогов, созданным вручную. Во-вторых, она самостоятельно использует защищенный формат передачи данных через SSH и не требует инсталляции дополнительного софта. Кроме того, процесс передачи файлов легко автоматизировать штатным планировщиком.