Migrace linuxových virtuálů z XEN serveru na Hyper-V
IT je velmi progresivní obor a tak málo koho z nás překvapí, že je nutné vcelku často, ne-li pravidelně obměňovat hardware, investovat nemalé peníze do údržby infrastruktury a také do software, bez kterého by hardware byl doslova jen "kus železa". Ne jinak tomu je také u stále populárnějších virtualizačních technologií.
Před nástupem virtualizací (a není tomu tak dávno) nebylo nic zvláštního, že v případě poruchy hardware na serveru mohl vzniknout i několika hodinový výpadek, než byl problém konečně vyřešen a byl obnoven běh služeb na serveru. Pro většinu administrátorů jsou podobné problémy noční můrou.
Mezi standardy ve virtualizaci patří v dnešní době zejména VMware a Hyper-V. Vzhledem k tomu, že společnost obecně vyvíjí tlak na ceny poskytování služeb, mnoha dalším technologiím v serverovnách zvoní hrana. Jestliže inovujeme a používáme virtualizační technologie VMware a/nebo Hyper-V, pak tedy bývá vhodné se současně zbavovat starších serverů a technologií.
Nyní se již dostáváme k úkolu dnešního dne, kterým je migrace XEN virtuálního serveru na novější technologii Hyper-V 2012. Tím, že postupem času zmigrujeme virtuální stroje z několika "matek" (fyzických serverů, pod kterými jsou spuštěny virtuální servery) na jeden, novější a výkonnější server Hyper-V, ušetříme za energie, místo v racku a ještě virtuální stroje poběží na novějším hardware.
Pro migraci vybereme jeden z virtuálních strojů XENu, který nazveme pracovně "vs01".
Celý postup migrace si shrneme do 12ti bodů:
Bod první:
Vypneme virtuální stroj "vs01", běžící na fyzickém stroji XEN.Bod druhý:
Zkopírujeme disky virtuálního stroje z fyzického XEN serveru na cílový fyzický Hyper-V server pomocí utility "dd". Nejvhodnější variantou bude kopírovat data přímo na cílový server (například pomocí připojení NFS). Předtím je samozřejmě zapotřebí si na fyzickém XEN serveru namountovat prostor z cílového fyzického serveru Hyper-V.
Server "vs01" má v našem případě k dispozici 3 disky reprezentující tyto oddíly:Název oddílu
Cesta k disku na fyzickém XEN serveru
Cesta na virt. serveruroot
/dev/mapper/host01_vps_data-vs01_g2server_cz_root
/var
/dev/mapper/host01_vps_data-vs01_g2server_cz_var
/varswap
/dev/mapper/host01_vps_data-vs01_g2server_cz_swap
-Samotné zkopírování disků na cílový server provedeme pomocí příkazů:
dd if=/dev/mapper/host01_vps_data-vs01_g2server_cz_root of=/mnt/hyperv/vs01/vs01_g2server_cz_root
dd if=/dev/mapper/host01_vps_data-vs01_g2server_cz_var of=/mnt/hyperv/vs01/vs01_g2server_cz_var
Disk "swap" kopírovat nemusíme. V případě potřeby si jej vytvoříme později na cílovém serveru anebo jej nemusíme používat vůbec.
- Bod třetí:
Na fyzickém Hyper-V stroji vytvoříme nový virtuální server s názvem "vs01". - Bod čtvrtý:
Na novém virtuálním Hyper-V stroji, který jsme právě vytvořili, je nutné vytvořit samostatný "/boot" oddíl. Náše virtuální XEN servery bohužel neobsahovaly "/boot" adresář. Nabootování virtuálního serveru a jeho systému zajišťoval fyzický XEN server.
Máme dvě možnosti. Můžeme buďto nainstalovat čistý operační systém (nejlépe stejné distribuce) s odděleným "/boot" diskem, který následně použijeme pro náš "vs01" server anebo zkopírujeme virtuální disk "/boot" z některého existujícího virtuálního Hyper-V serveru (jestliže jsme již například tímto způsobem některý XEN virtuál migrovali). Jestliže chceme provést první možnost, základem je nainstalovat čistý systém nejlépe stejné distribuce. Distribuci lze samozřejmě použít i jinou (není například problém pro systém Debian použít "/boot" oddíl systému Ubuntu). Pro pořádek a předcházení případných problémů je však vhodnější zachovat stejnou distribuci. Instalujeme tedy čistý systém přímo na nově vytvořený virtuální stroj Hyper-V s tím, že jako základ si vytvoříme 2 IDE disky - první v pořadí bude samostatný oddíl (například 200MB) pro "/boot" a druhý v pořadí je pro root "/", kterému zvolíme libovolný prostor, dostačující pro korektní instalaci distribuce.
Při instalaci následně provedeme rozdělení na příslušné oddíly "/boot" a "/". - Bod pátý:
Po úspěšné instalaci čistého systému si do systému můžeme nabootovat a pomocí příkazu "blkid" zjistit UUID aktuálního root disku "/". Zjištěné UUID disku si poznačíme, v budoucnu pak budeme mít jednodušší práci s jeho nahrazováním. Po vypnutí nově nainstalovaného virtuálního stroje můžeme root disk "/" z tohoto Hyper-V virtuálu smazat a namísto něj vložit překonvertovaný root disk XEN virtuálu. Konvertovaní probíhá ze "surového" formátu do formátu "vhd". K tomu slouží utilita "VhdTool.exe", kterou lze zdarma stáhnout na internetu a která provede převod image disku v příkazové řádce systému Windows pomocí jednoduchého příkazu:
.\VhdTool.exe /convert vs01_g2server_cz_root
.\VhdTool.exe /convert vs01_g2server_cz_var
Konvertování disku trvá přibližně vteřinu (jsou pouze připsána potřebná metadata). Během konvertování utilita vypisuje, co provádí za operace a výpis by měl končit řádkem "Status: Complete". - Bod šestý:
Následně můžeme přidat i překonvertovaný IDE disk pro "/var" oddíl. IDE disky jsme si kvůli pořádku vložili v tomto pořadí: nejprve /boot, následně root a pak /var, ať je lze jednoduše rozpoznat při další práci (zejména s oddíly a s grubem). Disky budou ve virtuálním systému označeny jako sda, sdb a sdc podle námi zvoleného pořadí. - Bod sedmý:
Nyní je zapotřebí připojit k virtuálnímu stroji virtuální mechaniku s libovolnou live distribucí, například SystemRescueCD a nabootovat z ní do konzole. V konzoli pak vytvoříme pro root disk "/" oddíl (v našem případě by se mělo jednat o disk /dev/sdb):
cfdisk /dev/sdb
Oddíl chceme vytvořit primární a ponechat jeho plnou velikost (nic tedy neměníme), následně stačí zapsat změny tlačítkem "WRITE".
Nyní bychom již měli na disku vidět oddíl /dev/sdb1 (ověřit lze příkazem: cat /proc/partitions).
Podobně to provedeme i s diskem "/var" (/dev/sdc). - Bod osmý:
Namountujeme si root(/dev/sdb) a /boot disk (/dev/sda1) pod live distribucí například do adresáře "/media/sdx":
mkdir /media/sdx
mount /dev/sdb /media/sdx
mount /dev/sda1 /media/sdx/boot - Bod devátý:
Upravíme soubor /etc/fstab virtuálního stroje:
vim /media/sdx/etc/fstab
Místo disků /dev/xvda (náš XEN používal toto označení) přepíšeme disky na /dev/sda. Navíc zakomentujeme anebo smažeme řádek s diskem "swap" a přidáme disk pro boot "/boot". Obsahem souboru pak bude například:
/dev/sda /boot ext4 noatime,nodiratime,errors=remount-ro 0 0
/dev/sdb / ext4 noatime,nodiratime,errors=remount-ro,usrquota 0 0
/dev/sdc /var ext4 noatime,nodiratime,usrquota 0 0 - Bod desátý:
Upravíme soubor /boot/grub/grub.cfg virtuálního stroje:
vim /media/sdx/boot/grub/grub.cfg
Upravujeme pouze UUID disku root "/" (UUID disku zjistíme pomocí příkazu "blkid", např.: blkid /dev/sdb) - UUID původního root disku z nově nainstalovaného systému virtuálního stroje (který jsme z Hyper-V již smazali) nyní nahradíme aktuálním UUID root disku "/".
- Bod jedenáctý:
Konečně přichází okamžik, kdy můžeme server nastartovat a pevně doufat, že najede... :-) Jestliže je virtuální stroj na XENu ještě živý, nezapomenout před spuštěním přemigrovaného virtuálu vypnout síťovou kartu, ať nevznikne kolize IP adres starého a přemigrovaného virtuálu. - Bod dvanáctý - poslední:
Jestliže na serveru nastartovaly služby, lze se přihlásit přes SSH, ale v Hyper-V konzoli stále nenabíhá přihlašovací dialog, zbývá už jen jedna důležitá maličkost: náš XEN používal jako první přihlašovací konzoli "hvc0" namísto klasické "tty1" konzole. Stačí pouze v souboru "/etc/inittab" na virtuálním stroji "vs01" zakomentovat řádek s konzolí "hvc0" a doplnit řádek s konzolí "tty1":
#1:2345:respawn:/sbin/getty 38400 hvc0
1:2345:respawn:/sbin/getty 38400 tty1
Po restartu pak již naběhne přihlašovací dialog i v Hyper-V konzoli.
Dnes jsme si tedy ukázali, jak přemigrovat virtuální stroj z XEN virtualizace na Hyper-V. V případě, že byla migrace úspěšná, gratulujeme! V opačném případě přejeme hodně štěstí při ladění chyb. Jestliže se Vám migrace nepodařila a v průběhu se objevily nějaké problémy, nevěšte hlavu. Konfigurací XEN serverů je nepřeberné množství, bude proto nutné poladit migraci svými vlastními silami anebo se nechat inspirovat dalšími návody na internetu.
- Martin Javorský, G2server.cz