• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Оглавление

 Задача обеспечения зеркалирования данных или резервное копирование клиентских Linux-систем на главный сервер очень важна в настоящее время. Для ее решения применяется ряд известных утилит или протоколов, среди которых наиболее удачной является программа Rsync. В отличие от многих своих аналогов, она способна обеспечить автоматизированную передачу/прием данных рекурсивным методом по защищенному каналу с использованием встроенных методов сжатия. Рассмотрим его возможности на практических примерах.

Программные средства синхронизации данных

Разработка эффективных программных средств копирования данных обычно вызывает немало сложностей и поэтому является задачей нетривиальной. Это, в частности, связано с необходимостью использования посторонних протоколов для транспортировки данных, которые в большинстве своем также не являются совершенными.

Среди наиболее известных утилит такого класса можно выделить RCP (remote copy), SCP (secure copy) и Rsync (remote synchronization).

Первая из них для транспортировки данных использует протокол прикладного уровня RLOGIN, который не способен обеспечить достаточный уровень защиты данных и поэтому неприемлем для использования в нынешних условиях.

Утилита Scp является фактически защищенным аналогом Rcp, поскольку использует для передачи защищенный протокол Ssh, однако имеет ряд потенциальных ошибок, возникающих при подключении по Ssh и много ограничений. В частности, это невозможность использования графического интерфейса без подключения сторонних модулей и функций, а также многие другие несовершенства.

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

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

Можно выделить следующие возможности утилиты:

  • Возможность запуска во многих режимах, в том числе и демона;
  • Способность копировать группы, разрешения, устройства и ссылки;
  • Поддержка exclude опций;
  • Не требует использования уровня суперпользователя;
  • Поддержка тестового режима запуска;
  • Потоковая передача данных;
  • Поддержка режима CVS;
  • Возможность подключения к разным типам удаленных оболочек.

Практическое использование Rsync в пределах локального сервера

Программа входит в базовое программное обеспечение большинства дистрибутивов Linux-подобных операционных систем и поэтому не требует установки. Но в случае чего ее всегда можно установить из открытого репозитория стандартными средствами.

Для тестирования возможностей программы будем употреблять локальный сервер под управлением Ubuntu 22.04.

Для того чтобы узнать номер версии программного средства, вводим в терминале следующую команду:

$ rsync -v

Итак, установлена ??версия Rsync 3.2.7. Кроме того, указанная команда позволяет получить информацию о возможностях средства и список доступных параметров управляющей команды rsync.

Нами будут созданы два каталога, один из которых будет источником данных, а другой будет местом назначения, то есть его содержимое будет синхронизироваться с источником с помощью rsync. Также будут продемонстрированы различные варианты запуска программы с использованием различных параметров, что позволяет оптимизировать процесс передачи данных и сделать его более гибким.

Сначала создадим первоначальный каталог с данными:

$ mkdir lessondir

Сгенерируем в нем пять файлов, после чего просмотрим его содержимое:

$ touch lessondir/testfile{1..5}
$ ls lessondir

Как видим, файлы с именем testfile1, ..., testfile5 успешно созданы.

Теперь создадим каталог назначения – приемник данных. Для этого наберем в терминале:

$ mkdir lessondir2

Просмотрите текущий каталог, чтобы убедиться, что все на месте:

$ ls -l

Для синхронизации содержимого первоначального каталога с каталогом назначения рекурсивным методом (параметр -r) в пределах одной системы можно использовать следующую команду:

$ rsync -r lessondir/ lessondir2

Убедимся в том, что содержимое каталогов синхронизировано:

$ ls lessondir2

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

$ rsync -a lessondir/ lessondir2

Следует отметить, что символ "/" в конце названия "источника" данных является указателем на копирование только данных, а не самой директории. В случае такой необходимости достаточно убрать указанный символ из команды, после чего директория скопируется вместе с данными.

Проверим это:

$ rsync -a lessondir lessondir2
 
$ ls lessondir2

Мы видим, что директория появилась. Проверим ее содержимое:

$ ls lessondir2/lessondir

Итак, все совпадает – произошло полное копирование данных вместе с каталогом, то есть по сути реализация формата вложенных каталогов.

Дополнительные возможности

Использование тестового режима запуска

Программное средство предоставляет возможность включения тестового режима для проверки работы команды, что позволяет избежать лишних ошибок. Это осуществляется благодаря использованию параметра -n в командной строчке. Вместе с ним целесообразно использование параметра -v, детализирующего вывод и, соответственно, также может оказаться полезным. Проверим это на практике, объединив указанные параметры с предыдущим:

$ rsync -anv lessondir/ lessondir2

Мы видим, что в выводе команды тестовый режим обозначен как DRY RUN. Это название также можно использовать в качестве параметра так же, как и -n, поскольку результат будет тот же. Кроме того, вывод команды показывает, что никакого файла не может быть скопировано по той причине, что в них не было внесено изменений после проведения последней синхронизации. Как уже отмечалось, это становится возможным благодаря использованию в команде параметра -a, что позволяет избежать дублирования передаваемой информации.

Внесем изменения в один из файлов и повторим запуск команды с теми же параметрами. Для этого запустим редактор nano:

nano lessondir/testfile5

Внесем в файл следующую строку: Как клонировать HDD диск в Windows 10.

Сохраним внесенные изменения и выйдем из редактора.

Теперь запустим команду еще раз:

$ rsync -anv lessondir/ lessondir2

Как можно убедиться, только тот файл, в который были внесены изменения, может быть передан к месту назначения. Такая возможность позволяет оптимизировать объемы передаваемых данных.

Сжатие передаваемых данных

Уменьшить объемы данных при передаче также можно благодаря использованию параметра -z, конфигурирующего программу на сжатие информации с помощью интегрированных в нее средств. Перед запуском команды мы изменили все файлы. Набираем в терминале:

$ rsync -azP lessondir/ lessondir2

Мы также использовали параметр -P, который обеспечивает индикацию процесса выполнения команды и возобновляет ее выполнение в случае незапланированного прерывания во время передачи данных.

Теперь запустим ту же команду еще раз без внесения в данные предварительных изменений:

$ rsync -azP lessondir/ lessondir2

Мы видим, что никакие данные не были переданы, поскольку изменения не были внесены. Это в очередной раз подтвердило учет программы времени модификации данных при их передаче.

Создание резервной копии данных

Программу можно использовать для автоматического создания резервных копий данных. При этом поможет параметр –backup. Вместе с ним необходимо указывать директорию сохранения копии с соответствующим параметром. Продемонстрируем это:

$ rsync -a --backup --backup-dir=reservecopy lessondir/ lessondir2

Здесь reservecopy – директория хранения резервной копии.

Просмотрим содержимое указанной директории после выполнения копирования данных:

$ ls lessondir2/reservecopy

Можно убедиться, что резервная копия успешно создана.

Удаление «лишних» файлов и каталогов из директории назначения

Следует отметить, что программа по умолчанию только синхронизирует файлы с данными, не выполняя для этого операций очистки каталога назначения от тех файлов, которые уже были удалены из каталога – источника информации. Чтобы она выполняла указанные операции, необходимо в командной строчке указать соответствующий аргумент – параметр -delete. Убедимся, что это работает.

Удалим два файла из директории – источника с помощью следующих команд:

$ rm lessondir/testfile4
$ rm lessondir/testfile5

Запустим на выполнение команду с соответствующим параметром, после чего убедимся в том, что лишние файлы были удалены из директории назначения:

$ rsync --delete -a lessondir/ lessondir2
 
$ ls lessondir2

Итак, теперь синхронизация каталогов является полной, поскольку были удалены не только «лишние» файлы, а также каталог с резервной копией с названием reservecopy, ранее созданный.

Синхронизация с удаленным каталогом

До сих пор мы рассматривали задачи по синхронизации данных в пределах одной системы, а теперь попытаемся наладить такую ??же связь с удаленным каталогом. Сразу укажем, что принципиальной разницы здесь нет. Главное, чтобы была правильно налажена связь между машинами по протоколу ssh. Лучший вариант – это авторизация с помощью открытого ключа, поскольку это повысит уровень защиты и освободит от неприятной процедуры каждый раз вводить пароль. Для ее настройки достаточно поместить открытый ключ локальной машины в файл authorized_keys удаленного компьютера.

Запустим команду синхронизации локального и удаленного каталога. Для этого наберем в терминале:

$ rsync -a lessondir alexandr75001@176.9.11.135:copylessondir

Здесь мы указали адреса источника данных и приемника. Адрес приемника включает имя пользователя удаленной системы, IP-адрес сервера и путь к местонахождению копии данных. Также обращаем внимание, что символ «/» после названия директории – приема здесь отсутствует. Как уже отмечалось выше, это является обязательным условием копирования данных вместе с директорией хранения.

Просмотрим директорию copylessondir, чтобы убедиться, что копия данных уже там:

$ ls copylessondir

Теперь просмотрим самые скопированные данные:

$ ls copylessondir/lessondir

Мы видим, что передаваемые данные полностью совпадают с источником.

Теперь выполним обратную операцию – синхронизируем содержимое директории copylessondir удаленной машины с каталогом локального сервера.

Создадим указанную директорию на локальном сервере:

$ mkdir lessondir3

Запустим соответствующую команду во исполнение:

$ rsync -a alexandr75001@176.9.11.135:copylessondir/lessondir lessondir3

Просмотрим результат:

$ ls lessondir3
 
$ ls lessondir3/lessondir

Можно убедиться, что все данные синхронизировались с хранящимися в директории copylessondir удаленной машины.

Все параметры запуска команды rsync, которые были рассмотрены ранее, также можно использовать при работе с удаленными системами и, поэтому, нет смысла повторять здесь примеры их использования.

Если вам нужен сервер для хранения резервных копий, дата-центр FREEhost.UA предлагает в аренду специальную конфигурацию сервер для хранения бекапов. Владельцы VPS и выделенных серверов могут воспользоваться дополнительной услугой облачного диска.

Подписывайтесь на наш телеграм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем-то ошиблись, или что-то пропустили?

Напишите об этом в комментариях на сайте и в телеграм-канале. Мы с удовольствием ответим и обсудим Ваши замечания и предложения.

Дата: 28.09.2023
Автор: Александр Ровник
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA