- Home »

Как использовать rsync для синхронизации локальных и удалённых директорий — Полезно для хостинга
Если ты когда-нибудь сталкивался с задачей быстро и надёжно синхронизировать файлы между локальной машиной и сервером (или между двумя серверами), то наверняка слышал про rsync. Эта статья — не просто очередная инструкция по командам, а подробный разбор того, как rsync реально помогает в жизни админа, разработчика, владельца хостинга или просто гика, который хочет держать свои данные под контролем. Я расскажу, почему rsync — это не только про копирование, но и про автоматизацию, безопасность, экономию времени и нервов. Плюс — покажу, как быстро всё настроить, какие грабли бывают и как их обойти, а ещё — какие фишки можно выжать из этого инструмента. Всё с примерами, схемами и практическими советами.
Как работает rsync и почему это круто
В двух словах: rsync — это утилита для синхронизации файлов и директорий между двумя местами (локально или по сети), которая копирует только изменённые данные. То есть, если у тебя есть папка с 10 000 файлов, и изменился только один — rsync перекачает только этот файл, а не всю папку. Это экономит трафик, время и ресурсы. Работает по принципу «дифференциальной синхронизации»: сравнивает содержимое источника и назначения, вычисляет различия и передаёт только их.
- Поддерживает работу по SSH (безопасно!)
- Можно использовать для бэкапов, миграций, зеркалирования сайтов, раздачи статики и даже для деплоя
- Работает на Linux, macOS, Windows (через Cygwin или WSL)
Важный момент: rsync не просто копирует файлы, а умеет сохранять права, владельцев, симлинки, жёсткие ссылки, атрибуты, ACL, extended attributes и даже sparse-файлы. Это критично для серверов и хостинга, где важно сохранить структуру и права доступа.
Быстрая настройка rsync: пошагово
Окей, теория хороша, но как это всё запустить в реальной жизни? Вот базовые сценарии, которые пригодятся 99% пользователей.
1. Синхронизация локальной папки с удалённой по SSH
rsync -avz /home/user/myproject/ [email protected]:/var/www/myproject/
- -a — архивный режим (сохраняет всё: права, симлинки и т.д.)
- -v — подробный вывод (видно, что происходит)
- -z — сжатие данных при передаче (ускоряет работу по медленным каналам)
Важно: слэш в конце пути myproject/
означает «содержимое папки», без слэша — «папку целиком».
2. Синхронизация в обратную сторону (с сервера на локалку)
rsync -avz [email protected]:/var/www/myproject/ /home/user/myproject/
3. Исключение файлов и папок
rsync -avz --exclude 'node_modules' --exclude '*.log' /home/user/myproject/ [email protected]:/var/www/myproject/
Можно использовать --exclude-from=exclude.txt
для списка исключений.
4. Сухой запуск (ничего не копирует, только показывает, что будет сделано)
rsync -avzn /home/user/myproject/ [email protected]:/var/www/myproject/
-n или –dry-run — must-have для тестирования.
5. Удаление файлов, которых нет в источнике
rsync -avz --delete /home/user/myproject/ [email protected]:/var/www/myproject/
Осторожно! --delete
реально удаляет файлы на стороне назначения, если их нет в исходной папке.
Практические кейсы: когда rsync — мастхэв, а когда — нет
Кейс | Плюсы rsync | Минусы rsync | Рекомендации |
---|---|---|---|
Бэкап сайта на VPS | Быстро, инкрементально, можно автоматизировать через cron | Не шифрует данные на диске, только при передаче (через SSH) | Использовать с ключами SSH, хранить бэкапы на отдельном сервере |
Деплой статики на продакшн | Молниеносно, только изменённые файлы, можно делать atomic deploy | Нет встроенного rollback, не подходит для zero-downtime деплоя | Комбинировать с symlink-стратегией, тестировать на staging |
Миграция больших данных между серверами | Сжатие, докачка после обрыва, экономия трафика | Может тормозить на миллионах мелких файлов | Использовать --whole-file для больших файлов, --bwlimit для ограничения скорости |
Синхронизация пользовательских данных (например, Nextcloud) | Гибко, можно исключать временные файлы | Нет версионирования, нет блокировок на запись | Использовать для бэкапов, не для live-синхронизации |
Типичные ошибки и как их избежать
- Забыли слэш в конце пути — получите вложенную папку вместо ожидаемой структуры
- Использовали
--delete
без dry-run — потеряли важные файлы на сервере - Синхронизировали с root-правами без нужды — риск испортить права и владельцев
- Не настроили SSH-ключи — каждый раз вводите пароль, автоматизация невозможна
- Не проверили права доступа на целевой папке — rsync завершится с ошибкой
Сравнение с альтернативами
Инструмент | Плюсы | Минусы | Когда использовать |
---|---|---|---|
rsync | Гибко, быстро, экономно по трафику, работает по SSH | Нет версионирования, не для live-синхронизации | Бэкапы, миграции, деплой, зеркалирование |
scp | Просто, встроено в SSH | Копирует всё целиком, нет инкрементальности | Разовые копирования небольших объёмов |
Unison | Двунаправленная синхронизация, разрешение конфликтов | Сложнее в настройке, медленнее на больших объёмах | Синхронизация между рабочими машинами |
Syncthing | Peer-to-peer, автоматическая синхронизация, web-интерфейс | Требует установки на обеих сторонах, не для серверов без GUI | Домашние и офисные сети, обмен файлами между ПК |
Rclone | Работает с облаками (S3, Google Drive и др.) | Не всегда сохраняет все атрибуты, сложнее синтаксис | Бэкапы в облако, синхронизация с S3 |
Официальная документация rsync: https://download.samba.org/pub/rsync/rsync.html
Фишки и нестандартные способы использования rsync
- Синхронизация через нестандартный порт SSH:
rsync -avz -e "ssh -p 2222" /local/dir/ user@host:/remote/dir/
- Ограничение скорости передачи (чтобы не забить канал):
rsync -avz --bwlimit=5000 /local/dir/ user@host:/remote/dir/
(5000 KB/s) - Резервное копирование с сохранением только последних N копий (через скрипт + rsync + hardlink):
Используй rsnapshot — это надстройка над rsync для ротации бэкапов. - Синхронизация между двумя удалёнными серверами (через локалку):
rsync -avz -e ssh user1@host1:/data/ user2@host2:/backup/
(требует ssh-ключей и доступа между серверами) - Сравнение директорий без копирования:
rsync -avnc /src/ /dst/
(покажет, что изменилось)
Автоматизация и скрипты: как rsync облегчает жизнь
Самое вкусное — rsync идеально ложится в автоматизацию. Его можно запускать из cron, интегрировать в CI/CD, использовать в скриптах для ежедневных бэкапов, деплоя, миграций. Пример простого скрипта для ежедневного бэкапа:
#!/bin/bash
rsync -az --delete /var/www/ [email protected]:/backups/www-$(date +%F)/
Добавь это в crontab -e
:
0 3 * * * /home/user/scripts/backup.sh
И всё, твой сайт будет бэкапиться каждую ночь в 3:00.
- Можно делать дифференциальные бэкапы (только изменения)
- Можно отправлять уведомления о результатах (через mail или Telegram-бота)
- Можно использовать в цепочках деплоя (например, после git pull — rsync на сервер)
Интересные факты о rsync
- Алгоритм rsync был придуман в 1996 году и до сих пор считается одним из самых эффективных для синхронизации данных
- rsync используется для зеркалирования репозиториев Linux-дистрибутивов по всему миру
- Многие облачные сервисы (например, Backblaze B2) поддерживают синтаксис rsync для загрузки данных
- rsync можно использовать для клонирования целых серверов (например, при миграции VPS)
Какие новые возможности открываются с rsync?
- Быстрая миграция между хостингами — не нужно ждать, пока зальётся весь сайт, только изменения!
- Гибкая автоматизация бэкапов — можно делать ежедневные, еженедельные, инкрементальные копии
- Экономия трафика — особенно актуально для VPS с лимитами
- Интеграция с CI/CD — автоматический деплой после коммита
- Скрипты для массового обновления серверов (например, раздача новых конфигов или статики на все ноды кластера)
Выводы и рекомендации
rsync — это must-have инструмент для любого, кто работает с серверами, хостингом, бэкапами или просто хочет держать свои данные под контролем. Он прост в освоении, гибок, надёжен и отлично масштабируется. Если тебе нужно быстро и безопасно синхронизировать файлы между локалкой и сервером, делать бэкапы, мигрировать сайты или автоматизировать деплой — rsync твой лучший друг.
- Используй rsync для регулярных бэкапов и миграций между VPS — заказать VPS
- Для крупных проектов и кластеров — выделенный сервер + rsync = идеальная связка
- Не забывай про SSH-ключи и автоматизацию через cron
- Тестируй команды с
--dry-run
перед запуском на боевом сервере - Изучай дополнительные опции (например,
--partial
,--progress
,--compress-level
) — они реально помогают
Если хочется ещё больше автоматизации — посмотри на rsnapshot или BorgBackup, но для большинства задач rsync — это быстрый, надёжный и проверенный временем выбор. Не бойся экспериментировать, автоматизируй всё, что можно, и пусть твои данные всегда будут под контролем!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.