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

Содержание:
- Характеристики Rsync и особенности использования
- Локальное копирование и синхронизация файлов/каталогов
- Начальный этап – создание файлов и копирование в пункт назначения
- Обновление синхронизированной копии
- Режим моделирования
- Синхронизация с исключениями
- Поддержка актуальности данных
- Создание резервных копий
- Решение от FREEhost.UA
- Выводы
На рынке программного обеспечения присутствует немало средств для осуществления копирования и синхронизации файлов, и Rsync по многим параметрам занимает одно из первых мест. Открытый исходный код, гибкость и простота использования, шифрование, конвейерная передача файлов с сохранением всех метаданных и многие другие кейсы делают его незаменимым инструментом сетевой синхронизации удаленных объектов файловой системы. Рассмотрим основные возможности программы и продемонстрируем их применение на практических примерах.
Характеристики Rsync и особенности использования
Программа появилась на замену своим устаревшим аналогам, в частности, таким как scp и рцп, и поэтому имеет с ними некоторые общие черты, в частности в общем синтаксисе. К примеру, команда копирования на удаленный хост имеет следующий синтаксис:
rsync [опції] … SRC … [REMOTE_USER@]HOST:DEST
Здесьопции – уточняющие параметры команды запуска программы; SRC– любой объект файловой системы или их группа для копирования; HOST – адрес удаленного хоста; DEST – каталог назначения на удаленном хосте.
Синтаксис команды копирования из удаленного хоста будет следующим:
rsync [опції] … [REMOTE_USER@]HOST:SRC [DEST]
Как видим, команда копирования всегда должна содержать источник данных и пункт назначения, и любой из них может быть удален, но не оба одновременно.
Утилита была создана для Unix-подобных ОС, но имеет множество реализаций и для других платформ, в частности, Windows(cwRsync) и macOS (Grsync). Она включена в большинство Linux-дистрибутивов
В отличие от большинства аналогов, Rsync для передачи файлов использует только один поток данных, который оптимизирует объем трафика в канале и минимизирует расход ресурсов. Особенно это чувствуется при большом количестве файлов малого размера, когда для каждого из них другие программы синхронизации образуют новый поток данных.
Для передачи данных утилита может использоваться защищенный протокол ssh или собственный протокол rsync с предварительно настроенным Rsync-сервером. Но стандартным средством передачи данных является ssh.
Утилита имеет даэмон rsyncd, который при необходимости всегда можно запустить с помощью опции–daemon, указанной в команде запуска
Выделим основные особенности утилиты:
-
Конвейерная передача файлов;
-
Использует любую прозрачную удаленную оболочку, в том числе ssh да рш;
-
Копирует ссылки, владельцев, группы, права доступа и другие метаданные файлов;
-
Поддержка рекурсии при копировании и синхронизации;
-
Использует инкрементальное копирование для минимизации затрат ресурсов и повышения производительности;
-
Передача файлов в зашифрованном виде;
-
Поддерживает анонимные и аутентифицированные даемоны rsync;
-
Возможность указать исключение для копирования;
-
Не требует привилегии суперпользователя для его применения.
Локальное копирование и синхронизация файлов/каталогов
На нашей локальной машине под управлением ОС Debian 12 смоделируем ситуацию, при которой два каталога с файлами будут синхронизироваться друг с другом.
В домашней директории root-пользователя будет находиться каталог с именем Files (первоначальный источник данных) и каталог с именем Synfiles (пункт назначения). На их примере выясним на практике как «работает» команда rsync при использовании наиболее используемых опций. Но прежде выполним подготовительный этап – обновим индекс пакетов и установим утилиту Rsync из репозитория.
$ apt update

$ apt-get install rsync

Выход команды: Setting up rsync (3.27-1+debian12u2) . Утилита успешно установлена. Теперь можно переходить к работе с утилитой.
Начальный этап – создание файлов и копирование в пункт назначения
Создадим файл в каталоге Synfiles (первоисточник) и внесем в него произвольную информацию:
$ nano ~/files/testfile1.txt

Просмотрим статистику для всех файлов указанного каталога:
$ stat -c "%s %n" ~/files/*

Выход: 431 /root/files/testfile1.txt.
Теперь мы знаем, что размер созданного файла составляет 431 байт.
Применим команду синхронизации с несколькими параметрами:
-v – вывод детальной информации о ходе процесса копирования; -h – вывод чисел в удобном для восприятия формате; -r – рекурсивный переход по вложенным каталогам.
Введем в терминале:
$ rsync -vhr ~/files ~/synfiles

Выход команды:
sending incremental file list files/ files/testfile1.txt sent 567 bytes received 39 bytes 1.21K bytes/sec total size is 431 speedup is 0.71
Команда скопировала каталог Files со всем его содержимым в каталог Synfiles. Проверим это:
<pre$ ls -h ~/synfiles/

Выход: files . Каталог создан.
Проверим его содержимое:
$ stat -c "%s %n" ~/synfiles/files/*

Выход: 431 /root/synfiles/files/testfile1.txt
Можно убедиться, что каталог Synfiles содержит синхронизированную копию каталога Файлы со всеми его содержимыми.
Обновление синхронизированной копии
Очевидно, обновление файлов должно происходить по определенным правилам. Например, если дата внесения изменений в тот же файл "пункта назначения" более новая, чем в "источнике", то обновлять его не нужно. Этого можно добиться, применив опцию -u или –update в команде синхронизации Продемонстрируем это.
Внесем изменения в файл testfile1.txt «пункта назначения»:
$ nano ~/synfiles/files/testfile1.txt

Проверим его новый размер:
$ stat -c "%s %n" ~/synfiles/files/*

Выход: 1295 /root/synfiles/files/testfile1.txt
Размер файла теперь составляет 1295 б.
Синхронизируем каталоги с использованием опции -u:
$ rsync -uvhr ~/files ~/synfiles/

Выход команды:
sending incremental file list sent 86 bytes received 17 bytes 206.00 bytes/sec total size is 431 speedup is 4.18
Проверим статистику по файлам обоих каталогов:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Выход:
431 /root/files/testfile1.txt 1295 /root/synfiles/files/testfile1.txt
Можно убедиться, что «новый» размер файла не изменился, то есть его обновление не произошло. Однако, если бы дата внесения изменений была более старой или даже равной дате «источника», такие файлы всегда обновляются утилитой.
Режим моделирования
Режим моделирования используется в случае, когда есть сомнения в результате выполнения операции копирования или синхронизации данных. Он позволяет получить информацию об операциях, которые будут выполнены при запуске команды rsync, при этом фактические изменения внесены не будут. Включить данный режим можно с помощью опции --dry-run или в сокращённой форме -n.
В этом случае команда синхронизации будет выглядеть следующим образом:
$ rsync -uvhr --dry-run ~/files ~/synfiles/
Или
$ rsync -uvhrn ~/files ~/synfiles/
Кроме того, параметр --dry-run целесообразно использовать совместно с опцией -i, которая позволяет получить подробную информацию обо всех изменениях для каждого отдельного файла, который будет обновлён или синхронизирован. В этом случае наша команда будет выглядеть так:
$ rsync -uvhrin ~/files ~/synfiles/
Синхронизация с исключениями
Часто случается ситуация, когда нужно синхронизировать каталоги за исключением некоторых файлов «источника». Это можно сделать с помощью опции --exclude. Продемонстрируем это.
Создадим новый файл в «источнике» и внесем в него произвольные данные:
$ nano ~/files/testfile2.txt

Проверим статистику:
$ stat -c "%s %n" ~/files/*
Выход:
431 /root/files/testfile1.txt 863 /root/files/testfile2.txt
Синхронизируем каталоги за исключением нового файла с именем testfile2.txt:
$ rsync -uvhr --exclude 'testfile2.txt' ~/files ~/synfiles/

Выход команды:
sending incremental file list sent 86 bytes received 17 bytes 206.00 bytes/sec total size is 431 speedup is 4.18 /pre>
Проверим статистику в обоих каталогах:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Выход:
431 /root/files/testfile1.txt 863 /root/files/testfile2.txt 1295 /root/synfiles/files/testfile1.txt
Можно убедиться, что указанный файл в пункте назначения отсутствует.
Теперь синхронизируем каталоги без опции --exclude:
$ rsync -uvhr ~/files ~/synfiles/

Выход:
sending incremental file list files/testfile2.txt
total size is 1.29K speedup is 1.23
Смотрим статистику:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Выход:
431 /root/files/testfile1.txt 863 /root/files/testfile2.txt 1295 /root/synfiles/files/testfile1.txt 863 /root/synfiles/files/testfile2.txt
Файл с именем testfile2.txt появился в «источнике», как и должно быть.
Следует отметить, что утилита также поддерживает опцию --include, то есть, «включение». Она применяется аналогично первой, только с противоположным действием, и потому мы ее рассматривать не будем.
Поддержка актуальности данных
Актуальность данных предполагает полную идентичность содержимого каталогов на стороне источника и назначения. Достичь этого можно, в частности, благодаря применению опции --delete. Приведем пример.
Удалим из первоначального каталога файл с именем testfile1.txt, после чего синхронизируем каталоги с опцией --delete:
$ rm ~/files/testfile1.txt

$ rsync -vhr --delete ~/files ~/synfiles/

Выход команды:
sending incremental file list deleting files/testfile1.txt files/testfile2.txt sent 996 bytes received 59 bytes 2.11K bytes/sec total size is 863 speedup is 0.82
Проверяем статистическую информацию:
$ stat -c "%s %n" ~/files/* && stat -c "%s %n" ~/synfiles/files/*

Выход:
863 /root/files/testfile2.txt 863 /root/synfiles/files/testfile2.txt
Можно убедиться в том, что каталоги полностью синхронизировались между собой. Применяемая опция «работает» таким образом, что «вычищает» все файлы из «пункта назначения», отсутствующие в «источнике», поддерживая тем самым актуальность имеющихся данных.
Создание резервных копий
Рассмотрим вопрос создания резервных копий или синхронизируемых бекапов каталога. Такой бекап фактически будет синхронизироваться вместе с данными источника и пункта назначения. Это обеспечивается тем, что опция -b (от backup) для автоматического создания бекапа присутствует в той же команде синхронизации, которая запускается для «источника» и «назначения». Приведем пример.
Наш каталог бекапа будет иметь имя mybackups и находиться в домашней директории корень-пользователя. Полный путь к нему указывается с помощью параметра --backup-dir. Конечно, здесь можно указать любой путь и даже разместить бекап на другом диске. Мы можем создать каталог бекапа самостоятельно или это сделает за нас утилита. Rsync сразу после запуска в случае его отсутствия.
Введем в терминале:
$ rsync -bavh --backup-dir='/root/mybackups/' ~/files ~/synfiles/

Выход:
files/ files/testfile2.txt sent 1.01K bytes received 39 bytes 2.10K bytes/sec total size is 863 speedup is 0.82
Сначала убедимся, что первоначальный каталог продублирован:
$ ls mybackups/

Выход: files
Мы видим, что каталог Files скопирован в каталог mybackups.
Просмотрим статистику для него:
$ stat -c "%s %n" mybackups/files/*

Выход: 863 mybackups/files/testfile2.txt
Можно убедиться, что файл с именем testfile2.txt полностью совпадает с файлом первоначального каталога. Это значит, что параллельно процессу синхронизации данных «источника» и «пункта назначения» будет в автоматическом режиме происходит резервное копирование данных.
Решение от FREEhost.UA
Для надежного хранения резервных копий отлично подойдет сервер STG54 – оптимальное сочетание производительности и большого дискового пространства. Вы получите собственный сервер с полным контролем доступа и возможностью автоматического резервирования данных с помощью rsync. Узнайте больше о сервере для бекапов в соответствующем разделе.
Выводы
Мы рассмотрели основные характеристики Rsync и её базовые возможности по обновлению и синхронизации данных. Однако реальные возможности утилиты гораздо шире, чем показано здесь. Прежде всего, это касается вопросов автоматизации и безопасности, которые мы обязательно разберём в нашей следующей статье.
Подписывайтесь на наш телеграмм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов
Смотрите наш канал Youtube на https://www.youtube.com/freehostua.
Мы в чем ошиблись, или что-то пропустили?
Напишите об этом в комментариях, мы с удовольствием ответим и обсудим Ваши замечания и предложения.
|
Дата: 28.10.2025 Автор: Александр Ровник
|
|

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