rsync — это утилита для Unix-подобных систем. Она используется для эффективного копирования и синхронизации файлов и директорий.
Преимущества
— Работа по сети. rsync умеет копировать файлы между удаленными хостами поверх SSH, обеспечивая безопасность передаваемых данных;
— сжатие трафика. Утилита поддерживает сжатие данных, что значительно ускоряет передачу больших объемов информации, особенно актуально для миграции проектов;
— дельта-копирование. Копирует только изменившиеся части файлов, а не целые файлы. Это позволяет безопасно прерывать и докачивать данные при разрыве соединения. А также использовать повторный запуск команды для синхронизации оставшихся или измененных данных после первичного копирования;
— сохранение атрибутов. Позволяет исключать ненужные директории, сохранять права доступа, временные метки и другие атрибуты файлов.
Базовые сценарии использования
Локальное копирование
rsync может использоваться как более продвинутая замена cp, особенно когда нужно скопировать большой каталог с выводом прогресса или пропуском уже существующих файлов.
# Простое копирование папки
rsync -av /source/directory/ /backup/directory/
Ключ -a (archive) сохраняет права, владельцев и symlink'и. Ключ -v (verbose) показывает подробный вывод.
Копирование по сети (SSH)
Для миграции данных между серверами используется передача по SSH. Это безопасно и не требует поднятия дополнительных демонов.
Отправка файлов с локального сервера на удаленный:
rsync -avz /local/path/ user@remote_ip:/remote/path/
Ключ -z включает сжатие данных при передаче.
Загрузка файлов с удаленного сервера на локальный:
rsync -avz user@remote_ip:/remote/path/ /local/path/
Миграция данных между серверами
Для переноса данных с исходного сервера (src) на целевой сервер (dest) в Рег.облаке используется следующий подход.
Шаг 1. Подготовка к миграции
Убедитесь, что на целевом сервере запущен SSH и есть достаточно места для размещения данных.
Шаг 2. Запуск копирования
Для переноса всех данных с root-раздела исходного сервера (кроме системных директорий) воспользуйтесь командой:
rsync -aAXvP /* root@dest_ip:/mnt/ --exclude={"/dev/*","/proc/*","/sys/*","/mnt/*"}
Расшифровка ключей
-a — режим архива (рекурсивное копирование с сохранением всех атрибутов);
-A — сохранить списки контроля доступа (ACL);
-X — сохранить расширенные атрибуты файлов (xattrs);
-v — подробный вывод (verbose);
-P — параметр, который объединяет —progress (показывать прогресс по каждому файлу) и —partial (оставлять частично перенесенные файлы, что позволяет докачать их при повторном запуске);
--exclude — указываем, какие папки нужно исключить из копирования (виртуальные ФС и точка монтирования, куда копируем).
Важные нюансы
Горячий и холодный перенос
Описанный выше способ (с запуском на работающей системе) называется горячим переносом. Он позволяет минимизировать простой, но некоторые данные могут не попасть в копию — файловые кэши, незакоммиченные транзакции БД, буферы ввода-вывода.
Чтобы гарантировать целостность данных, после основного переноса рекомендуется:
-
1
Остановить сервисы на исходном сервере (веб-сервер, СУБД, приложения), не выключая саму ОС:
#Пример остановки сервисов systemctl stop nginx systemctl stop apache2 systemctl stop mysql -
2
Запустить финальную синхронизацию той же командой rsync:
rsync -aAXvP /* root@dest_ip:/mnt/ --exclude={"/dev/*","/proc/*","/sys/*","/mnt/*"}
На этом этапе новые данные уже не поступают, и rsync перенесет всё, что изменилось или не успело записаться на диск при первом проходе. Такой подход называют холодным переносом — он дает 100% консистентную копию системы.
Работа в Screen/Tmux
Копирование больших объемов данных может занять часы. Чтобы процесс не прервался при закрытии SSH-сессии, запустите команду внутри сессии screen или tmux.
# Создать сессию screen
screen -S migration
# Запустить rsync
# Отключиться от сессии: Ctrl + A, затем D
Копирование скрытых файлов
При использовании в исходном пути звездочки (/*) оболочка (bash) может не подхватить файлы, начинающиеся с точки. Чтобы решить это, перед запуском rsync измените поведение bash с помощью dotglob.
# Включить захват скрытых файлов
shopt -s dotglob
# Запустить команду rsync (как указано выше)
# После завершения копирования вернуть стандартное поведение
shopt -u dotglob
Синхронизация изменений
После того как основная масса данных скопирована, на исходном сервере могут продолжаться изменения (например, пишутся новые файлы).
Чтобы перенести только изменившиеся данные, просто повторно запустите ту же команду rsync. Благодаря алгоритму дельта-копирования утилита быстро просканирует директории и передаст только отличающиеся части файлов.
После завершения синхронизации проверьте целостность критически важных данных на целевом сервере (например, базы данных, конфигурации сайтов).