С VPS на выделенный сервер
У виртуалки кончился диск, ядра или терпение к соседям. Система на ней в порядке и должна остаться такой, как есть, только на своём железе.
Что на самом деле меняется под системой
VPS и выделенный сервер отличаются тем, что Linux замечает при загрузке и больше нигде: контроллер дисков, имена дисков, сетевая карта и прошивка. Всё, что выше, — пакеты, конфигурация и данные — не имеет мнения о том, на чём оно работает.
- Диски перестают быть
vdaи становятсяsdaилиnvme0n1. Всё, что вfstabили в загрузчике называет устройство вместо UUID, сломалось бы, поэтому копия сохраняет UUID, и имена перестают иметь значение. - Драйвер virtio уступает место настоящему контроллеру, который обязан быть в initramfs, иначе ядро вообще не доберётся до корня.
- Прошивка может отличаться: многие VPS — это BIOS там, где железо UEFI, или наоборот.
- Сетевая карта новая, с новым MAC и часто с новым именем.
Всё это утилита делает на фазе доработки: собирает initramfs с драйверами нового контроллера, ставит grub под ту прошивку, которая у цели действительно есть, переименовывает основной интерфейс в eth0 и привязывает его к новому MAC, а остальную систему не трогает.
Как завести VPS в переезд
Если VPS продолжает работать, готовить на нём не надо ничего: утилита читает его диски по ssh прямо под нагрузкой, и это on-line режим. Если копировать остановленным, нужен Live OS, и для VPS есть два пути.
curl -fsSL reloca.to/live | bash
Эта команда перезагружает машину прямо в Live через kexec, сохраняя адрес. Там, где kexec не работает (Hyper-V, Azure и несколько облаков), подключите reloca.to/live.iso через консоль провайдера или панель VPS и выберите в меню full.
Переезд
На новом сервере, загруженном в Live OS:
ssh -A root@НОВЫЙ-СЕРВЕР
curl -fsSL reloca.to | bash
reloca.to -n root@IP-VPS # план, ничего не пишется
reloca.to root@IP-VPS
Два диска в новом сервере и нет аппаратного RAID? Соберите зеркало заодно:
reloca.to -d /dev/sda,/dev/sdb -o raid=1 root@IP-VPS
Утилита разложит пары md RAID1 послотно, поставит загрузчик на оба диска и добавит mdadm в перенесённую систему, если его там не было. VPS с одним диском становится сервером, который переживает потерю одного.
Что кусается на этом маршруте
- cloud-init. VPS, поставленный из облачного образа, несёт его, и при первой загрузке он перепишет сеть и, возможно, имя хоста. Утилита по умолчанию отключает его работу с сетью и именем;
-o cloudinit=keep, если есть причина оставить. - Диск меньше. Новый сервер не обязан быть больше. Если данные влезают, корень едет пофайлово в свежую файловую систему с тем же UUID и фичами, и загрузчик ничего не замечает.
- Лицензии и белые списки. IP меняется, поэтому всё, что к нему привязано, надо обновить: правила фаерволов в других местах, платёжные сервисы, репутация почты.
- Первая загрузка. Смотрите её на консоли нового сервера. У VPS была консоль в панели, у выделенного сервера это BMC, и только там видно первый старт.
Все опции, управляющие разметкой, — в справочнике опций.
Попробуйте на своём переезде
Утилита бесплатна, сухой прогон не меняет ничего, а старый сервер только читается.