Перейти к основному содержимому

Перенести данные Linux-сервера на облачный сервер Selectel с помощью rsync

Вы можете перенести данные нагруженного Linux-сервера на облачный сервер Selectel с помощью утилиты rsync.

rsync копирует файлы, а не диск целиком. Это позволяет избежать переноса скрытых повреждений, которые возможны при побайтовом копировании диска с активной записью. Подробнее о переносе данных с помощью копирования диска в инструкции Перенести данные Linux-сервера на облачный сервер Selectel с помощью dd.

Перенос данных с помощью утилиты rsync подходит, когда размеры или разметка дисков на старом и новом серверах отличаются. Повторный запуск rsync передает только изменившиеся файлы, поэтому финальная синхронизация перед переключением между серверами занимает немного времени.

Как устроена миграция

На новый сервер устанавливается ОС той же версии, что и на исходном сервере. На установленную ОС копируются файлы исходного сервера. Загрузчик, fstab и сетевые настройки облачного сервера можно использовать, как на исходном сервере. Простой сервисов возникает только во время финальной синхронизации и переключения между серверами.

Перенести данные

  1. Создайте облачный сервер.

  2. Подготовьте данные для переноса.

  3. Перенесите данные.

  4. Проверьте и переключите сервисы.

1. Создать облачный сервер

Используйте инструкцию Создать облачный сервер. В качестве источника выберите ОС той же версии, что и на исходном сервере.

2. Подготовить данные для переноса

  1. Посмотрите версию ОС и разметку дисков исходного сервера:

    cat /etc/os-release
    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT
    df -h
  2. Сделайте резервную копию данных и баз данных на исходном сервере.

  3. Сохраните список сервисов и открытых портов, чтобы потом сравнить их с новым сервером:

    systemctl list-units --type=service --state=running > services-before.txt
    ss -tulpn > ports-before.txt
  4. За сутки до переключения снизьте TTL DNS-записей до 300 секунд.

  5. Проверьте, что с облачного сервера есть SSH-доступ к исходному с правами root.

3. Перенесите данные с помощью rsync

warning

Если на исходном сервере есть СУБД, мы не рекомендуем переносить данные, пока она работает. В процессе переноса данных СУБД продолжит операции записи в свои файлы, из-за чего часть данных на новом сервере окажется несогласованной — база не запустится или будет повреждена. Перед запуском rsync остановите СУБД на время копирования или перенесите базы данных отдельно — с помощью дампа или репликации.

  1. Загрузите облачный сервер в режиме Rescue.

  2. Подключитесь к серверу в режиме Rescue.

  3. Если каталоги /boot или другие каталоги вынесены в отдельные разделы, смонтируйте их в раздел /mnt.

  4. Зайдите в окружение установленной ОС — chroot:

mount /dev/sda2 /mnt
for d in dev proc sys run; do mount --bind /$d /mnt/$d; done
chroot /mnt /bin/bash
  1. Скопируйте данные с исходного сервера с помощью rsync:

    rsync -aAXHxvzh --numeric-ids --progress --log-file=/root/rsync.log \
    --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/etc/fstab","/boot/*"} \
    root@SOURCE_IP:/ /

    Здесь:

    • -a — сохраняет права, владельцев и даты;

    • -A и -X — ACL и расширенные атрибуты;

    • -H — жесткие ссылки;

    • -x — ограничение на выход за пределы одной файловой системы;

    • --numeric-ids — сохраняет числовые UID и GID;

    • --excludeВ — исключения, которые содержат системные каталоги, а также загрузчик и fstab нового сервера. Чтобы оставить сетевые настройки нового сервера, добавьте в исключения файлы сети:

      • для Debian и Ubuntu — /etc/network/interfaces и /etc/netplan/*;
      • для RHEL-подобных ОС (CentOS, AlmaLinux, Rocky) — /etc/sysconfig/* или только /etc/sysconfig/network-scripts/*.
  2. Выйдите из chroot и перезагрузите сервер в обычном режиме:

    exit
    reboot
  3. Сравните сервисы и порты с сохраненными на этапе подготовки данных на шаге 3.

  4. Перенастройте на новый IP сервисы, привязанные к старому IP:

    grep -rl "OLD_IP" /etc

4. Проверить и переключить сервисы

к сведению

Во время финальной синхронизации данных и переключения между серверами возникает простой сервисов. Мы рекомендуем синхронизировать данные и переключать сервисы в часы минимальной нагрузки.

  1. Проверьте работу сервисов на новом сервере. Для этого добавьте на своем компьютере в файл hosts запись с новым IP. Это позволит вам подключаться к сервисам на новом сервере, запросы пользователей продолжат направляться на исходный сервер:

    NEW_IP example.com www.example.com

    В Linux и macOS файл hosts расположен по пути — /etc/hosts, в Windows — C:\Windows\System32\drivers\etc\hosts.

  2. Если сервисы обращаются к своему домену, добавьте такую же запись в файл hosts на новом сервере.

  3. Опционально: при необходимости исправьте ошибки и повторите шаг 1.

  4. Протестируйте сервисы в течение трех рабочих дней и при необходимости устраните замечания.

  5. Чтобы синхронизировать измененные данные, остановите на исходном сервере сервисы, которые меняют данные.

  6. Повторно скопируйте данные с исходного сервера с помощью rsync:

    rsync -aAXHvz --numeric-ids --delete root@SOURCE_IP:/var/www/ /var/www/

    Здесь --delete — флаг для удаления файлов на новом сервере, которых уже нет на исходном.

    Будут скопированы только изменившиеся файлы.

  7. Перенесите базы данных свежим дампом или дождитесь, пока реплика синхронизируется с исходным сервером.

  8. Переключите DNS-записи на новый IP.

  9. Последите за работой сервисов еще три рабочих дня. Если сервисы работают штатно, перенос данных успешно завершен.

  10. Отключите исходный сервер.