linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Команды/cmd-rsync

kb/commands ── Команды ── beginner

rsync - инкрементальная синхронизация файлов

rsync копирует только изменённые блоки файлов локально или по SSH. `-avz` базовая комбинация (archive + verbose + compress). `--delete` зеркалирует. `--dry-run` обязателен перед первым запуском.

view as markdownaka: rsync, rsync-command, rsync-sync

Зачем rsync

Скопировать дерево файлов между машинами (или между каталогами на одной) с минимумом трафика и времени. Когда меняется один байт в гигабайтном файле - rsync передаст ~несколько килобайт служебных данных, не весь файл.

Сравнение:

УтилитаКогда
cp -aлокально, без сети
scpразовое копирование по SSH; не делит на блоки
rsyncмногократная синхронизация; SSH или daemon
`tarssh tar`
rcloneоблачные хранилища (S3, GCS, Dropbox)

Базовый синтаксис

rsync [OPTIONS] SRC [SRC]... DEST

Локально:

bash
rsync -av /home/user/src/ /backup/src/

По SSH (push):

bash
rsync -av /home/user/src/ user@host:/backup/src/

По SSH (pull):

bash
rsync -av user@host:/var/log/ ./logs/

Слэш в конце источника - КРИТИЧНО

/src/   - "содержимое /src" → копируется в DEST
/src    - "директория src сама" → создаётся DEST/src/

90% багов rsync - забытый или лишний слэш. Перед первым запуском всегда добавляй --dry-run.

-a - archive mode

Это сокращение для -rlptgoD:

  • -r recursive
  • -l сохранить symlinks как symlinks
  • -p сохранить permissions
  • -t сохранить mtime (без этого - rsync будет слать всё каждый раз)
  • -g сохранить group
  • -o сохранить owner (только под root)
  • -D спецфайлы (devices, sockets) - редко нужен

Без -t rsync определяет изменения по размеру, и при равных размерах пропускает - но это обманывает при правках одного байта в гигабайтнике без изменения размера. -t включай всегда.

Часто используемые опции

ОпцияЧто
-vverbose; -vv ещё подробнее; -q тишина
-zсжатие на лету (имеет смысл по сети, не локально)
-hразмеры в KiB/MiB
-P--partial --progress (показывать прогресс + не удалять недокачанное)
-n--dry-run
--deleteудалить в DEST то, чего нет в SRC (зеркало)
--exclude=PATTERNпропустить (можно много раз)
--exclude-from=FILEсписок паттернов из файла
--include=PATTERNпереопределить exclude
--bwlimit=10Mограничить ширину канала
-e sshиспользовать конкретную SSH-команду (порт, ключ)
--checksumсравнивать по содержимому, не по mtime+size
--inplaceписать в существующий файл (для huge fixed-size, БД)
--link-dest=DIRhard-link с предыдущего бэкапа (snapshot-style)

--delete, зеркало

bash
rsync -av --delete /src/ /mirror/

После запуска /mirror/ ИДЕНТИЧЕН /src/. Файлы которые есть в mirror но удалены из src - сотрутся. Поэтому всегда:

  1. Сначала --dry-run -v --delete
  2. Внимательно смотри список deleted
  3. Если ок - убирай -n

Особенно опасен в скриптах с переменными:

bash
# ОПАСНО если SRC=""
rsync -av --delete "$SRC/" /backup/    # удалит весь /backup

Exclude

bash
rsync -av --exclude='node_modules' --exclude='.git' /src/ /backup/
rsync -av --exclude-from=.rsync-ignore /src/ /backup/

Паттерны - shell-glob, не regex. ** - matches много уровней. Trailing / - только директория. Полное правило в man rsync под "FILTER RULES".

SSH-нюансы

bash
rsync -av -e "ssh -p 2222 -i ~/.ssh/key" /src/ user@host:/dst/

Если SSH спрашивает пароль каждый раз - используй [[ssh|ssh-agent]] или ключ без passphrase. Для cron'а ключ обязательно.

Скорость: -z тратит CPU на сжатие. Для уже сжатых данных (jpg, mp4, zip) -z вреден - выключай.

Snapshot-style бэкапы

Магия --link-dest:

bash
YESTERDAY=/backup/2026-05-01
TODAY=/backup/2026-05-02
rsync -av --delete --link-dest="$YESTERDAY" /data/ "$TODAY/"

Неизменённые файлы будут hard-link'ами на вчерашние - занимают 0 диска. Каждая папка 2026-MM-DD выглядит как полная копия. Это базовый паттерн утилит вроде rsnapshot и Time Machine.

Когда удаляешь старые snapshot'ы - hard-link'и сами разрешаются, место освобождается естественно.

Когда что-то пошло не так

  • Скопировались чужие правa - запускал не от root, -o/-g не сработали. Используй --no-perms --no-owner --no-group или sudo.
  • rsync шлёт ВСЁ заново каждый раз - mtime не сохраняется (нет -t) или ФС назначения не поддерживает время (FAT32, древние SMB).
  • Permission denied (publickey) - SSH-ключ не прокинут в -e или у юзера на той стороне нет доступа.
  • Скорость уперлась в 10 MB/s по 1Gbit-линку - -z забивает CPU. Убери для уже-сжатых данных.
  • Большие файлы рвутся при разрыве сети - добавь -P (--partial) чтобы при следующем запуске докачать хвост.
  • --delete снёс файлы которые нужны - не было --dry-run. На важных таргетах используй --backup --backup-dir=...
  • rsync error: some files/attrs were not transferred (8) - чаще всего проблема с extended-attributes/ACL; добавь -X -A или исключи файлы.

Альтернативы

  • rclone - rsync-style CLI, но для S3/GCS/Dropbox/etc
  • bbcp, bbftp - научные трансферы на 10+Gbit
  • unison - двусторонняя синхронизация (rsync только односторонняя)
  • borg/restic - dedup + шифрование + snapshot'ы; rsync ради бэкапа проигрывает на больших объёмах

§ команды

bash
rsync -avzP /src/ user@host:/dst/

Базовая синхронизация с прогрессом и сжатием

bash
rsync -avn --delete /src/ /backup/

Dry-run перед зеркалом - покажет что будет добавлено и удалено

bash
rsync -av --exclude='*.log' --exclude='node_modules' /app/ /backup/app/

Бэкап без мусора - типичный фильтр для проектов

bash
rsync -av --link-dest=/backup/yesterday /data/ /backup/today/

Snapshot-бэкап с hard-link'ами - почти бесплатный по диску

bash
rsync -av --bwlimit=20M /src/ user@host:/dst/

Ограничить трафик до 20 MiB/s - не забивать аплинк в рабочие часы

bash
rsync -av -e 'ssh -p 2222' /src/ user@host:/dst/

SSH на нестандартном порту через -e

bash
rsync -avc /src/ /dst/

Сравнить по содержимому (checksum) - дороже, но честнее когда mtime врёт

§ см. также

  • cmd-findfind - поиск файлов по предикатам`find` обходит дерево каталогов и применяет предикаты (имя, тип, время, размер, права). Действия: `-print` (по умолчанию), `-delete`, `-exec`, `| xargs`.
  • sshSSH - secure shellSSH - зашифрованный канал к удалённому хосту: shell, копирование файлов, port-forwarding. Стандартный порт 22, аутентификация по ключам или паролю.
  • ftp-sftpFTP и SFTP - передача файловFTP, старый протокол с control + data соединениями (active/passive modes), без шифрования. SFTP, подсистема SSH, ничего общего с FTP кроме имени. Сегодня, SFTP или [[cmd-rsync|rsync]].
  • nfsNFS - сетевая файловая системаNFS - сетевая ФС от Sun. v3 - stateless, v4.1+ - stateful с делегациями и pNFS. /etc/exports на сервере, mount -t nfs на клиенте. root_squash, sync/async, lock manager - три главные опции.
  • mount-and-fstabmount и /etc/fstab - подключение ФС`mount` подключает блочное устройство или ФС к точке монтирования в дереве. `/etc/fstab` - список того что монтировать при загрузке.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки