З 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, і лише там видно перший старт.
Усі опції, що керують розміткою, — у довіднику опцій.
Спробуйте на своєму переїзді
Утиліта безкоштовна, сухий прогін не змінює нічого, а старий сервер лише читається.