Резервное копирование данных между серверами
Это руководство объясняет, как копировать и создавать резервные копии данных между серверами Linux с помощью rsync, а также как выполнять низкоуровневое клонирование дисков с помощью dd.
Перед началом работы
Команды, приведённые в этом руководстве, выполняются на исходном сервере — сервере, с которого копируются данные. Целевой сервер должен быть доступен по SSH, а указанный в команде пользователь должен иметь права на чтение исходного пути и запись в целевой путь.
Чтобы проверить доступ по SSH к целевому серверу перед созданием резервной копии:
ssh user@destination_host
Замените user на имя удалённого пользователя, а destination_host на IP-адрес или имя хоста целевого сервера.
Для автоматических или запланированных резервных копий настройте аутентификацию SSH по ключу вместо использования паролей.
Копирование каталога на удалённый сервер
Обратите внимание, что завершающий слеш в исходном пути влияет на поведение rsync: /source/ копирует содержимое каталога, а /source копирует сам каталог.
Всегда используйте --dry-run перед выполнением команд с --delete, чтобы избежать случайной потери данных. Чтобы предварительно посмотреть, какие данные будут переданы, не внося никаких изменений:
rsync -a --delete --dry-run -e ssh /path/to/source/ user@destination_host:/path/to/backup/
После проверки вывода выполните ту же команду без --dry-run. Добавьте -P, чтобы можно было возобновить прерванную передачу и видеть её прогресс:
rsync -a --delete -e ssh -P /path/to/source/ user@destination_host:/path/to/backup/
Опция -a сохраняет права доступа, временные метки и символические ссылки. Опция --delete обеспечивает точное зеркалирование источника в назначение, удаляя файлы, которых нет в источнике. Добавьте -v, чтобы отображать подробную информацию.
Опция --delete удаляет в целевом каталоге файлы, которых нет в источнике. Не используйте её, если в целевом каталоге находятся файлы, которые должны храниться независимо от источника.
Копирование большинства системных файлов
Чтобы скопировать большую часть файловой системы, исключив виртуальные и временные каталоги:
rsync -aAXv --delete --one-file-system --numeric-ids \ --exclude={/dev/,/proc/,/sys/,/tmp/,/run/,/mnt/,/media/,/lost+found,/swapfi le} \ / user@destination_host:/path/to/backup/
Используемые здесь опции: -a сохраняет права доступа, временные метки, символические ссылки и выполняет рекурсивное копирование; -A сохраняет ACL; -X сохраняет расширенные атрибуты; -v отображает подробную информацию. Опция -H для жёстких ссылок намеренно не используется: системные жёсткие ссылки не обязательно реплицировать в удалённой резервной копии, а их сохранение увеличивает время и сложность передачи. Опция --one-file-system не позволяет rsync переходить в другие смонтированные файловые системы. Опция --numeric-ids сохраняет значения UID и GID без сопоставления их с именами пользователей, что важно, когда на исходном и целевом серверах используются разные конфигурации пользователей.
В большинстве исключённых путей используется завершающий слеш, чтобы исключить содержимое каталога, сохранив сам каталог. В /lost+found завершающего слеша нет, поскольку необходимо исключить весь каталог, а не только его содержимое. Это же правило относится к исходному пути: /source/ копирует содержимое каталога, а /source копирует сам каталог.
Этот метод не создаёт загрузочный образ системы и не должен использоваться в качестве полной замены резервному копированию системы. Для создания согласованных резервных копий работающих систем рекомендуется перед выполнением команды остановить критические службы или использовать снимки файловой системы, например снимки LVM.
Полное клонирование каталога с помощью rsync
Чтобы выполнить полное клонирование дерева каталогов с сохранением жёстких ссылок, ACL и расширенных атрибутов:
rsync -aAHXv /source/dir/ user@destination_host:/destination/dir/
Используемые здесь опции: -a сохраняет права доступа, временные метки, символические ссылки и выполняет рекурсивное копирование; -A сохраняет ACL; -H сохраняет жёсткие ссылки, что важно для точного клонирования каталога; -X сохраняет расширенные атрибуты; -v отображает подробную информацию.
Клонирование диска с помощью dd
Чтобы клонировать весь диск на другой диск того же сервера:
dd if=/dev/sdX of=/dev/sdY bs=1M conv=noerror,sync status=progress
Замените sdX на исходный диск, а sdY на целевой диск. Опции conv=noerror,sync позволяют продолжить копирование после ошибок чтения, заполняя повреждённые блоки нулями. Если целостность данных критически важна, не используйте эти опции, чтобы dd остановился при первой ошибке, а не заменял повреждённые блоки нулями без предупреждения.
Чтобы клонировать диск на удалённый сервер через SSH:
dd if=/dev/sdX bs=1M status=progress | ssh user@destination_host 'dd of=/dev/sdY bs=1M'
В качестве назначения также можно использовать путь к файлу вместо блочного устройства.
dd записывает непосредственно на целевое устройство или в целевой файл без запроса подтверждения. Перед выполнением команды внимательно проверьте источник и назначение. На работающих системах по возможности размонтируйте все разделы исходного диска или перемонтируйте их в режиме только для чтения. Для создания согласованных резервных копий смонтированных файловых систем используйте снимки LVM или загрузитесь из среды восстановления.
Проверка резервной копии
После завершения передачи подключитесь к целевому серверу и проверьте размер резервной копии и её базовую структуру:
ssh user@destination_host du -sh /path/to/backup/ ls /path/to/backup/
Для тщательной проверки целостности выполните rsync с параметрами --checksum и --dry-run. Это сравнит содержимое файлов, а не временные метки, и сообщит о любых различиях:
rsync -av --checksum --dry-run /path/to/source/ user@destination_host:/path/to/backup/
Обратите внимание, что для больших объёмов данных такая проверка может занять значительно больше времени, чем обычный запуск rsync.