Virtualizace

Vratislav Podzimek, v.podzimek(at)mail.muni.cz

Obsah

Základní pojmy

Proč virtualizovat?

K používání virtualizace máme několik důvodů. Historicky nejdůležitějším je lepší využití hardwarových prostředků. V dnešní době je však hardware mnohem levnější záležitostí, co tedy způsobuje značné soustředění mnoha IT gigantů na virtualizaci? Rozhodně otázka bezpečnosti - můžeme od sebe oddělit procesy i celé operační systémy a zabránit jim tak v poškození dat ostatních procesů či operačních systémů. Tato vlastnost se hodí i při různém testování, ať už nového nestabilního softwaru, či různých experimentální změn stabilního. Dalším faktorem je snadná zálohovatelnost, protože můžeme zálohovat obrazy virtualních strojů a ty pak jednoduchým přepsáním jednoho souboru vrátit do totožného stavu z libovolného data, ze kterého máme zálohu. Jistě ne posledním důvodem je pak ono v dnešní době tak magické slovo "cloud". Právě vysoká škálovatelnost řešení založených na virtualizaci je činí přímo ideálními pro dynamické přidělování zdrojů dle potřeby. Snadná migrace (i online) pak umožňuje i poskytovatelům využívat pouze ty hardwarové prostředky, které jsou v danou chvíli potřebné. No a protože jsme na akademické půdě, měli bychom zmínit výhodu upravovat si chování virtualizovaného hardwaru dle potřeby, což se může hodit při výuce operačních systémů.

Úrovně virtualizace

Kontejnerové systémy chroot, BSD jail, OpenVZ, Linux-VServer

První z uvedené čtveřice by měl být znám všem. Jedná se o tradiční unixový nástroj sloužící k vymezení souborových prostředků určitému procesu. Oproti tomu BSD jail poskytuje mnohem více možností, protože se netýká pouze souborů, ale umožňuje omezit další prostředky, jako je přístup k různým zařízením. A navíc proces, jenž byl jednou uzavřen do jailu, se nemůže dostat zpátky. Velmi podobnými systémy jsou pak Linux-VServer a OpenVZ, což jsou sady úprav kernelu poskytující podobné možnosti jako jail.

Emulace HW (někdy plná virtualizace)

Tento typ znamená, že nějaký software emuluje hardware pro virtualizovaný OS. Ten pak vidí tento hardware jako klasický fyzický a pracuje s ním. Hypervisor se pak stará o překlad těchto požadavků na požadavky na skutečný fyzický hardware. Rozdíl oproti částečné virtualizaci je v tom, že emulátor poskytuje kompletní emulované hardwarové vybavení, na kterém může běžet neupravený OS. Jako příklady jmenujme QEMU, XEN, VMware a VirtualBox. Do této kategorie však spadají i další, řekněme "úsměvnější" kousky, jako různé emulátory Amiga, ZX Spectrum, ale i DOSBox, i když zde se nejedná o pouhou emulaci hardware pro virtualizovaný operační systém.

Paravirtualizace

Zde se o kousek přiblížíme práci na fyzickém hardwaru. Tento druh virtualizace zahrnuje hypervisor, který poskytuje operačnímu systému běžícímu ve virtuálním prostředí ABI (application binary interface), přes které jsou předávány požadavky na práci s hardware. Ty jsou následně hypervisorem provedeny a výsledky předány zpět virtualizovanému systému. Zkusme se nyní na chvíli trochu zamyslet, jaký problém tento přístup přináší. OS nepracuje přímo s požadavky na hardware, ale komunikuje s hypervisorem pomocí ABI, což znamená, že virtualizovaný OS musí být upraven. V současnosti jsou takto upraveny různé druhy *nixových systémů, ale např. Microsoft Windows v tomto režimu běží pouze na hardwaru přímo poskytujícím virtualizaci, i když na tvorbě ovladačů zařízení pro paravirtualizovaný hardware se pracuje. Ze zástupců virtualizačních řešení umožňujících tento druh můžeme jmenovat např. XEN, KVM a VMware. Spadá sem však i zajímavý projekt User Mode Linux, který umožňuje spustit linuxový kernel jako proces na již běžícím Linuxu. Ve srovnání s emulací se zde dosahuje menšího úbytku výkonu.

Virtualizace s podporou hardwaru

Jedná se o typ virtualizace, kde je neujžší vztah mezi virtualizovaným OS a vrstvou fyzického hardware. Intel i AMD poskytují u některých typů svých procesorů podporu pro tuto technologii - Intel VT-x a AMD-V. Tuto koncepci však představilo IBM již v roce 1972 na počítačích s370 (dnešní model s390 ji podporuje také). V současnosti se jedná o nejčastěji používané řešení, protože poskytuje vyšší výkon než pouhá emulace a zároveň umožňuje použití neupraveného softwaru. Jako nejlepší řešení se však ukazuje hybridní virtualizace, což je kombinace virtualizace s podporou hardware a výše zmíněné paravirtualizace. Využití hardwarové podpory virtualizace jsou schopny mnohé nástroje - KVM, XEN, VMware i např. VirtualBox.
poznámka: I tento typ virtualizace bývá někdy (chybně) označován názvem plná virtualizace.

Instalace a správa

Pokud si budete chtít vyzkoušet všechny možnosti, pravděpodobně nejlepší volbou bude kombinace Qemu a KVM, která přináší jak emulaci a paravirtualizaci, tak i virtualizaci s podporou hardware. Právě posledně jmenovaný typ je i důvodem vzniku projektu KVM, neboť samotné Qemu zvládá pouze emulaci. Budete tedy potřebovat softwarové balíky qemu a qemu-kvm a pokud si chcete práci zpříjemnit grafickým rozhraním, dobrou volbou bude ještě virt-manager, který práci dokáže opravdu usnadnit. Problémem není třeba ani připojení na vzdálený počítač, na kterém běží virtuální stroje (využívá se SSH tunel).
Prvním krokem je příprava image souboru, který slouží jako virtuální disk. Komu se nechce hledat, může použít příkaz dd, ale jednodušší variantou je qemu-image create. Tím získáme prostor pro virtuální stroj, který pak můžeme spustit pomocí příkazu qemu a následně libovolným klasickým způsobem nainstalovat. Chceme-li využívat hardwarovou podporu virtualizace, musíme používat příkaz qemu-kvm. Dlouhé procházení manuálových stránek a následné nejisté zkoušení různých variant v terminálu si ale můžeme ušetřit použitím virt-manageru. Měl bych ještě uvést na pravou míru, že virt-manager nepracuje pouze s qemu a KVM, ale díky využití knihovny libvirt, která vytváří společné API nad různými virtualizačními nástroji, umí pracovat s mnoha různými "formáty" virtuálních strojů. Na knihovně libvirt je postaven i command-linový program virsh, jehož pomocí můžeme provádět různá nastavení.

Komunikace s virtuálním strojem

Jednou z problematik řešených při provozu virtuálních strojů je způsob komunikace mezi host machine a guest machine. Při správné konfiguraci sítě můžeme využít tradiční protokoly jako SSH, v podstatě i telnet, protože komunikace probíhá pouze i uvnitř fyzického stroje a VNC. V poslední době se však již do stádia použitelnosti dostal nový protokol určený přímo pro tuto oblast použití - SPICE (Simple Protocol for Independent Computing). Zatím je soustředění věnováno na spolupráci s Qemu, do kterého je přidáno grafické zařízení QXL. K tomuto zařízení jsou pak vyvinuty ovladače jak pro X Server, tak i pro Windows. Oproti VNC se tedy SPICE liší způsobem komunikace a přináší mnoho různých funkcí navíc jako např. podporu přenosu audia, 2D akceleraci, detekci videa a následnou komprimaci, šifrování. Ve stádiu vývoje se pak prozatím nachází podpora pro USB forwarding.

Literatura