Перенести данные Linux-сервера на облачный сервер Selectel с помощью dd
Вы можете перенести Linux-сервер на облачный сервер Selectel с помощью утилиты dd.
Утилита dd копирует содержимое диска целиком вместе с операционной системой, настройками и данными.
Во время копирования диски и сетевой канал будут полностью загружены.
После переноса достаточно обновить параметры, которые зависят от оборудования и сети: идентификаторы разделов, сетевые настройки и IP-адреса в конфигурации сервисов.
Перенести данные можно двумя способами:
- с остановкой исходного сервера — оба сервера загружаются в режим Rescue, данные во время копирования не меняются, копия получается полностью согласованной. Работы можно провести ночью или в выходные;
- без остановки исходного сервера — исходный сервер продолжает работать, а базы данных и активно меняющиеся файлы переносятся отдельно после копирования диска.
Если на исходном сервере идет интенсивная запись на диск, мы рекомендуем перенести данные Linux-сервера на облачный сервер Selectel с помощью rsync.
Чтобы перенести данные:
- Создайте облачный сервер.
- Подготовьте Linux-сервер.
- Перенесите данные с помощью утилиты dd.
- Проверьте и переключите сервисы.
1. Создать облачный сервер
Используйте инструкцию Создать облачный сервер. Размер диска нового сервера должен быть не меньше исходного.
2. Подготовить Linux-сервер
-
Оцените время копирования. Для этого разделите объем диска сервера на скорость канала между серверами. Скорость канала можно измерить утилитой
iperf3. Например, диск 500 ГБ при 100 МБ/с копируется около полутора часов. -
Сделайте резервную копию данных и баз на исходном сервере.
-
Сохраните список запущенных сервисов и открытых портов на исходном сервере, чтобы сравнить список с новым сервером:
systemctl list-units --type=service --state=running > <service_file_name>.txtss -tulpn > <ports_file_name>.txtУкажите:
<service_file_name>— имя файла для сохранения списка сервисов. Например,services-before;<ports_file_name>— имя файла для сохранения списка портов. Например,ports-before.
-
За сутки до переключения снизьте TTL DNS-записей домена до 300 секунд.
3. Перенести данные с помощью утилиты dd
С остановкой исходного сервера
Без остановки исходного сервера
-
Посмотрите имена дисков на обоих серверах:
lsblk -o NAME,SIZE,TYPE,MOUNTPOINTВ ответе появится информация о дисках. Например:
NAME SIZE TYPE MOUNTPOINTsda 8G disk├─sda1 8G part /└─sda14 8M partsr0 488K romЗдесь
sda— имя диска. -
Запустите копирование с исходного сервера:
dd if=<source_disk> bs=32M status=progress | ssh root@<new_ip_address> "dd of=<target_disk> bs=32M"Укажите:
<source_disk>— имя диска на исходном сервере, которое вы посмотрели на шаге 3. Например,/dev/sda;<new_ip_address>— публичный IP-адрес нового сервера;<target_disk>— имя диска на новом сервере, которое вы посмотрели на шаге 3. Например,/dev/sdb.
Если весь канал не должен быть занят под копирование, ограничьте скорость утилитой
pv. Например:dd if=/dev/sda bs=32M status=progress | pv -qL 90M | ssh root@203.0.113.16 "dd of=/dev/sdb bs=32M"Здеcь
90M— ограничение скорости передачи данных до 90 МБ/с. -
Если копирование прервалось, возобновите передачу данных:
5.1. Посмотрите числа полностью переданных блоков размером
bsв выводе утилитыddпосле прерывания копирования. Например:^C244234+0 records in244233+0 records out8195099590656 bytes (8.2 TB, 7.5 TiB) copied, 271390 s, 30.2 MB/sЗдесь
244233— число полностью переданных блоков размеромbs.Если диск копировался в файл образа, а вывод утилиты
ddне сохранился, разделите размер файла в байтах на размер блока (32 МБ = 33 554 432 байта) и возьмите целую часть.5.2. Продолжите передачу данных:
dd bs=32M skip=<records_out> if=<source_disk> status=progress | ssh root@<new_ip_address> "dd bs=32M seek=<records_out> of=<target_disk>"Укажите:
<records_out>— число полностью переданных блоков, которое вы получили на шаге 5.1;<source_disk>— имя диска на исходном сервере;<new_ip_address>— публичный IP-адрес нового сервера;<target_disk>— имя диска на новом сервере.
-
Выйдите из режима Rescue на новом сервере.
-
Если ОС на новом сервере не загружается, проверьте UUID и имена разделов:
7.1. Загрузите новый сервер в режим Rescue.
7.2. Проверьте разделы и
fstab:blkidmount <root_partition> /mntcat /mnt/etc/fstabУкажите
<root_partition>— имя корневого раздела. Например,/dev/sda1.7.3. Исправьте UUID или имена разделов в файле
/mnt/etc/fstab. 7.4. Опционально: чтобы восстановить загрузчик, переустановите его:for d in dev proc sys; do mount --bind /$d /mnt/$d; donechroot /mntgrub-install <target_disk>update-grub # в RHEL-подобных: grub2-mkconfig -o /boot/grub2/grub.cfgexitУкажите
<target_disk>— имя диска на новом сервере. Например,/dev/sda. -
Обновите сетевые настройки на новом сервере: IP-адрес, маску, шлюз.
-
Найдите файлы конфигураций, в которых указан публичный IP-адрес исходного сервера:
grep -rl "<old_ip_address>" /etcУкажите
<old_ip_address>— публичный IP-адрес исходного сервера. -
В найденных файлах замените публичный IP-адрес исходного сервера на новый.
-
Выйдите из режима Rescue на новом сервере.
-
Сравните список запущенных сервисов и открытых портов на новом сервере со списком, который вы сохранили на этапе 2.
-
Опционально: чтобы на время тестирования данные оставались актуальными, настройте репликацию баз с исходного сервера.
4. Проверить и переключить сервисы
Во время финальной синхронизации данных и переключения между серверами возникает простой сервисов. Мы рекомендуем синхронизировать данные и переключать сервисы в часы минимальной нагрузки.
-
Проверьте работу сервисов на новом сервере до переключения DNS. Для этого добавьте на локальном компьютере в файл
hostsзапись с новым IP. Это позволит вам подключаться к сервисам на новом сервере, запросы пользователей продолжат направляться на исходный сервер:<new_ip_address> <domain> <subdomain>Укажите:
<new_ip_address>— публичный IP-адрес нового сервера;<domain>— имя вашего домена. Например,example.com;<subdomain>— имя вашего поддомена. Например,www.example.com.
В Linux и macOS файл
hostsнаходится по пути/etc/hosts, в Windows — по путиC:\Windows\System32\drivers\etc\hosts. -
Если сервисы обращаются к своему домену, добавьте такую же запись в файл
hostsна новом сервере. -
Если вы нашли ошибки в работе сервисов, исправьте их и повторите шаг 1.
-
Проверьте сервисы в течение 3 рабочих дней и при необходимости устраните замечания.
-
Выполните финальную синхронизацию данных и баз.
-
Переключите DNS-записи на новый IP.
-
Проверьте работу сервисов еще 3 рабочих дня.
-
Если все работает корректно, исходный сервер можно отключать.