Передача файлов – одна из распространенных операций между удаленным хостом и локальным рабочим местом. И часть такой работы заключается в синхронизации файлов и каталогов, которая обычно осуществляется в автоматическом режиме (например, при совместной обработке проектов, для создания резервных копий важных данных). С этой целью на серверах часто используют утилиту Rsync, способную поддерживать коннект по зашифрованным каналам SSH и SSL.
Возможности Rsync
Привлекает в этом решении поддержка выборочной синхронизации – хоть отдельных файлов, хоть целой структуры каталогов. Процедура одинаково эффективна при обмене данными между виртуальными машинами, сетевыми хранилищами, дисками. Сразу после запуска все выбранные файлы копируются целиком, а затем система передает только измененные блоки. Благодаря такому подходу задача выполняется даже при наличии только «узкого» сетевого канала.
Возможно и сжатие данных перед их передачей. В Rsync используется алгоритм Deflate, являющийся модифицированной библиотекой zlib. Его запуск дает дополнительную экономию по пропускной способности в сравнении с аналогичным продуктом, утилитой SCP. Возможно включение опции сохранения метаданных (разрешений доступа, атрибутов чтения-записи, времени создания-редактирования файлов). В таком виде задача синхронизации работает под любым пользователем и не требует прав аккаунта ROOT.
Как установить, настроить и запустить утилиту Rsync (на примере CentOS 8 Stream)
Перечисленные возможности определяют основное назначение утилиты – резервирование данных или их восстановление после системных крахов. Наличие такой системы обязательно для любого удаленного хоста, развернутого в «ручном режиме». Например, если пользователь оплатил доступ к физическому серверу у провайдера timeweb.cloud и самостоятельно развернул виртуальную машину и другие сервисы.
Дистрибутив утилиты Rsync на Linux CentOS 8 доступен в официальном репозитории операционной системы и загружается командой:
После ее ввода будет автоматически установлена клиентская часть утилиты и ее серверная часть (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 рекомендуется указывать непривилегированные аккаунты (учетные записи для решения специализированных задач). Такой подход упрощает контроль над доступом к служебным задачам и позволяет сохранить настройки при смене рядовых пользователей. После сохранения изменений в конфигурационном файле утилита готова к запуску, остается лишь создать указанный в настройках каталог:
Запуск программы осуществляется по команде:
И первое, что рекомендуется сделать перед эксплуатацией, это настроить безопасность. Иначе при обращении утилиты к хосту возможна блокировка на уровне сетевого экрана и сервиса SELinux. Это выполняется последовательностью команд:
Теперь можно проверить текущий статус Rsync:
VDS и VPS
биллингом по всему миру: Россия, Азия и Европа.
Синтаксис 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.
Пример использования утилиты
Наиболее востребованные команды – копирование файлов, синхронизация целого каталога с источников, в том числе посредством канала SSH. Пользователи активно применяют отображение прогресса операций, ограничение скорости передачи, чтобы не «забивать» пропускную способность канала связи.
Копирование файлов
Рассмотрим в качестве примера локальное применение утилиты Rsync. В этом случае источник и приемник (речь о каталогах) будут относиться к одному диску:
Если планируется работать с удаленным хостом, в команду нужно добавить логин пользователя и IP-адрес (имя узла):
Во втором случае предварительно требуется настроить доступ по ключам.
Синхронизация через SSH и Rsync-демон
Программа по умолчанию использует защищенный протокол передачи данных SSH (Rsync over SSH). Никаких дополнительных параметров для активации указывать не требуется. Благодаря такой функции есть возможность прямого обращения к демону Rsync без каких-либо сторонних утилит. Пример обращения:
Просмотр прогресса операций
Большие объемы данных лучше передавать с визуальным контролем прогресса. Это позволит убедиться, что действительно все файлы и каталоги были синхронизированы. Пример команды для включения Rsync Progress:
Удаление файлов при синхронизации
По умолчанию в каталоге-приемнике хранятся все файлы, ранее туда скопированные. Даже те, которые пользователь за ненадобностью давно удалил с рабочего диска. Поэтому рекомендуется хотя бы периодически удалять ненужные данные, а не снижать объем каталога с резервной копией информации. Пример команды:
Ограничение скорости передачи данных
Канал связи часто ограничен по пропускной способности, ведь его используют и для решения ряда других задач. Или планируется это делать в ближайшее время. С этой целью процесс копирования понижают в приоритете за счет ограничения максимальной скорости обмена данными. Команда:
Иногда более выгодным становится отказ от резервирования больших по объему файлов. Такой подход актуален, если они являются преимущественно временными, когда на удаленный хост переносят только результат, просчитанные проекты. Пример команды:
Применение опций include и exclude
Быстрее всего синхронизация происходит, когда пользователь составляет список файлов, которые наиболее критичны для бесперебойной работы. Остальные же остаются только на диске-источнике. Пример указания конкретных имен:
Разверните свой Linux VDS в Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
Программа Rsync привлекательна для использования по нескольким причинам. Во-первых, она работает как с параметрами по умолчанию, так и по спискам файлов-каталогов, созданным вручную. Во-вторых, она самостоятельно использует защищенный формат передачи данных через SSH и не требует инсталляции дополнительного софта. Кроме того, процесс передачи файлов легко автоматизировать штатным планировщиком.
