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ů:

  1. Bod první:
    Vypneme virtuální stroj "vs01", běžící na fyzickém stroji XEN.

  2. 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. serveru

    root
    /dev/mapper/host01_vps_data-vs01_g2server_cz_root
    /

    var
    /dev/mapper/host01_vps_data-vs01_g2server_cz_var
    /var

    swap
    /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.

  1. Bod třetí:
    Na fyzickém Hyper-V stroji vytvoříme nový virtuální server s názvem "vs01".
  2. 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 "/".
  3. 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".
  4. 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í.
  5. 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).
  6. 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 
  7. 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 
  8. 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 "/".
  1. 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.
  2. 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