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

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

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

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

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

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

  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. Проверьте сервисы в течение 3 рабочих дней и при необходимости устраните замечания.

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

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

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

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

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

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

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

  9. Проверьте работу сервисов еще 3 рабочих дня.

  10. Если все работает корректно, исходный сервер можно отключать.