Резервное копирование Rsync в Linux: синхронизация папок по SSH
Почему обычное копирование scp или cp уступает Rsync?
При переносе папок с тысячами файлов или регулярном создании бэкапов утилита scp каждый раз копирует все данные заново. Если процесс прервется на 90%, его придется запускать с нуля. Утилита Rsync использует умный алгоритм дельта-копирования: она сканирует исходную и целевую папки и передает только измененные части файлов, экономя часы времени и гигабайты интернет-трафика.
Ключевые преимущества утилиты Rsync:
| Функция | Как это помогает |
|---|---|
| Инкрементность | Передаются только новые и изменившиеся файлы. |
| Сжатие на лету (-z) | Данные сжимаются перед отправкой по сети, ускоряя передачу. |
| Сохранение прав (-a) | Полностью сохраняются владельцы, группы, права доступа и таймстампы файлов. |
| Возобновление | При обрыве связи передача продолжается с места остановки. |
Практические команды работы с Rsync
1. Синхронизация локальных папок на одном сервере
rsync -avzh /var/www/my_site/ /backup/my_site/Важнейшее правило слэша в конце пути:
• Если указать/var/www/my_site/(со слэшем) — скопируется содержимое папки.
• Если указать/var/www/my_site(без слэша) — скопируется сама папка my_site целиком.2. Копирование папки на удаленный сервер по SSH
Отправляем локальную папку на удаленный сервер:
rsync -avz -e "ssh -p 22" /var/www/site/ user@192.168.1.50:/backup/site/3. Скачивание папки с удаленного сервера к себе
rsync -avz -e "ssh -p 22" user@192.168.1.50:/var/www/site/ /local_backup/site/4. Точная зеркальная копия с удалением лишнего (--delete)
Флаг
--deleteудаляет из папки бэкапа те файлы, которые вы уже удалили в исходной папке:rsync -avz --delete /var/www/site/ /backup/site/
Частые вопросы (FAQ)
Что означают флаги -avz?
-a (archive) включает сохранение прав, рекурсию и симлинки; -v (verbose) выводит подробный список копируемых файлов; -z (compress) сжимает файлы при передаче по сети.
Как протестировать команду rsync без реального копирования и риска что-то удалить?
Добавьте флаг пробного запуска --dry-run (-n): rsync -avzn --delete source/ target/. Программа покажет список изменений на экране, не трогая диск.
Как увидеть индикатор прогресса и скорость передачи больших файлов?
Используйте флаг --progress или общий ключ -P (сочетание progress и partial): rsync -avzP source/ target/.
Как исключить определенные папки из синхронизации (кэш, node_modules)?
Используйте ключ --exclude: rsync -avz --exclude='node_modules' --exclude='.git' /src/ /dst/.