Рано или поздно перед каждым, кто работает с серверами, встаёт задача: перенести файлы с одной машины на другую. Скопировать сайт, забрать бэкап, перекинуть папку с фото. Казалось бы, что тут сложного? Но если делать это неправильным инструментом, можно потратить часы, сжечь трафик и в итоге получить битые данные.
Сегодня разберёмся, что такое rsync, зачем он нужен и почему опытные админы не представляют без него свою работу. Объясню простыми словами, чтобы было понятно и новичку, и тому, кто уже не первый год в терминале.
Что такое rsync и зачем он нужен
rsync (произносится «рсинк», от английского remote synchronization — удалённая синхронизация) — это программа для копирования и синхронизации файлов. Она умеет работать и внутри одного сервера, и между серверами по сети.
Главная фишка rsync — дельта-алгоритм. Звучит страшно, но на деле всё просто. Представьте, что вам нужно перенести папку с сайтом с одного сервера на другой. Первый раз rsync скопирует всё целиком. А вот когда вы запустите его во второй раз, он уже не будет тащить всё заново. Он посмотрит, какие файлы изменились с прошлого раза, и скопирует только их. А внутри больших файлов — только те куски, которые поменялись. Это как в облачных хранилищах: вы правите один абзац в документе, а на сервер уходит не весь документ, а только изменённый кусок.
Вторая суперспособность — докачка после обрыва. Если связь оборвётся на середине передачи, rsync не начнёт всё сначала, как другие программы. Он сохранит то, что успел передать, и при следующем запуске продолжит с места разрыва. На слабых каналах или при передаче больших архивов это экономит часы.
И третье: rsync умеет сохранять права доступа, владельцев файлов и время изменения. Для сайтов и серверов это критично — иначе после переноса может всё сломаться.
Чем rsync лучше scp
Самая популярная замена rsync — это scp. Её знают все новички, потому что она простая. Но простота обманчива. Вот сравнение на пальцах:
| Что сравниваем | scp | rsync |
|---|---|---|
| Как копирует | Всё подряд, каждый раз заново | Только то, что изменилось |
| Обрыв связи | Начинает всё сначала | Докачивает с места обрыва |
| Права и владельцы | Часто теряются | Сохраняются флагом -a |
| Исключить лишнее (логи, кэш) | Не умеет | Умеет, флаг —exclude |
| Прогресс передачи | Нет | Есть, флаг -P |
| Проверить заранее, что будет сделано | Не умеет | Умеет, флаг —dry-run |
Вывод простой: scp годится, когда нужно разово перекинуть пару файлов и плевать на детали. Всё, что серьёзнее — бэкапы, перенос сайтов, регулярная синхронизация — это работа для rsync.
Золотой набор флагов: комбинация -avzP
В повседневной практике rsync без параметров почти не запускают. Классический блок — -avzP. Разберём, что делает каждая буква:
- a (Archive, архив) — самый важный флаг. Включает рекурсивный обход папок (то есть копирует и вложенные папки) и сохраняет всё важное: права доступа, владельцев, группы, время изменения файлов и символические ссылки. Если не знаете, какой флаг нужен — берите a. Нюанс: сюда не входят ACL, расширенные атрибуты и жёсткие ссылки — если они нужны, добавляйте отдельные флаги -A и -X.
- v (Verbose, подробный) — показывает имена файлов, которые копируются прямо в консоли. Полезно, чтобы видеть, что процесс жив и что именно он делает.
- z (Compress, сжимать) — сжимает данные на лету перед отправкой по сети, а на той стороне распаковывает обратно. Экономит трафик. Полезно на медленных каналах. На быстрых — можно опустить, там сжатие почти не даёт выигрыша.
- P (Progress + Partial, прогресс и докачка) — две фичи сразу: показывает скорость и оставшееся время, и разрешает докачивать файлы после обрыва связи. Всегда держите его включённым.
Важный нюанс: следите за слэшем
Одна из самых частых ошибок у новичков — слэш в конце пути. От него зависит, что именно скопируется. Смотрите внимательно:
1. Слэша нет (/var/www/html): rsync скопирует саму папку html вместе со всем содержимым. На выходе получится /backup/html/.
2. Слэш есть (/var/www/html/): rsync скопирует только содержимое папки html, а самой папки не создаст. Файлы лягут прямо в /backup/.
Как запомнить: слэш на конце источника означает «скопируй то, что внутри папки», без слэша — «скопируй саму папку». Ошибётесь — получите лишний уровень вложенности.
Практические сценарии
Сценарий 1: локальная резервная копия. Копируем директорию на другой диск (например, на бэкап-накопитель) с сохранением прав и прогрессом:
rsync -avzP /var/www/html/ /mnt/backup_drive/html/
Сценарий 2: отправка на удалённый сервер по SSH. Если SSH висит на нестандартном порту (а держать 22-й порт открытым наружу — плохая привычка), параметры подключения передаются через -e:
rsync -avzP -e "ssh -p 2222" /var/www/html/ user@185.246.67.31:/var/www/html/
Сценарий 3: стянуть данные с удалённого сервера к себе. Классика для бэкапа: держим копию сайта у себя. Направление меняется — источником становится удалённый сервер, целью локальная папка:
rsync -avzP -e "ssh -p 2222" user@185.246.67.31:/var/www/html/ /mnt/backup_drive/site_backup/
Сценарий 4: точная копия (флаг —delete). По умолчанию rsync только добавляет новые файлы и обновляет изменившиеся. А те, что вы удалили на источнике, на копии останутся лежать. Флаг —delete убирает на целевой стороне всё, чего больше нет на источнике — получается зеркало один в один:
rsync -avzP --delete /var/www/html/ /mnt/backup_drive/html/
Внимание: —delete удаляет безвозвратно. Одна опечатка в пути — и снесёте лишнее. Поэтому первое правило: сначала запустите команду с —dry-run, посмотрите список того, что rsync собирается удалить, и только потом запускайте боевую версию.
Шпаргалка по полезным опциям
| Параметр / флаг | Что делает в системе | Инженерное применение |
|---|---|---|
| —exclude=»*.log» | Исключение файлов по маске | Не переносить логи, кэш и прочий мусор. Можно указывать несколько раз для разных масок. |
| —bwlimit=5000 | Ограничение скорости (в КБ/с) | Не забивать канал целиком, если копируете данные на живом проде в рабочее время. |
| -c (—checksum) | Проверка по контрольным суммам | По умолчанию rsync сравнивает файлы по размеру и времени изменения — быстро, но иногда пропускает файлы с одинаковым размером и датой, но разным содержимым. Флаг заставляет сверять контрольные суммы содержимого каждого файла. Медленнее, но точнее. |
| —dry-run | Режим симуляции | Показывает, что будет изменено или удалено, ничего не записывая на диск. Обязателен перед —delete. |
| -h (—human-readable) | Человекочитаемые числа | Выводит размеры и скорости в удобном виде: 1.5G вместо 1572864K. |
| -A и -X | ACL и расширенные атрибуты | Флаг -a их не захватывает. Если нужны сложные права (веб-сервер, Nextcloud) — добавляйте отдельно. |
Частые грабли
- Слэш. Забыли слэш на источнике — получили вложенную папку в папке.
- —delete без —dry-run — лотерея. Сначала симуляция, потом боевой запуск.
- Кастомный порт SSH. Без -e «ssh -p ПОРТ» получите connection refused.
- Направление. rsync копирует слева направо: источник > цель. Перепутаете местами — затрёте исходник обратным копированием.
- Права. Без -a права и владельцы на цели будут текущего пользователя, а не исходные. Для бэкапов сайтов это почти всегда не то, что нужно.
Заключение
rsync — стандартный инструмент для переноса данных и бэкапов: копирует только изменения, докачивает после обрывов и сохраняет права и владельцев. Для разовой передачи пары файлов можно обойтись и scp, но всё серьёзное — только rsync. Главное: проверяйте слэш, не забывайте -e для нестандартных портов и не запускайте —delete без —dry-run.
