Давайте дружить в Телеграме: рассказываем про новые фичи, общаемся в комментах, прислушиваемся к вашим идеям Подписаться

Установка, настройка и примеры синхронизации Rsync

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
29 марта 2022 г.
2351
9 минут чтения
Средний рейтинг статьи: 4.8

New Documentation

Передача файлов – одна из распространенных операций между удаленным хостом и локальным рабочим местом. И часть такой работы заключается в синхронизации файлов и каталогов, которая обычно осуществляется в автоматическом режиме (например, при совместной обработке проектов, для создания резервных копий важных данных). С этой целью на серверах часто используют утилиту Rsync, способную поддерживать коннект по зашифрованным каналам SSH и SSL.

Установка, Настройка И Примеры Синхронизации Rsync (1)

Возможности Rsync

Привлекает в этом решении поддержка выборочной синхронизации – хоть отдельных файлов, хоть целой структуры каталогов. Процедура одинаково эффективна при обмене данными между виртуальными машинами, сетевыми хранилищами, дисками. Сразу после запуска все выбранные файлы копируются целиком, а затем система передает только измененные блоки. Благодаря такому подходу задача выполняется даже при наличии только «узкого» сетевого канала.

Возможно и сжатие данных перед их передачей. В Rsync используется алгоритм Deflate, являющийся модифицированной библиотекой zlib. Его запуск дает дополнительную экономию по пропускной способности в сравнении с аналогичным продуктом, утилитой SCP. Возможно включение опции сохранения метаданных (разрешений доступа, атрибутов чтения-записи, времени создания-редактирования файлов). В таком виде задача синхронизации работает под любым пользователем и не требует прав аккаунта ROOT.

Как установить, настроить и запустить утилиту Rsync (на примере CentOS 8 Stream)

Перечисленные возможности определяют основное назначение утилиты – резервирование данных или их восстановление после системных крахов. Наличие такой системы обязательно для любого удаленного хоста, развернутого в «ручном режиме». Например, если пользователь оплатил доступ к физическому серверу у провайдера timeweb.cloud и самостоятельно развернул виртуальную машину и другие сервисы.

Дистрибутив утилиты Rsync на Linux CentOS 8 доступен в официальном репозитории операционной системы и загружается командой:

dnf -y install rsync rsync-daemon

После ее ввода будет автоматически установлена клиентская часть утилиты и ее серверная часть (Rsync Daemon). Второй модуль нужен для приема входящих обращений без использования канала SSH, когда передача данных осуществляется по протоколу rsync. Работает она в соответствии с настройками, внесенными в файл конфигурации /etc/rsyncd.conf. 

Чтобы открыть его на изменение, например, с помощью редактора nano, нужна команда:

nano /etc/rsyncd.conf

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

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

Дополнительные сведения можно найти в документации.

В строках 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 выглядит так:

rsync -options <source> <destination>

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. В этом случае источник и приемник (речь о каталогах) будут относиться к одному диску:

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

Заключение

Программа Rsync привлекательна для использования по нескольким причинам. Во-первых, она работает как с параметрами по умолчанию, так и по спискам файлов-каталогов, созданным вручную. Во-вторых, она самостоятельно использует защищенный формат передачи данных через SSH и не требует инсталляции дополнительного софта. Кроме того, процесс передачи файлов легко автоматизировать штатным планировщиком.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону