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

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

Базовая инструкция по rsync – фундамент для дальнейшего изучения автоматизации, безопасности

Содержание:

На рынке программного обеспечения присутствует немало средств для осуществления копирования и синхронизации файлов, и 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 update

$ apt-get install rsync

$ apt-get install rsync

Выход команды: Setting up rsync (3.27-1+debian12u2) . Утилита успешно установлена. Теперь можно переходить к работе с утилитой.

Начальный этап – создание файлов и копирование в пункт назначения

Создадим файл в каталоге Synfiles (первоисточник) и внесем в него произвольную информацию:

$ nano ~/files/testfile1.txt

$ nano ~/files/testfile1.txt

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

$ stat -c "%s %n" ~/files/*

$ stat -c "%s %n" ~/files/*

Выход: 431 /root/files/testfile1.txt.

Теперь мы знаем, что размер созданного файла составляет 431 байт.

Применим команду синхронизации с несколькими параметрами:

-v – вывод детальной информации о ходе процесса копирования;
-h – вывод чисел в удобном для восприятия формате;
-r – рекурсивный переход по вложенным каталогам.

Введем в терминале:

$ rsync -vhr ~/files ~/synfiles

$ 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/

$ ls -h ~/synfiles/

Выход: files . Каталог создан.

Проверим его содержимое:

$ stat -c "%s %n" ~/synfiles/files/*

$ stat -c "%s %n" ~/synfiles/files/*

Выход: 431 /root/synfiles/files/testfile1.txt

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

Обновление синхронизированной копии

Очевидно, обновление файлов должно происходить по определенным правилам. Например, если дата внесения изменений в тот же файл "пункта назначения" более новая, чем в "источнике", то обновлять его не нужно. Этого можно добиться, применив опцию -u или –update в команде синхронизации Продемонстрируем это. 

Внесем изменения в файл testfile1.txt «пункта назначения»: 

$ nano ~/synfiles/files/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/

$ 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/*

$ 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

$ nano ~/files/testfile2.txt

Проверим статистику:

$ stat -c "%s %n" ~/files/*

$ stat -c "%s %n" ~/files/*Выход:

431 /root/files/testfile1.txt
863 /root/files/testfile2.txt

Синхронизируем каталоги за исключением нового файла с именем testfile2.txt:

$ rsync -uvhr --exclude 'testfile2.txt' ~/files ~/synfiles/

$ 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/*

$ 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/

$ 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/*

$ 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

$ rm ~/files/testfile1.txt

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

$ 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/*

$ 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/

$ 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/

$ ls mybackups/

Выход:  files 

Мы видим, что каталог Files скопирован в каталог mybackups. 

Просмотрим статистику для него:

$ stat -c "%s %n" mybackups/files/*

$ 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
navigate
go
exit
Спасибо, что выбираете FREEhost.UA