Шпаргалка по rsync: как правильно переносить файлы между серверами

Рано или поздно перед каждым, кто работает с серверами, встаёт задача: перенести файлы с одной машины на другую. Скопировать сайт, забрать бэкап, перекинуть папку с фото. Казалось бы, что тут сложного? Но если делать это неправильным инструментом, можно потратить часы, сжечь трафик и в итоге получить битые данные.

Сегодня разберёмся, что такое 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.

👁️ 26

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

три × 5 =

root@phoenix901:~# connect
[×]

Получай дайджест раз в неделю.
Без спама.