hostprofi.ru
Подобрать хостинг
Термин

RSYNC

краткое определение

rsync — инструмент для резервного копирования и синхронизации файлов, передающий только изменённые блоки данных. Работает по SSH, поддерживает инкрементальные бэкапы через hard links.

rsync — стандартный инструмент для резервного копирования и синхронизации файлов в Linux. Алгоритм rsync вычисляет контрольные суммы блоков файла и передаёт только изменённые блоки, а не файлы целиком. Это делает rsync значительно быстрее обычного копирования для больших наборов данных.

Как работает rsync

rsync сравнивает файлы источника и назначения по размеру и времени изменения (быстро) или по MD4-контрольным суммам 700-байтных блоков (точно, через --checksum). Передаётся только разница — delta. Для сжатия при передаче используется флаг -z. Транспорт — SSH по умолчанию, или собственный протокол rsync (порт 873) для rsync-серверов.

Основные флаги

# Синхронизация с удалённым сервером
rsync -avz /local/path/ user@server:/remote/path/

# С удалением устаревших файлов
rsync -avz --delete /local/ user@server:/remote/

# Dry run — показать без выполнения
rsync -avzn /local/ user@server:/remote/

# Исключить файлы
rsync -avz --exclude='*.log' --exclude='cache/' /local/ user@server:/remote/
-a (archive)
рекурсивно, сохраняет права, временные метки, symlinks.
-v (verbose)
подробный вывод.
-z (compress)
сжатие данных при передаче.
--delete
удалять в назначении файлы, которых нет в источнике.

Инкрементальные бэкапы через rsync

rsync + hard links — классика инкрементального резервного копирования:

rsync -avz --link-dest=/backups/latest /data/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest

Каждый ежедневный бэкап занимает только место для изменений — неизменённые файлы — hard links на предыдущую копию. 30 ежедневных бэкапов занимают чуть больше одного полного.

История

rsync создан Эндрю Тридгеллом (Andrew Tridgell, автором Samba) и Полом Маккерасом (Paul Mackerras) в 1996 году в Australian National University. Алгоритм rsync описан в диссертации Тридгелла 1999 года. rsync daemon поддерживает rsync-протокол (порт 873) для публичных rsync-серверов (зеркала дистрибутивов Linux).

На что обращать внимание

Trailing slash имеет значение: rsync src/ dest/ копирует содержимое src, rsync src dest/ — создаёт src внутри dest. Для бэкапа баз данных rsync не подходит — нужен mysqldump/pg_dump сначала, затем rsync дампа. Порты 22 (SSH) должен быть доступен для удалённой синхронизации. BorgBackup — более современная альтернатива с дедупликацией и шифрованием.

Алгоритм дельта-синхронизации

rsync делит файл на блоки по 512-700 байт и вычисляет контрольные суммы. Если блок на целевом хосте совпадает по сумме — он не передаётся. При изменении 1% файла по сети уходит ~1% данных, а не весь файл. Это критично для бекапов баз данных размером в несколько гигабайт.

Флаг --link-dest создаёт инкрементальные бекапы с hard links: каждый ежедневный снимок занимает только размер изменений, а не полный объём данных. 30 дней бекапов занимают немного больше одного полного снимка.

Типичные команды

Синхронизация папки на удалённый сервер:

rsync -avz --delete /var/www/site/ user@server:/var/www/site/

Флаг -a сохраняет права, владельца и временные метки. --delete удаляет на приёмнике файлы, удалённые на источнике. -z сжимает данные при передаче.

rsync работает поверх SSH по умолчанию. Для внутренней сети можно использовать rsync daemon (порт 873) без шифрования — быстрее, но без аутентификации по ключу. Пара rsync + cron — стандартное решение для ежедневных бекапов на VPS.

Другие термины