Практическое руководство по rsync в Linux: бэкап данных

Введение в технологию

Утилита rsync по праву считается эталонным инструментом системных администраторов для быстрого трансфера данных и создания резервных копий в среде Linux. В данном материале мы разберем практические сценарии работы с утилитой: от базового синтаксиса и тонкостей указания завершающего слэша в путях до безопасной инкрементной синхронизации рабочей среды с боевыми параметрами.

Развертывание rsync и базовая репликация каталогов (-av)

Перед началом практических тестов необходимо актуализировать локальные метаданные пакетного менеджера APT и установить саму утилиту rsync.

apt-get update -qq && apt-get install -y rsync

Для изолированной отработки сценариев создадим тестовую среду — каталог-источник и каталог-приемник — воспользовавшись вызовом mkdir -p /tmp/rsync_test/src /tmp/rsync_test/dest.

mkdir -p /tmp/rsync_test/src /tmp/rsync_test/dest

Наполним исходную директорию тестовыми данными, сгенерировав первичный файл командой echo 'data 1' > /tmp/rsync_test/src/file1.txt.

echo ‘data 1’ > /tmp/rsync_test/src/file1.txt

Аналогичным образом создадим вспомогательный файл данных через echo 'data 2' > /tmp/rsync_test/src/file2.txt.

echo ‘data 2’ > /tmp/rsync_test/src/file2.txt

Архитектура rsync ориентирована на минимизацию дискового и сетевого трафика как в рамках одной локальной файловой системы, так и при взаимодействии между узлами сети.
Добавление завершающего слэша (/) в пути источника предписывает скопировать именно содержимое каталога напрямую в целевую директорию с сохранением исходной файловой структуры.
⚙️ [Ключевые флаги и аргументы]

-a : Архивный режим (archive), объединяющий рекурсивный обход и сохранение прав доступа, владельцев, временных меток и символических ссылок.
-v : Подробный протокол выполнения (verbose), отображающий обрабатываемые сущности и финальную статистику.
-z : Сжатие передаваемых блоков данных (compression) алгоритмом deflate на лету для разгрузки сетевого канала.
-u : Пропуск перезаписи (update), если в целевой директории уже находится файл с более свежей датой модификации.
--delete : Удаление в приемнике тех объектов, которые уже отсутствуют в источнике, для достижения идеальной зеркальной копии.
-P : Комбинированный ключ, активирующий индикацию прогресса (--progress) и возможность докачки прерванных фрагментов (--partial).
-n : Режим холостого прогона (--dry-run), эмулирующий действия без фактического изменения файлов на накопителе.

rsync -av /tmp/rsync_test/src/ /tmp/rsync_test/dest/

Убедимся в корректности переноса файлов и сохранности их атрибутов в целевой директории с помощью команды ls -l /tmp/rsync_test/dest.

ls -l /tmp/rsync_test/dest

Влияние завершающего слэша (/) и принцип инкрементной передачи

Чтобы проверить работу дельта-алгоритма передачи, внесем изменения в существующий файл, добавив строку: echo 'data 1 updated' >> /tmp/rsync_test/src/file1.txt.

echo ‘data 1 updated’ » /tmp/rsync_test/src/file1.txt

Сгенерируем еще один пустой файл для проверки захвата новых объектов: touch /tmp/rsync_test/src/file3.txt.

touch /tmp/rsync_test/src/file3.txt

Повторно инициируем синхронизацию командой rsync -av /tmp/rsync_test/src/ /tmp/rsync_test/dest/.
Поскольку в пути источника указан завершающий косой слэш (/), утилита переносит исключительно файлы, минуя создание вложенной подпапки src. При этом немодифицированный file2.txt игнорируется, а физической передаче подвергаются лишь изменившийся file1.txt и свежий file3.txt.

rsync -av /tmp/rsync_test/src/ /tmp/rsync_test/dest/

Зеркальная синхронизация с ключом –delete и симуляция (–dry-run)

Смоделируем ситуацию удаления данных в источнике, стерев один из объектов вызовом rm /tmp/rsync_test/src/file2.txt.

rm /tmp/rsync_test/src/file2.txt

Выполним безопасную проверку грядущих изменений с помощью rsync -av --delete --dry-run /tmp/rsync_test/src/ /tmp/rsync_test/dest/.
Активация режима --dry-run наглядно выводит отчет об операциях: в терминале появится строка deleting file2.txt, что позволяет удостовериться в корректности удаления без риска случайной потери полезной информации.

rsync -av –delete –dry-run /tmp/rsync_test/src/ /tmp/rsync_test/dest/

Теперь применим зеркалирование на практике, запустив rsync -av --delete /tmp/rsync_test/src/ /tmp/rsync_test/dest/.
Благодаря параметру --delete приемник приводится в полное соответствие с источником: устаревший file2.txt удаляется из целевой папки.

rsync -av –delete /tmp/rsync_test/src/ /tmp/rsync_test/dest/

Проверим итоговый состав каталога-приемника командой ls -l /tmp/rsync_test/dest, чтобы убедиться в отсутствии удаленного файла и актуальности оставшихся данных.

ls -l /tmp/rsync_test/dest

Передача тяжелых массивов с компрессией и мониторингом (-avzP)

Для тестирования передачи объемных массивов данных сгенерируем бинарный файл размером 10 МБ: dd if=/dev/urandom of=/tmp/rsync_test/src/sample_large.dat bs=1M count=10.

dd if=/dev/urandom of=/tmp/rsync_test/src/sample_large.dat bs=1M count=10

Запустим процесс переноса с аппаратным сжатием и интерактивной индикацией через rsync -avzP /tmp/rsync_test/src/ /tmp/rsync_test/dest/.
Использование флага -z оптимизирует использование полосы пропускания за счет компрессии пакетов, в то время как ключ -P транслирует текущий статус выполнения (100%), скорость обмена и обеспечивает досылку файлов в случае разрыва соединения.

rsync -avzP /tmp/rsync_test/src/ /tmp/rsync_test/dest/

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