Rsync для Linux: синхронизация, копирование и резервное копирование файлов
9 мин чтения - 24 мая 2025 г.

Как использовать rsync в Linux для инкрементных переносов, удаленной синхронизации по SSH, резервного копирования по расписанию с помощью cron и избежания ловушки trailing-slash.
Rsync для Linux: как синхронизировать, копировать и создавать резервные копии файлов как профессионал
Rsync — это стандартный инструмент для копирования файлов между системами Linux. Он работает быстрее, чем cp или scp для всего, что вы запускаете более одного раза, восстанавливает данные после сбоев в сети и передает только то, что действительно изменилось. В этой статье рассказывается о том, что делает rsync, о флагах, которые стоит знать, о примерах, к которым вы будете обращаться чаще всего, и о том, как запланировать его работу с помощью cron.
Что такое rsync?
Rsync — это утилита командной строки для копирования и синхронизации файлов между местоположениями. Она работает локально, через SSH на удаленном хосте или с демоном rsync. Ключевое отличие от cp или scp: rsync сначала сравнивает исходный и целевой каталоги, а затем передает только различия. В каталоге объемом 100 ГБ, где изменилось 200 МБ, rsync перемещает 200 МБ. cp а scp перемещает всё.
Она поставляется с каждым современным дистрибутивом Linux. Если её нет: apt install rsync или dnf install rsync.
Почему rsync лучше, чем cp или scp
Три причины, по которым rsync выигрывает при любой нетривиальной копировании:
- Он инкрементален. При последующих запусках передаются только измененные байты, а не целые файлы. Для резервного копирования и зеркалирования это превращает ночную задачу в работу, занимающую несколько минут.
- Он устойчив к прерываниям. С
--partial, передача файла объемом 50 ГБ, которая была прервана на половине, возобновляется с того места, где она остановилась, а не с самого начала. - Он сохраняет метаданные. В режиме архивирования (
-a) сохраняет права доступа, владельца, символьные ссылки и временные метки. Это критично для системных файлов, деревьев исходных кодов и всего, где важны атрибуты.
Для разового копирования небольших файлов scp подойдет. Для всего, что повторяется, требует большой пропускной способности или может потребовать возобновления, используйте rsync.
Распространенные флаги rsync
Флаги, которые вам действительно пригодятся:
| Флаг | Что он делает |
|---|---|
-a | Режим архивирования. Сохраняет права доступа, владельца, символьные ссылки и временные метки. Эквивалентно -rlptgoD. |
-v | Verbose. Выводит список передаваемых файлов. |
-z | Сжатие при передаче. Полезно при медленном или дорогом соединении, менее полезно в локальной сети или для уже сжатого контента. |
-P | Объединяет --partial и --progress. Возобновление прерванных передач, отображение текущего прогресса. |
--delete | Удаляет файлы в месте назначения, которых нет в исходном месте. Требуется для создания истинного зеркала. |
--exclude | Пропускать файлы, соответствующие шаблону. |
--exclude-from=FILE | Считывать шаблоны исключений из файла. Более аккуратно, чем цепочка из множества --exclude флагов. |
--dry-run | Показать, что произошло бы, если бы ничего не передавалось. |
--bwlimit=KBPS | Ограничить использование пропускной способности в килобайтах в секунду. Полезно для резервного копирования, выполняемого в рабочее время. |
--checksum | Сравнивать файлы по контрольной сумме, а не по размеру и времени изменения. Работает медленнее, но позволяет выявить крайние случаи. |
-e ssh | Использовать SSH для передачи. По умолчанию в большинстве современных установок. |
По умолчанию сравниваются размер файла и время изменения, что быстро и почти всегда правильно. Переключитесь на --checksum , если процесс развертывания перезаписывает временные метки без изменения содержимого или если вы подозреваете повреждение на битовом уровне.
Примеры rsync
Копирование каталога локально:
rsync -av /source/path/ /destination/path/Синхронизация с удаленным сервером через SSH:
rsync -avz /local/dir/ user@remote:/remote/dir/Проведите пробный запуск, прежде чем выполнять какие-либо действия, которые могут привести к потере данных:
rsync -avz --dry-run /local/dir/ user@remote:/dir/Зеркалирование двух каталогов, включая удаления в месте назначения:
rsync -av --delete /source/ /destination/Исключение логов и временного каталога:
rsync -av --exclude='*.log' --exclude='tmp/' /src/ /dest/Возобновление большой передачи, которая может прерваться:
rsync -avP user@remote:/backups/big.img /local/Если сеанс SSH прервется, запустите ту же команду еще раз. С -Prsync возобновит работу с того места, где остановился, а не начнет с нуля.
Ограничьте пропускную способность до 50 МБ/с для резервного копирования в непиковое время, чтобы не перегружать восходящий канал:
rsync -avz --bwlimit=50000 /local/dir/ user@remote:/dir/Ловушка с косой чертой в конце
Самая распространенная ошибка при использовании rsync:
rsync -av /source /destination/ # copies the 'source' directory INTO /destination
rsync -av /source/ /destination/ # copies the CONTENTS of /source into /destinationКосая черта в конце пути к источнику означает «все, что находится в этом каталоге». Отсутствие косой черты означает «сам этот каталог». Если вы не уверены, запускайте с --dry-run первым вариантом, если вы не уверены, особенно в сочетании с --delete.
Автоматизация rsync с помощью cron
Для запланированного резервного копирования вам понадобятся три вещи:
Доступ по SSH без пароля к месту назначения. Задания cron не могут вводить пароли. Сгенерируйте ключ и скопируйте его на хост резервного копирования:
ssh-keygen -t ed25519 ssh-copy-id user@backup-hostСкрипт, а не однострочная команда в crontab. Так проще тестировать и вести журнал:
#!/bin/bash LOG=/var/log/rsync-backup.log rsync -az --delete /etc/ user@backup:/backups/$(hostname)/etc/ >> "$LOG" 2>&1Сделайте его исполняемым с помощью
chmod +x.Запись в cron для его запуска. Отредактируйте с помощью
crontab -e:0 2 * * * /usr/local/bin/rsync-backup.shЭто запускает скрипт каждую ночь в 02:00.
Два улучшения, которые стоит внести в рабочую среду: оберните скрипт в flock , чтобы длительная задача не пересекалась с запуском следующей ночью, и направьте вывод через logger , чтобы сбои попадали в системный журнал, где их сможет обнаружить система мониторинга.
Заключительные мысли
Rsync — один из немногих инструментов Linux, где время, потраченное на изучение флагов, окупается практически сразу. Основные моменты:
- Инкрементная передача и поддержка возобновления делают rsync правильным выбором для всего, что вы запускаете более одного раза
-aдля режима архивирования,-zдля сжатия,-Pдля возобновления и отслеживания прогресса,--deleteдля настоящих зеркал- Обратите внимание на косую черту в конце пути к источнику, особенно при использовании
--delete - Используйте его вместе с cron и SSH-ключами для автоматического резервного копирования по расписанию
Для крупных заданий резервного копирования, при которых данные перемещаются между объектами, запуск rsync на VPS с неограниченной пропускной способностью означает, что окна резервного копирования не ограничиваются лимитами на передачу данных.

Цифровая усталость глаз: как защитить зрение в мире, где мы проводим много времени перед экранами
Всю день смотрите в экран? Узнайте, как снизить цифровую утомляемость глаз с помощью проверенных методов и инструментов. Это руководство незаменимо для удаленных сотрудников, разработчиков и всех, кто работает в сфере технологий.
4 мин чтения - 21 мая 2025 г.
Почему важно иметь мощный VPS без ограничений по трафику
8 мин чтения - 9 мая 2025 г.

У вас есть вопросы или вам нужно индивидуальное решение?
Гибкие варианты
Глобальный охват
Мгновенное развертывание
Гибкие варианты
Глобальный охват
Мгновенное развертывание