Mendelova zemědělská a lesnická univerzita v Brně Provozně ekonomická fakulta
Techniky a možnosti virtualizace výpočetního prostředí Diplomová práce
Vedoucí práce: doc. Ing. Arnošt Motyčka, CSc.
Bc. Petr Halamíček
Brno 2009
volna strana pro zadani prace
Prohlašuji, že jsem tuto diplomovou práci vyřešil samostatně s použitím literatury, kterou uvádím v seznamu.
V Brně 22. 5. 2009
....................................................
Rád bych tímto poděkoval vedoucímu diplomové práce doc. Ing. Arnoštovi Motyčkovi, CSc., za jeho cenné rady a připomínky při tvorbě práce a zapůjčení materiálů, odkud jsem čerpal potřebné informace. Dále bych rád poděkoval Bc. Tomášovi Ruprichovi a Panu, Jaroslavovi Prodělalovi za rady a připomínky technického charakteru.
Abstract Halamíček Petr. Techniques and possibilities virtualization computational environment. Diploma thesis. Brno, 2009. Diploma thesis is concerned with the possibilities of application of virtualization methods, explanation of basic terms and principles of computation environment area that are becoming more and more popular solution for the optimization of hardware devices, nowadays. Particularly, this thesis describes implementation of virtualization technology called Xen, options of its usage in practice and under conditions of education in the workroom of Faculty of Business and Economics of Mendel University of Agriculture and Forestry in Brno. Furthermore, this thesis explains installation, configuration and securing of Xen virtual servers. Efficiency comparison of Xen technology and other available virtualization technologies is an integral part of this thesis, as well, and at the same time this text could be used as a manual for implementing Xen in practice.
Abstrakt Halamíček Petr. Techniky a možnosti virtualizace výpočetního prostředí. Diplomová práce. Brno, 2009. Diplomová práce se zabývá možnostmi nasazení virtualizačních metod, vysvětlením základních pojmů, principy z oblasti virtualizace výpočetního prostředí, jež se v dnešní době stává čím dál více populárním řešením pro optimalizaci hardwarových prostředků. Práce zejména pojednává o implementaci virtualizační technologie Xen, o možnostech jejíjho využití v praxi i při výukových podmínkách na Provozně ekonomické fakultě Mendelovy zemědělské a lesnické univerzity v Brně. Tato práce popisuje instalaci, konfiguraci a zabezpečení virtuálních serverů Xen. Součástí je rovněž srovnání efektivnosti technologie Xen s ostatními dostupnými virtualizačními technologiemi a tento tento text mohl zároveň posloužit jako návod k implementaci Xen v praxi.
5
OBSAH
Obsah 1 Úvod a cíl práce 1.1 Úvod do problematiky . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Rešerše 2.1 Historie operačních systémů . . . . . . . . . . . . . . . . 2.1.1 Von Neumannovo a Harvardské schéma počítače . 2.2 Výpočetní systém . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Hardware — fyzické složka, technické prostředky . 2.2.2 Software — logická složka, programové vybavení . 2.3 Operační systém . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Struktura operačního systému . . . . . . . . . . . 2.3.2 Základní architektury operačních systémů . . . . 2.3.3 Klasifikace operačních systémů . . . . . . . . . . 2.3.4 Linux/Unix . . . . . . . . . . . . . . . . . . . . . 2.3.5 MS Windows . . . . . . . . . . . . . . . . . . . . 2.3.6 Rozdělení operačních systému z hlediska nasazení 2.3.7 Základní pojmy z oblasti operačních systémů . . . 2.4 Virtualizace . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Historie . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Výhody virtualizace . . . . . . . . . . . . . . . . 2.4.3 Základní pojmy z oblasti virtualizace . . . . . . . 3 Použité metody 3.1 Způsob přístupu k fyzickému rozhraní . . . . . . . . . 3.1.1 Přímé rozhraní s hardwarem . . . . . . . . . . 3.1.2 Rozhraní s hostitelským operačním systémem 3.1.3 Hybridní rozhraní . . . . . . . . . . . . . . . . 3.2 Metody virtualizace počítačů . . . . . . . . . . . . . 3.2.1 Emulace a Simulace . . . . . . . . . . . . . . . 3.2.2 Plná virtualizace . . . . . . . . . . . . . . . . 3.2.3 Paravirtualizace . . . . . . . . . . . . . . . . . 3.2.4 Virtualizace na úrovni OS . . . . . . . . . . . 3.2.5 Partitioning . . . . . . . . . . . . . . . . . . . 3.3 Současné virtualizační techniky . . . . . . . . . . . . 3.3.1 Xen . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 VMware . . . . . . . . . . . . . . . . . . . . . 3.3.3 Microsoft Virtual PC . . . . . . . . . . . . . . 3.3.4 Microsoft Virtual Server . . . . . . . . . . . . 3.3.5 QEMU . . . . . . . . . . . . . . . . . . . . . . 3.3.6 Linux-VServer . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
8 8 9
. . . . . . . . . . . . . . . . .
10 10 12 13 13 15 15 16 17 18 20 25 26 27 28 29 30 32
. . . . . . . . . . . . . . . . .
34 34 34 34 35 35 35 36 38 39 40 41 41 43 44 44 45 46
6
OBSAH
3.4
3.3.7 Hyper-V . . . . . . . . . 3.3.8 Sun xVM VirtualBox . . 3.3.9 UML . . . . . . . . . . . 3.3.10 OpenVZ . . . . . . . . . 3.3.11 KVM . . . . . . . . . . . 3.3.12 Lguest . . . . . . . . . . Přehled virtualizačních technik
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
4 Vlastní práce 4.1 Technické vybavení . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Instalace hostitelského operačního systému . . . . . . . . . . . . 4.3 Nastavení serveru . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Hardening . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.2 Konfigurace základních bezpečnostních politik (iptables) 4.4 Instalace a spuštění Xenu (dom0) . . . . . . . . . . . . . . . . . 4.5 Instalace virtuálních domén . . . . . . . . . . . . . . . . . . . . 4.6 Popis vnitřní virtuální sítě . . . . . . . . . . . . . . . . . . . . . 4.7 Přesměrování paketů . . . . . . . . . . . . . . . . . . . . . . . . 4.7.1 PREROUTING . . . . . . . . . . . . . . . . . . . . . . . 4.7.2 POSTROUTING . . . . . . . . . . . . . . . . . . . . . . 4.8 Možnosti správy Xen domén . . . . . . . . . . . . . . . . . . . . 4.8.1 Xm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8.2 Virtual Machine Manager (VMM) . . . . . . . . . . . . . 4.9 Migrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.10 Porovnání Xenu s ostatními virtualizačními technikami . . . . . 4.10.1 Režie virtualizace . . . . . . . . . . . . . . . . . . . . . . 4.10.2 Srovnání výpočetního výkonu . . . . . . . . . . . . . . . 4.10.3 Srovnání síťově propustnosti . . . . . . . . . . . . . . . . 4.10.4 Míra izolace . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.5 Bezpečnost . . . . . . . . . . . . . . . . . . . . . . . . . 4.10.6 Xen vs. VMware . . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
. . . . . . .
46 47 47 48 48 49 49
. . . . . . . . . . . . . . . . . . . . . .
50 50 51 53 54 55 57 59 65 67 68 70 70 71 71 73 75 75 75 76 76 77 78
5 Závěr
80
6 Literatura
82
Přílohy
84
A Složitější Xen switch
85
B Skript pro vytvoření virtuálního stroje
86
C Instalace potřebných balíčků a Xenu
88
7
1
1 1.1
ÚVOD A CÍL PRÁCE
Úvod a cíl práce Úvod do problematiky
Již několik desetiletí pronikají počítače a informační technologie stále více do každodenního života lidí po celém světě. Jak praví Moorův zákon, výkon počítačových systémů se zdvojnásobí každých 18 měsíců. Toto je důsledkem stále většího tlaku na vývoj hardwaru ze strany výrobců softwaru a ti zase reagují na vzrůstající počet uživatelů jejich aplikací. V mnoha případech je potřeba dalšího navýšení výpočetní kapacity, např. příchodem nového pracovníka nebo potřebou instalace další aplikací, která je spojena s nákupem dalšího někdy až příliš výkonného stroje, jehož potenciál nebude nikdy zcela využit. Virtualizace je nástroj jak řešit dosavadní ohromný počítačový boom. Pojem virtualizace se ve větší míře začal objevovat v šedesátých letech, kdy vznikla první potřeba sdílení jednoho počítače více uživateli. V prvopočátcích ryze osobní počítače byly tak málo výkonné, že umožňovaly práci pouze jednoho uživatele a to právě s jednou aplikací v daném okamžiku. S postupným růstem výkonu počítačů bylo možné, aby na počítačích běžel současně více jak jeden program. Od toho byl už jen krůček k tomu, aby zpracovávané programy nepatřily stejnému uživateli, a tak vzniklo první sdílení počítačů. To s sebou ovšem přináší jistá rizika, např. běh jednoho programu ovlivní běh jiného. Tyto problémy se právě v této práci snaží řešit popisovaná virtualizace. Virtualizace představuje iluzi. Vytvoříme řadu kopií daného zdroje jako je např. disk, paměť, procesor, a každému jednotlivému uživateli (v našem případě virtuálnímu operačnímu systému) poskytneme jednu z kopií takto zmnoženého zařízení. Tyto vytvořené kopie vznikají pouze jako koncepty a nazýváme je virtuálním zařízením. Vzniká tak virtuální disk, procesor a paměť. Když jednotlivé virtuální komponenty poskládáme, můžeme potom uživateli nabídnout celý virtuální počítač. V dnešní době existuje mnoho nástrojů, kterými lze docílit virtualizace počítačů, každý ovšem pracuje na jiné virtualizační technice. Například dnes nejrozšířenější VMware, Virtual PC a Virtual Server pracují na principu plné virtualizace. Nástroje jako jsou QEMU, ParalerDesktop for MAC pracují technikou simulace. Avšak mým předmětem zájmu a tématem mé diplomové práce, se stal virtualizační nástroj Xen, patřící do skupiny paravirtualizérů. Nestalo se tomu tak náhodou. Již před časem vznikla potřeba většího počtu serverů Ústavu informatiky Provozně ekonomické fakulty, a bylo tak zapotřebí vyřešit tyto požadavky. Z ekonomického hlediska se nejlepší volbou stala právě virtualizace, a poté bylo na místě rozhodnout, jakou virtualizační techniku použít. Vzhledem k OpenSource řešení, kterým Xenje, bylo mé rozhodování v této věci jednoznačné. Vyznačuje se svou spolehlivostí a efektivností, tím pádem jsem se rozhodl právě k implementaci paravirtualizéru Xenna jednom ze serverů fakulty. Dnes je na tomto serveru s úspěchem v provozu pět virtuálních serverů, které slouží zejména zaměstnancům Ústavu informatiky.
8
1.2
1.2
Cíl práce
Cíl práce
Cílem práce je seznámení se současnými metodami a technikami virtualizace výpočetního prostředí, popsat výhody a nevýhody jak jednotlivých virtualizačních technik, tak samotné virtualizace. Mimo jiné budou v této práci řešeny další dílčí cíle, kterými jsou: • Úvod do problematiky, popis operačního systému. Seznámení se základními pojmy. • Současné virtualizační metody, jejich samotný princip, odlišnost, jejich výhody a nevýhody. Popsat přístup konkrétní metody k fyzickému hardwaru. • Současné virtualizační techniky, jejich princip, zařazení do příslušné metody. Přiblížit jejich odlišnosti a výhody a nevýhody. • Implementace paravirtualizační techniky Xen, na fakultním serveru. Včetně popisu instalace hostitelského operačního systému, jeho konfigurace, zabezpečení. • Instalovat jednotlivé hostované operační systémy pomocí vytvořeného skriptu. • Posouzení efektivnosti techniky Xen v porovnání s ostatními virtualizačními technikami. • Zhodnocení ekonomických a všeobecných přínosů virtualizace.
9
2
2 2.1
REŠERŠE
Rešerše Historie operačních systémů
Historie V prvopočátcích neměly počítače vůbec operační systém a programátor musel se strojem rozmlouvat v jeho řeči, tedy zadávat přesně jedničky a nuly, a přitom vědět, kde se v počítači co nachází, kde je jaké zařízení. S rozvojem výpočetní techniky se ale tato metoda stávala pomalu neúnosná, a tak si programátoři pro svou potřebu vytvořili několik tzv. programovacích jazyků. Nejstarším vyšším programovacím jazykem byl Short Code z roku 1949, později vznikl Fortran (1956, vyvinut IBM), COBOL (1959), BASIC (1965, později standardní jazyk pro PC), Pascal (1971), C (1972) a tak dál. V 60. letech vznikla potřeba programu, který by základní funkce systému obstarával sám a ulehčil tak programátorovi práci. Vznikly tak první operační systémy, nejprve firmy IBM. V 70. letech došlo ke vzniku dvou dnes již legendárních operačních systémů. První z nich, VMS, vytvořila pro své počítače VAX firma DEC. Tím druhým byl ještě slavnější UNIX firmy AT&T. Protože byla tato firma v rámci antimonopolního řízení americké vlády nucena zříct se své počítačové divize, převedla UNIX za velmi výhodných podmínek na některé univerzity. Vznikla tak varianta BSD (Berkeley System Distribution).
Obrázek 1: Schéma počítačového systému (Kunderová, 2008).
Když IBM roku 1981 uvedla na trh svoje PC (Personal Computer), vybavila ho operačním systémem MS-DOS (Microsoft Disk Operating System) od firmy Microsoft. Původně sice IBM připravovala vlastní systém, ale nakonec ho nestihla v termínu dokončit. Kdyby se jí to podařilo, dnešní počítačový svět by vypadal zcela jinak. MS-DOS na rozdíl od Unixu podporoval pouze jednoho připojeného uživatele, který mohl pracovat s jedním jediným programem v daném čase. Navíc měl MS-DOS nepříjemná hardwarová omezení. 10
2.1
Historie operačních systémů
V téže době připravovala firma Apple první operační systém s grafickým uživatelským rozhraním (GUI), operační systém 32-bitový, oproti 16 bitům u PC. První aplikace nového systému, počítač Lisa z roku 1983, sice úplně propadl, ale jednodušší (a levnější) Macintosh z následujícího roku se stal legendou. Umožňoval multitasking, měl multimédia a díky ovládání myší se s ním mohl naučit pracovat kdokoliv. V roce 1987 se tak ve spoluprácí IBM a Microsoftu, objevil OS/2, který se rovněž mohl stát velkým předělem, ale bohužel se spolupráce obou firem rozpadla a každá z firem si vyvíjela svou vlastní verzi OS/2. Windows, jež byla Microsoftí verzí OS/2, byl ve svých začátcích zcela neschopným produktem plným chyb, stejně jako Dos, ale masivní marketingová podpora Microsoftu ho nakonec prosadila proti jeho konkurentům.(Koudelka, 2004) Na přelomu 80. a 90. let došlo k rozmachu sítě Internet, a tím ke vzniku Internetové komunity využívající Unixu jako operačnímu systému. Protože však Unix nebyl zadarmo, znamenalo to napsat celý systém znovu. Toho se chopil finský student Linuse Torvalds a vytvořil na základě Unixu, operační systém Linux. Současnost Torvaldsův Linux pomalu dospěl do fáze komerční použitelnosti, zatím především jako síťový server, ale pomalu také jako systém pro běžného uživatele. MacOS X je v dnešní době velkým konkurentem Windows. Je to supermoderní objektově orientovaný systém založený na BSD Unixu, vybavený zbrusu novým vektorovým grafickým rozhraním Aqua a schopný spouštět jak své nové aplikace, tak i aplikace psané pro původní MacOS. Této vlastnosti je dosaženo tím, že MacOS X má tři programová rozhraní: Classic , Carbon a Cocoa. Pokud by se MacOS X opravdu jednoho dne dostal na PC, jistě by představoval těžkou konkurenci pro Windows, v oblasti domácích počítačů rozhodně nebezpečnější než Linux. V dnešní době se Microsoft snaží uživatele svých operačních systémů přinutit k přechodu na Windows Vista a Windows Longhorn. Oba systémy byly vydány v roce 2007. Microsoft opět sliboval spousty vylepšení oproti Xp, nicméně skutečnost je spíš taková, že původní systém Xp je mnohdy výkonnější a užitečnější než Vista. Nejžhavější novinkou je Windows server 2008, který se jeví jako velice vyspělí, z řadou novinek, jakou jsou: ServerCore – možnost nainstalovat operační systém bez grafického rozhraní, tedy po vzoru Linuxu, PowerShell – opět po vzoru Linuxu, obsahuje Server 2008 příkazový interpret, Paralelní vytváření sessions, Windows hardware error architecture, SMB2 – nový SMB protokol, Hyper-V – virtualizace přímo zabudovaná do jádra systému, NTFS2 – pokročilá samo opravná verze souborového sytému. Nutno uznat že Windows Server 2008 je v podání Microsoftu velice revoluční operační systém, a začíná být konkurence schopným serverovým řešením, kde dominuje Linux.(Koudelka, 2004) Budoucnost Jak se zdá, velkou budoucnost má před sebou hlavně Linux, jehož podíl na trhu se neustále zvyšuje. Pravděpodobně dojde k tomu, že si Linuxové distribuce a Microsoft rozdělí většinu trhu s osobními počítači přibližně napůl, zatímco ostatní (prakticky 11
2.1
Historie operačních systémů
jen Apple, popřípadě OS/2 a různé klony Unixu) budou tvořit zanedbatelný zbytek. Linux má však získávat pozice především na serverech, kde zřejmě časem nahradí ostatní zastaralé Unixy. Obecně lze očekávat velké sbližování sítí s osobními počítači, ze kterých se stanou spíše jakési pracovní stanice, nebo tencí klienti. Například GNU/Hurd se svou supermoderní architekturou. Lze předpokládat, že časem bude tento systém dokončen a že na hardware dostupném v té době bude setřen výkonnostní rozdíl mezi ním a ostatními klony Unixu. Časem by tak Hurd mohl nahradit Linux, který je přeci jen postaven na základě starého Unixu. Další překvapení by mohla připravit znovuzrozená Amiga, jejíž největší výhodou má být absolutní hardwarová přenositelnost. Na běžném operačním systému, kterým má být pravděpodobně Linux, poběží jediná úloha, virtuální procesor a teprve na něm bude pracovat Amiga. Kromě toho existuje řada systémů, které leží mimo dosah běžného uživatele PC, avšak nepochybně by stálo za to se jimi alespoň inspirovat. Mezi ně nepochybně patří databázový server IBM eServer iSeries, známější pod starším označením AS/400. Dalším výrazným rysem AS/400 je jeho otevřenost. Do operačního systému totiž jeho návrháři průběžně doplňují další a další funkce, aniž by byly likvidovány funkce předchozí. Z toho vyplývá, že stará uživatelská aplikace, která však uživateli vyhovuje, může bez problému pracovat na nejnovějším modelu AS/400 společně s aplikacemi nejmodernějšími. Otevřenost systému je velkou výsadou do budoucna a až jednou dojde k přechodu na biologické počítače, systém AS/400 je natolik obecný, že bude schopen pracovat i na tomto bioware (namísto hardware). AS/400 si lze představit jako vzor pro budoucí počítače.(Koudelka, 2004) 2.1.1
Von Neumannovo a Harvardské schéma počítače
Von Neumannova koncepce počítače Koncepce digitálního počítače vznikla kolem roku 1946. Základní moduly jím navrženého počítače jsou: procesor, řadič, operační paměť, vstupní a výstupní zařízení. Tato koncepce tvoří základ architektury současných počítačů. Struktura je nezávislá na zpracovávaných problémech, na řešení problému se musí zvenčí zavést program, který se musí uložit do paměti. Bez toho programu není stroj schopen práce. Při práci se programy, data, mezivýsledky a konečné výsledky se ukládají do téže paměti.(Kunderová, 2008) Harvardská koncepce počítače Harvardská architektura má na rozdíl od von Neumanovy architektury oddělený paměťový prostor pro data a pro program. Harvardská koncepce dovoluje používat pro paměť programu například paměti typu ROM (Read Only Memory) a umožňuje v podstatě zdvojnásobení velikosti paměti oproti von Neumanově architektuře při stejně veliké adresové sběrnici.(Kunderová, 2008)
12
2.2
Výpočetní systém
Obrázek 2: Von Noumanovo schema počítače (Kunderová, 2008).
2.2
Výpočetní systém
Výpočetní systém je soubor technických a softwarových prostředků, které jsou provázány v jeden celek podporující a sloužící svým uživatelům. Je tvořen řadou samostatných dílů a teprve v okamžiku, kdy jednotlivé funkční části vytvoří synergický celek, kde výkon technických prostředků podporuje funkci aplikací, bezpečnost jejich provozu a ochranu dat před zneužitím, můžeme hovořit o výpočetním systému. Výpočetní systém musí být funkční a výkonný, musíme být schopni jej udržovat v provozu a umět rychle zajistit jeho znovu zprovoznění v případě poruchy nebo výpadku. Rychlý vývoj výpočetní techniky a softwaru přinášejí nové a nové problémy s kompatibilitou a integrací.(Brandejs, 2008) 2.2.1
Hardware — fyzické složka, technické prostředky
Hardware jsou technické součásti počítače. Základní jednotkou v počítači je základní deska. Tato deska propojuje všechny komponenty počítače do jednoho fungujícího celku a jsou napájeny zdrojem, který transformuje napětí ze sítě na přijatelné hodnoty pro jednotlivá zařízení. Při běhu počítače se téměř všechny jeho části zahřívají, a proto musí být vybaven chladicími zařízeními. Procesor Většina procesorů se skládá z několika částí. Dle von Neummanova schématu jsou to ALU (Arithmetic and Logic Unit), která provádí vlastní výpočty a řadič, řídící práci ALU pomocí programu. Procesory ještě obsahují registry, což jsou malé paměťové buňky s velmi rychlým přístupem, kam si procesor ukládá mezivýsledky svých výpočtů. Pokud jsou všechny tyto součásti pohromadě, označujeme je jako mikroprocesor. Uvnitř se procesor skládá z velkého množství tranzistorů a integrovaných obvodů. Právě tranzistory umožňují zaujmout dva stavy – propustit proud a nepropus-
13
2.2
Výpočetní systém
tit proud a lze je velmi miniaturizovat. Pro počet tranzistorů platil dlouhou dobu tzv. Moorův zákon, který říká, že počet aktivních prvků se bude každou jednotlivou dekádu zdvojnásobovat. Procesory rozlišujeme podle architektury, modelu, taktovací frekvence a šířky dat. Architektura procesoru záleží na postupu výroby procesoru. Jednotlivé architektury procesorů jsou téměř vždy vzájemně nekompatibilní, protože jsou vyrobené na úplně jiných principech. Mezi nejznámější architektury procesorů patří procesory firem Intel, AMD (Advanced Micro Devices), IBM, a Motorola. Procesory Intel a AMD jsou vzájemně kompatibilní a konkurují si. Taktovací frekvence procesoru určuje rychlost zpracování dat. Udává se v Hz a vyjadřuje počet operací, které dokáže zpracovat za jednu sekundu. Šířka dat udává jaké množství dat je procesor schopen zpracovat v rámci jedné instrukce. První procesory zpracovávaly 4, 8, 16 bitů, dnes je standardem 32 bitová šířka, ale začínají se prosazovat i 64 bitové procesory. Obecně platí, že 64 bitový procesor je několikanásobně výkonnější než 32 bitový procesor o stejné taktovací frekvenci. Mikroprocesory dle druhu instrukčního souboru dělíme: • CISC — (Complete instruction set computer) – vybavení procesorů s co nejúplnější instrukční sadou (převládá u PC). • RISC — (Reduced intruction set computer) – pouze základní instrukce a instrukce pro konkrétní aplikace (Workstation). Založena na předpokladu, že frekvence používání některých složitých instrukcí je malá. Instrukční sada obsahuje malý počet jednoduchých instrukcí (cca 30).(Zmrzlý, 1996) Paměť Paměť počítače slouží k uchovávání informací. Ve von Neumannově blokovém schématu je paměť prostředníkem mezi periferiemi a procesorem. Paměti dělíme podle mnoha kritérií, jakou jsou například: synchronní/asynchronní, asociativní/neasociativní, jednocestné/vícecestné a paměti s fyzickou nebo virtuální adresací. Základní rozdělení ovšem je na vnitřní a vnější. • Vnitřní — jako vnitřní paměť se u počítače označuje paměť, ke které má zpravidla procesor přímý přístup. Je zpravidla volatilní (nestálá) a po vypnutí počítače se její obsah ztrácí. Vnitřní pamětí se v architektuře počítače označuje paměť určená pro uložení strojového kódu běžících procesů a pro data těmito procesy právě zpracovávaná. Mají výrazně menší kapacitu a naopak výrazně rychlejší přístupovou dobu. Mezi vnitřní paměti řadíme například: operační paměť – RAM (Random Access Memory), registr procesoru, vyrovnávací paměti cache nebo video paměť.(Šiška, 2004) • Vnější — vnější paměť představuje v architektuře počítače paměť určenou k trvalému ukládání informací, tedy programů a dat. Její obsah se vypnutím počítače neztrácí, jsou tedy elektricky nezávislé. K vnější paměti nemá procesor počítače zpravidla přímý přístup. Vnější paměť můžeme rozdělit na stálou a výměnou paměť. Operační systém k přístupu do vnější paměti používá ovladače zařízení a data jsou organizována do souborů podle pravidel použitého souborového systému. Zástupcem je například pevný disk (HDD).(Brych, 2005) 14
2.3
Operační systém
Vstupní a výstupní zařízení Zařízení, které zprostředkovávají kontakt počítače s okolím. Můžeme je rozdělit na vstupní zařízení, které odesílají informace z okolí dovnitř do počítače a výstupní zařízení, které naopak informace předávají zevnitř z počítače směrem ven. Pomocí vstupních zařízení můžeme počítače ovládat. Jsou to zařízení jako: klávesnice, monitor, myš, tiskárna apod.(Brandejs, 2008) 2.2.2
Software — logická složka, programové vybavení
Operační systém Operační systém je základní programové vybavení počítače. Je to rozhraní, jehož prostřednictvím uživatel komunikuje s hardwarovými prostředky počítače. Podrobně bude popsán v další kapitole. Aplikační vrstva Jedná se o programové vybavení počítače, se kterým pracuje již samotný uživatel. Zpravidla netvoří součást operačního systému a je doinstalován jako jeho nástavba podle požadavků uživatele. Slouží a podporuje práci uživatele na stroji a snaží se o její co největší usnadnění, zjednodušení. Aplikační programy komunikují s operačním systémem. Mezi aplikační software patří zejména: kancelářské aplikace (Microsoft Office a OpenOffice.org), firemní aplikace (ekonomické, obchodní, logistické nebo výrobní software), grafické programy (CAD systems, Corel Corporation), speciální aplikace a software, databázové programy a další.(Brandejs, 2008)
2.3
Operační systém
Bez příslušného softwaru je počítač jenom hromada elektroniky, která vydává teplo. Pokud je hardware srdcem počítače, je software jeho duší. Operační systém je soubor systémových programů, které jsou zavedeny do paměti počítače při jeho startu a zůstávají v činnosti až do jeho vypnutí. V zásadě platí, že teprve operační systém představuje charakteristiku počítače. Většina uživatelů PC používá jeden nebo více operačních systémů, z nichž každý může mít jiný vzhled chování. Skládá se z jádra (kernel) a pomocných systémových nástrojů.(Brych, 2005) Operační systém je velmi komplexní software, jehož vývoj je mnohem složitější a náročnější, než vývoj obyčejných programů. Definice operačního systému není ustálená: „OS je soubor programů, které minimalizují úsilí uživatele při maximálním využití výpočetního systému.ÿ (L. Petrlík) „Operating systems fulfill two functions: managing the resources of computing among the competing demands of the systems users, and providing a high-level environment for programming and program execution.ÿ (P.J. Denning) Operační systém plní tři základní funkce:
15
2.3
Operační systém
• Ovládání počítače — umožňuje uživateli spouštět programy, předávat jim vstupy a získávat jejich výstupy s výsledky. Přitom se programátoři snaží o co, pro uživatele, nejpříjemnější pracovní prostředí (CLI a GUI). • Abstrakce hardware — vytváří rozhraní (vrstvu) pro programy, které abstrahuje ovládání hardware a dalších funkcí do snadno použitelných funkcí (API). • Správa prostředků — přiděluje a odebírá procesům, uživatelům, souborům systémové prostředky počítače (procesor, paměť, diskový prostor).(Brych, 2005) 2.3.1
Struktura operačního systému
Jádro Jádro je srdcem operačního systému. Zajišťuje komunikaci s hardwarem a poskytuje aplikacím své služby, jako správu procesů, paměti, souborových systémů, podporu sítí atd. Ke komunikaci s hardwarem slouží ovladače. Podle architektury operačního systému se typicky rozlišuje: • Mikrokernel — mikrojádro, jádro je velice jednoduché a obsahuje pouze zcela základní funkce. Zbytek operačního systému je mimo toto jádro v aplikacích, používané dříve. • Makrokernel — monolitické jádro, jádro je rozsáhlé, obsahuje velké množství funkcí pro všechny aspekty činnosti operačního systému včetně například souborového systému). Dnes nejpoužívanějším kompromisem je modulární jádro, které je fakticky makrojádrem (celé běží v privilegovaném režimu) ovšem jeho značná část je tvořena takzvanými moduly, které je možné přidávat a odebírat za běhu systému. Knihovny Jsou klíčovou součástí systému. Díky tomu, že je GNU/Linux open source, velké množství kódu je právě v knihovnách. Jedná se především o věci standardní, jako jsou např. operace se soubory, či matematické funkce jako sin, ale existují například knihovny GTK a Qt, sloužící pro vykreslování tlačítek a dalšího rozhraní. Proces Proces vlastně není nic jiného, než program, který je spuštěn a běží. Synonymem pro proces může být slovo úloha (task). Dnešní operační systémy jsou víceúlohové, takže v něm může současně běžet více procesů. Stejně jako soubory, tak i procesy jsou vlastněny určitým uživatelem a podléhají přístupovým právům. Program Program je soubor na disku, který si může být spuštěn a bude vykonávat nějakou činnost. Při spuštění se nahraje do paměti a tím se z něj stane proces. Jeden program (např. textový editor vi) tedy může být spuštěn více uživateli. Každý z nich má ale svůj vlastní proces. Souborový systém Souborový systém (filesystem) je označení pro způsob organizace informací (ve formě souborů) tak, aby bylo možné je snadno najít a přistupovat k nim. Souborové systémy mohou používat paměťová média jako pevný disk nebo CD. Souborový sys16
2.3
Operační systém
tém umožňuje ukládat data do souborů, které jsou označeny názvy. Obvykle také umožňuje vytvářet adresáře, pomocí kterých lze soubory organizovat do stromové struktury. Vstupně výstupní zařízení Zařízení, které zprostředkovávají kontakt počítače s okolím. Můžeme je rozdělit na vstupní zařízení, které odesílají informace z okolí dovnitř do počítače a výstupní zařízení, které naopak informace předávají zevnitř z počítače směrem ven. Pomocí vstupních zařízení můžeme počítače ovládat.(Brych, 2005)
Obrázek 3: Struktura operačního systému(Kunderová, 2008).
2.3.2
Základní architektury operačních systémů
Monolitický operační systém Jsou to takové operační systémy, které obsahují monolitické jádro OS, jehož veškerý kód běží ve stejném paměťovém prostoru (v jádře), který se anglicky označuje jako kernel space. Tím se liší od tzv. mikrojádra, které většinu tradičních činností monolitického jádra, jako je třeba správa souborových systémů, implementuje v procesech, které běží v uživatelském paměťovém prostoru. Přestože jsou jádra psána tak, aby byla činnost jednotlivých režimů oddělená, jsou jednotlivé části velice silně provázány. Protože sdílejí stejný paměťový prostor, může chyba v jednom subsystému zablokovat jiný, nebo dokonce shodit celé jádro. Na druhou stranu, pokud je dbáno na správnou implementaci jednotlivých částí, je monolitické jádro velice efektivní. Typickým zástupcem monolitického jádra je Unix. Modulární operační systém Unixové jádro je typickým příkladem monolitického jádra a ani jeho pokračovatelé FreeBSD, Linux, nebo Solaris nejsou jiní. Ovšem na rozdíl od Unixu, přidávají podporu nahrávání modulů za běhu, tudíž není nutné restartovat celý systém, stačí nahrát potřebné moduly, které se připojí do jaderného adresového prostoru. Základním rozdílem mezi monolitickým jádrem a mikrojádrem je v tom, že u monolitického jádra běží celé jádro v jednom paměťovém prostoru. Při natahování modulu dochází k jistému časovému zpoždění, které je ovšem minimální. Mikrojádrové operační systémy Mikrojádrové operační systémy jsou systémy, které mají jádro operačního systému, které obsahuje jen základní funkčnost pro běh operačního systému. Typicky obsahuje jen správu paměti a správu řízení procesů. Ostatní funkční bloky jako správa souborového systému, správa síťových rozhraní, apod. je v operačním systému s mikrojádrem řešena formou samostatných procesů (tzv. serverů v modelu klient-server). 17
2.3
Operační systém
Příklad operačního systému s mikrojádrem je MINIX nebo QNX. Výhodou tohoto uspořádání je omezení množství kódu běžícího v privilegovaném režimu, snadnější programování systému pomocí rozdělení na více samostatných logických celků a též vyšší schopnost operačního systému se udržet v chodu i poté co dojde v některém z podsystémů k závažné chybě. Hybridní operační systém Hybridní jádro je jádro operačního systému, které kombinuje vlastnosti monolitického jádra a mikrojádra. Část kódu je přímo součástí jádra a sdílí jaderný paměťový prostor (jako monolitická jádra), zatímco jiná část je řešena formou samostatných procesů (jako mikrojádra). Hybridní jádro používá rodina Windows NT (Windows 2000, Windows XP, Windows Server 2003, Windows Vista), rodina Windows CE (Windows Mobile). Exojádra Experimentální jádra poskytující velmi nízké rozhraní zaměřené na bezpečné sdílení prostředků. Příklady: Aegis, Nemesis.(Wikipedie, 2009) 2.3.3
Klasifikace operačních systémů
Každé z následně popisovaných vlastností operačních systému má i své, méně vyspělý antonym. Popis takového antonymu nemá význam, jejich popis logicky vyplývá z následujicích pojmů. Dříve, v dobách kdy byly počítače velké, drahé a pomalé, bylo nutné je využívat co nejefektivněji a aby počítač mohl sloužit co možná nejvíce uživatelům. Více úlohový Více úlohový operační systém nazveme takový systém, který nám umožňuje současný běh více programu současně (paralelně). Umožňuje správu více procesů na jednoprocesorovém systému. Aby byl možný běh více úloh (procesů) ve sdílení čase, je potřeba, aby procesor uměl tzv. plánování procesů (proces scheduling), a pracoval v režimu ochrany paměti. Toto je docíleno následujícími možnými způsoby: 1. Multitasking Je schopnost počítače, resp. operačního systému provádět (přinejmenším zdánlivě) několik úloh současně. Dnešní operační systémy jsou typicky víceúlohové, sem patří např. Microsoft Windows či Linux. Naopak MS-DOS je příkladem jednoúlohového systému, na kterém vždy běží pouze jediný program a teprve po jeho ukončení je možno spustit jiný. Multitasking může být realizován mnoha způsoby. Základní dělení je na skutečný multitasking a simulovaný. Opravdu 100% skutečný multitasking se v praxi příliš neobjevuje, běžné operační systémy podporují druhou zmiňovanou techniku, ale pokud je počítač vybaven více procesory, jsou úlohy mezi tyto procesory rozděleny tak, aby alespoň některé úlohy mohly běžet současně. • Kooperativní multitasking (též nepreemptivní) vyžaduje aktivní spoluúčast běžících úloh. Každá úloha je povinna dostatečně často voláním systémové funkce předat řízení zpět operačnímu systému, který díky tomu 18
2.3
Operační systém
může spustit jinou úlohu, která se po chvíli opět dobrovolně vzdá procesoru atd. Nevýhodou skutečnost, že chybně naprogramovaná úloha, která nevrátí řízení zpět operačnímu systému, způsobí úplné zastavení systému i ostatních úloh. • Preemptivní multitasking přiděluje a odebírá procesor jednotlivým úlohám. O jejich čase, který mohou strávit na procesoru, plně rozhoduje operační systém. V pravidelných intervalech (typicky zhruba 10 ms). Preemptivní multitasking používají MS Windows od verze 95 (v řadě NT je od začátku), Mac OS od Mac OS X, jádro Unix nebo Linux od svého vzniku. Výhodou tohoto řešení je, že nedochází k „zatuhnutíÿ počítače, neboť i v případě, že úloha zhavaruje, odebere operační systém dané úloze řízení a přidělí časové kvantum ostatním úlohám.(Šafařík, 2004) 2. Multiprogramming Technika honě podobná multitaskingu. Instrukce a data různých programů jsou společně v operační paměti a střídají se na procesoru, dokud nejsou všechny úlohy ve frontě zpracovány.(Šafařík, 2004) 3. Time-sharing Technika přidělování časových kvant. Vznikla v roce 1957, z důvodu sdílení výpočetního prostředí více uživateli. Princip spočíval v přidělování pevných časových kvant operačním systémem. Každý běžící program strávil na procesoru přesnou dobu a potom se jeho stav uložil do paměti a začala se vykonávat jinak naplánovaná úloha. Jedná se o pseudo paralelizmus.(Šafařík, 2004) Více vláknový (multithreading) Schopnost programu sám sebe větvit. Program se může větvit na tak zvaná vlákna (threads), která mohou běžet současně. Proces, se tak může skládat z několika současně běžících úloh (vláken). Možnost provádění paralelního zpracování větví výpočtu v rámci jednoho procesu nad jedním adresným prostorem (více vláknová aplikace). Všechna vlákna jedné aplikace sdílejí stejné systémové zdroje například paměť (na rozdíl od multitaskingu, kde jsou jednotlivé zdroje zcela oddělené). Čas jednotlivým vláknům přiděluje mulit vláknový operační systém. Dnešní procesory jsou konstruovány jako více vláknové (souběžný běh až stovek vláken současně). Operační systémy přechází od plánování procesů na plánování vláken.(Vavrečková, 2009) Více procesorový (multiprocessing) Obecné označení pro operační systém, kde několik procesorů (CPU) pracuje společně na zpracovávání jedné úlohy a využívá sdílenou operační paměť. Může se jednat jak o počítačový systém s více fyzickými procesory, tak i o systém s jedním (nebo více) vícejádrovými procesory. Pro využívání této technologie je nutné, aby daný operační systém byl multiprocesorový (multiprocessing-ready). Existuje mnoho variací na základní koncepci multiprocesingu. Jejich odlišnosti jsou obecně dány mírou nezávislosti operací rozličných procesorů. Multiprocessing dále dělíme: • Volně sdružený multiprocesing — procesory provádějí příbuzné úkoly, ale operují spíše jako by to byly samostatné procesory.
19
2.3
Operační systém
• Těsně sdružený multiprocesing — operace procesorů jsou výrazně těsněji integrovány. Je typické, že sdílí paměť a dokonce mohou mít i sdílenou vyrovnávací paměť cache. • Asymetrický multiprocesing — procesor provádí různé druhy úkolů. • Symetrický multiprocesing — použité procesory jsou identické a mají rovnoprávný přístup ke všem systémovým zdrojům.(Vavrečková, 2009) Více uživatelský (multi-user) Více uživatelský operační systém je takový operační systém, který umožňuje souběžný přístup více uživatelů současně, a to tak že uživatele se vzájemně nijak neovlivňují. Procesy, jež uživatelé vytváří, sdílí výpočetní prostředí i paměť. Je nutné aby, operační systém zajistil jejich správu. To se děje pomocí již popsaných metod multitaskingu, chráněného režimu přidělováno paměti. Operační systém v podstatě uživateli vytváří virtuální prostředí tvářící se, jako by měl počítač sám pro sebe. Nejznámějšími více uživatelskými operačními systémy jsou například Unix, Linux, Windows NT/2000/Xp. 2.3.4
Linux/Unix
UNIX je víceúlohový, víceuživatelský. Je plně 32 a 64 bitový. Je celý napsán v programovacím jazyku C, který k tomuto účelu byl vyvinut. UNIX byl vytvořen Kenem Thompsonem a Dennisem Ritchiem roku 1969 v Bellových laboratořích firmy AT&T. Je upraven pro různé mikroprocesory a rozličné architektury počítačových sítí. Vyhledávaný pro svoje zabezpečení, rozšiřitelnost. Většina světových serverů na Internetu běží na nějaké „odrůděÿ Unixu. V poslední době se hodně rozšiřuje Linux. Oproti Windows Linux přináší především mnohem častější aktualizace včetně bezpečnostních, a také častěji se objevují nové verze (obvykle v intervalech asi půl roku). Dále větší spolehlivost a transparentnost (proto je nasazen na serverech), velkou výhodou je také skutečnost že některé verze Linuxu jsou bezplatně stáhnutelné z Internetu pod tzv. GNU licenci. Operační systémy řady Unix a Linux se také vyznačují vysokou bezpečností, a to jednak díky propracovanému systému bezpečnostních politik (iptables) a také díky tomu, že není celosvětově tolik rozšířen jako Windows (cca 1% celosvětového zastoupení na uživatelských PC). Vlastním tvůrcem Linuxu je Linus Torvalds, který ještě jako student informatiky na univerzitě v Helsinkách, roku 1991 poslal na Internet první verzi Linuxu (0.1) na jeho dalším vývoji se však podílely tisíce dalších vývojářů, dobrovolníků z celého světa. Dnes je nejrozšířenější verze jádra 2.6. Pro jádro Linuxu platí: verze se sudým číslem za tečkou jsou stabilní (”stable”), verze s lichým číslem za tečkou jsou vývojové (”testing”), po odchytání všech nedostatků se přehoupnou na sudé číslo. Nejznámější distribuce jsou: RedHat, Fedora, Mandrake, SuSE, Debian, MacOS X, Knoppix.(Bach, 1993) Struktura systému Základní struktura operačního systému Linux je třívrstvá a každá vrstva má v rámci 20
2.3
Operační systém
systému relativně autonomní postavení. Na obrázku 4 je znázorněna architektura systému UNIX. Technické prostředky ve středu diagramu poskytují operačnímu systému základní služby. Operační systém spolupracuje prostřednictvím jádra přímo s technickými prostředky počítače, poskytuje programům základní služby a odděluje je tak od technických odlišností jednotlivých počítačů. Jádro systému je izolováno od ostatních uživatelských programů, a tím je docílena nezávislost na použitém technickém prostředí. Lze je tak snadno přenášet mezi systémy UNIX/Linux. Programy typu sell a editory ed a vi, zobrazené ve vnější vrstvě, spolupracují s jádrem prostřednictvím přesně definované množiny volání jádra. Volání jádra nařizují jádru, aby pro volající program vykonalo nějakou operaci. Řada programů uvedených na obrázku je součástí standardní konfigurace systému UNIX a jsou známy jako příkazy. V této vrstvě mohou být uloženy i samostatné uživatelské programy (a.out, vznikl kompilaci jazyka C). Další aplikační programy jsou vytvářeny programy nižší úrovně, a proto je na obrázku znázorněna ještě vnější vrstva. Do této vrstvy patři i standardní překladač jazyka C (cc, gcc). Na obrázku 4 je znázorněna dvouúrovňová hierarchie aplikačních programů. Uživatelé však mohou hierarchii rozšířit o libovolný počet úrovní.(Bach, 1993)
Obrázek 4: Architektura OS Unix/Linux (Bach, 1993).
Kernel Kernel se v počítačové terminologii nazývá jádro operačního systému Unix/Linux, tedy program, který koordinuje činnost ostatních programů a zprostředkovává jim prostředky počítače. Hlavní úkol jádra spočívá v přidělování paměti a času procesoru (či procesorů) programům, ovládání zařízení počítače (pomocí ovladačů) a abstrakci funkcí (aby bylo např. možné načítat soubory z pevného disku a z jednotky CD-ROM stejným příkazem). 21
2.3
Operační systém
• Správa procesu — hlavním úkolem jádra je umožnit vykonávání aplikací a podporovat je metodami jako je abstrakce hardware. K běhu aplikace jádro typicky nastavuje adresní prostor pro aplikaci, nahrává soubory obsahující aplikační kód do paměti (stránkování paměti), nastavuje zásobník pro program a poté předává řízení na pozici uvnitř programu, kde začíná jeho vykonávání. Jádro řídí a přiděluje čas a prostor pro proces, toto se děje pomoci již popsaných technik, kooperativní nebo preemptivní multi-tasking, multi-threading a multiprocesing. • Správa paměti — jádro má úplný přístup k paměti systému a musí umožnit procesům přistupovat k paměti bezpečně a kdykoliv potřebují. Virtuální adresování (dosažené stránkováním nebo segmentací) umožňuje jádru nahradit fyzickou adresu virtuální. Virtuální adresový prostor může být pro každý proces jiný. Virtualizace paměti umožňuje operačnímu systému používat jiná datová úložiště, jako je pevný disk k ukládání dat, která by jinak byla v hlavní paměti (RAM). Díky tomu může operační systém umožnit programům používat více paměti, než má systém fyzicky k dispozici. Jádro také dbá na to, aby virtuální paměť byla rozdělena do dvou částí. Jedna bývá rezervována pro jádro (prostor jádra) a ostatní pro aplikace (uživatelský prostor). • Správa zařízení — při potřebě procesu vykonat konkrétní funkci, proces potřebuje přistupovat k periferním zařízením připojeným k počítači, která jsou ovládána jádrem přes ovladače zařízení. Například, když chce proces zobrazit něco na obrazovce, musí aplikace vytvořit požadavek pro jádro, které ho předá řadiči displeje, který je poté zodpovědný za skutečné vykreslení znaků nebo pixelů. Jádro musí udržovat seznam dostupných zařízení. • Systémové služby — realizace služby požadované externím uživatelem (procesem) pomocí systémového volání nebo knihovních funkcí.(Bach, 1993) Vrstva systémových volání (volání jádra) a knihovních funkcí K vykonání užitečné práce musí být proces schopen přistupovat k službám jádra. Každé jádro to realizuje jinak, ale musí poskytnout knihovnu C nebo API, které poté vyvolávají související funkce jádra. • Systémové volání pro práci s procesy: – vytváření, pozastavení a ukončení procesu, – získání číselných charakteristik procesu, – komunikace mezi procesy přes programové kanály, – synchronizace procesů pomocí signálů. • Systémové volání pro I/O operace — požadavky programu na: – obsazení/uvolnění zařízení, – přenosy dat z/do I/O zařízení. Vrstva systémových programů (utilit) • Systémové utility, systémové příkazy — standardní základní programové vybavení z hlediska uživatele nezbytná součást OS. • Shell — programy vytvářející uživatelské rozhraní, umožňují komunikaci uživatele s OS (interpretace příkazů, spouštění aplikačních programů, atd.).
22
2.3
Operační systém
• Standardní překladač jazyka C, preprocesor, dvouprůchodový překladač, asembler a sestavovací program. Tímto třívrstvým modelem prostupují 3 základní problémové oblasti. Procesy Proces je provádění programu a skládá se ze vzorku (slabik), které procesor interpretuje jako strojové instrukce, dat. Tím, jak jádro plánuje procesy pro zpracování, vzniká dojem, že simultánně běží více procesů a zároveň několik procesů může být instancí jednoho programu. Toto zdání však je klamné, proces se provádí přesnou posloupností svých vlastních instrukcí a nepřeskakuje do kódu jiného procesu. Procesy mohou komunikovat s ostatními procesy a se zbytkem systému prostřednictvím volání jádra. Samotný proces je entita vytvořena voláním jádra fork. Každý proces s výjimkou procesu 0, v systémech Unix/Linux je vytvořen svým rodičovským procesem voláním jádra fork. Proces, který fork vyvolal, se nazývá rodičovský. Vytvořený proces se nazývá potomek. Každý proces má pouze jediného rodiče, ale může mít mnoho potomků. Jádro identifikuje každý proces jeho číslem procesu (PID), proces 0, speciální proces, který se vytváří při zavedení systému a nemá žádného rodiče. Po vytvoření prvního potomka procesu 1 tzv. init, se z procesu 0 stane tzv. vyměňovací proces (swapper). Proces 1 (init) je pak předkem každého procesu v systému. O správu procesů se stará operační systém, stejně tak o plánování výpočetních a paměťových prostředků. Při zpracování se může proces nacházet v některém z následujících stavů. Možné stavy procesu také popisuje obrázek č. 5.(Bach, 1993) • proces momentálně běží v uživatelském režimu, • proces momentálně běží v režimu jádra, • proces neběží, ale je připravený ke zpracování v tomto stavu se může nacházet mnoho procesu. Jakmile ho plánovač (scheduler) vybere, přepne ho do některého stavu run. Zároveň se určí, který proces bude zpracován jako další v pořadí, • proces je zablokovaný proces převede sám sebe do tohoto stavu v případě, že nemůže dál pokračovat ve zpracování, např. když čeká na v/v operace. Souborový systém Systém souboru systému UNIX/Linux je charakterizován: • hierarchickou strukturou, • konzistentním přístupem k datům souboru, • schopností vytvářet a rušit soubory, • dynamickým zvětšováním souborů, • ochranou dat v souborech a adresářích, • schopností přidělování práv k souborům a adresářům, • přístupem k periferním zařízením (terminály, disky, magnetické pasky) jako k souborům. Systém souborů je organizován jako strom s jedním kořenovým uzlem, nazývaným kořen (/). Každý nelistový uzel struktury systému souborů je adresář (má další potomky) a soubory tvořící listy jsou buď adresáře (prázdné), obyčejné soubory nebo speciální soubory.
23
2.3
Operační systém
Obrázek 5: Stavy procesu a přechody mezi stavy (Bach, 1993).
Jméno souboru je dáno jménem celé cesty, která popisuje, jak je možné najít soubor v hierarchii systému souborů. Jméno cesty je tvořeno posloupností jmen a složek, oddělených znaménkem lomítko. Úplné jméno souboru, začíná lomítkem a specifikuje soubor, který lze najit postupným prohledáváním od kořene po posloupnosti adresářů až k souboru. Povolení přístupu k souborům je řízeno přístupovými právy, spojeným se souborem. Přístupová práva mohou být nastavena nezávisle pro čtení, zápis a vykonávání souboru (read, write, execute, (rwx)). Tato oprávnění mohou být nastavena pro tři uživatelské skupiny vlastníka skupinu a všechny ostatní. Každý soubor v souborovém systému UNIX je reprezentován unikátním i-uzlem. I-uzel obsahuje informace potřebné k tomu, aby proces mohl provést přístup k souboru, např. vlastníka, přístupová práva, velikost, umístění v stromové struktuře. Procesy přistupují k souborům pomocí přesně definovaných volání jádra a specifikují soubor znakovým řetězcem, představujícím úplnou cestu k danému souboru.(Bach, 1993) Subsystém vstupu a výstupu Subsystém vstupu a výstupu (dále jen v/v subsystém) umožňuje procesům komunikovat s periferními zařízeními, např. s disky, terminály, tiskárnami, síťovími prostředky. Moduly jádra, které tyto zařízení řídí, se nazývají ovladače zařízení. V systému existuje pro každý druh zařízení samostatný ovladač, pomocí kterého jádro komunikuje se zařízením. Naopak například u terminálů, může systém komunikovat se všemi terminály pomocí jednoho ovladače. Ovladač však musí mezi jednotlivými terminály rozlišovat, výstup určený pro jeden terminál, nesmí být poslán jinému. Systém UNIX osahuje dva typy zařízení, bloková a znaková zařízení. Bloková se jeví zbytku systému jako zařízení s náhodným přístupem, jsou to například disky 24
2.3
Operační systém
nebo magnetické pásky. Znaková zařízení zahrnují všechna ostatní zařízení, terminály a síťová media. Z uživatelského hlediska se tyto v/v zařízení se realizují prostřednictvím systému souborů, každé zařízení má úplné jméno, vypadající jako soubor v hierarchii systému souboru. Tyto speciální soubory, spojené s konkrétním zařízením, mají své i-uzly. Speciální soubor se liší od ostatních, typem souboru uloženým v i-uzlu (typy: blokový speciální nebo znakový speciální). Speciální soubor také obsahuje dvojicí identifikačních čísel (hlavní, vedlejší) a třídou zařízení (blokové, znakové). Hlavní číslo určuje typ zařízení k identifikaci příslušného ovládače. Pro každou třídu je v jádru tabulka zařízení obsahující adresy jednotlivých ovládačů. Hlavní číslo je pak indexem do tabulky blokových nebo znakových zařízení. Vedlejší číslo udává konkrétní zařízení v rámci typu určeného hlavním číslem (např. číslo diskové mechaniky, podkanál multiplexoru, přes který jsou připojeny terminály apod.). Jak blokové, tak znakové zařízení, je reprezentováno dvěma speciálními soubory (speciální soubor pro znakové zařízení a speciální soubor pro blokové zařízení), kde je popsáno rozhraní jádra vůči ovladačům konkrétních zařízení. Každý typ zařízení má v tabulce uloženy záznamy, které směřují k příslušným rozhraním ovladače pro dané volání. Poté například pro volání jádra open/close pro disk, přečte z i-uzlu hlavní a vedlejší číslo odkazující na speciální soubor, kde najde informace o místě uložení příslušného ovladače k danému zařízení.(Bach, 1993) 2.3.5
MS Windows
Windows NT původně byly vyvíjeny Microsoftem pro IBM jako nový operační systém typu OS/2, ale protože firma IBM se rozhodla během vývoje tohoto systému přerušit spolupráci, Microsoft změnil typ platformy a název systému na Windows NT. Zde se budeme věnovat systémům Windows NT do verze 5.0 (tj. Windows 2000), prakticky vše však platí i pro Windows XP. Windows NT má vrstvenou, modulární architekturu. Pracuje systémem client-server a obsahuje následující součásti.(Vavrečková, 2009) Objekty Windows NT nejsou čistě objektovým operačním systémem, ale používají objekty pro reprezentaci systémových zdrojů. Systému to umožňuje pracovat se všemi objekty jednotným způsobem včetně zajištění bezpečnosti. Přirozené objekty jsou I/O zařízení, paměť, soubory, procesy, semafory, mohou být vytvářeny další. Procesy Každý proces má minimálně jeden podproces. I samotné podprocesy provádějí výpočty. Každý proces má tabulku deskriptorů objektů, což je vlastně odkaz na systémové zdroje, které má k dispozici vlastní adresový prostor přidělený správcem paměti. Každý podproces vlastní: • 2 zásobníky (pro uživatelský a privilegovaný mód), • sadu registrů, které obsahují stav procesoru, • soukromá ukládací oblast v paměti používaná podsystémy a knihovnami DLL. Hlavní části systému tvoří tyto soubory: 25
2.3
Operační systém
• NTDLL.DLL — pokud některý proces v uživatelském režimu volá systémovou službu, volání jde vždy přes tento soubor, aby se vyloučila možnost nepovolené modifikace systémových knihoven a dalších systémových zdrojů. • KERNEL32.DLL, USER32.DLL, GDI32.DLL — systémové dynamické knihovny pro Win32 API, obsah je podobný jako u jiných verzí Windows. • NTOSKRNL.EXE — exekutiva (řídicí program operačního systému) a jádro. • HALL.DLL — vrstva abstrakce hardware (oddělena z důvodu snadné přenositelnosti systému, komunikuje jako jediná přímo s hardwarem, ovladače volají rutiny této vrstvy, to je jeden z důvodů nekompatibility ovladačů pro Win 3.x, 95 v NT). • SERVICES.EXE — proces řadiče služeb. Zajišťuje běh služeb, což jsou speciální procesy běžící i bez přihlášení uživatele. • WINLOGON.EXE — proces přihlašování uživatele. 2.3.6
Rozdělení operačních systému z hlediska nasazení
Mainframe OS Mainframy se vyvinuly z původních sálových počítačů a mají za sebou 40 let vývoje. Jde tedy o systém starší než první verze Unixu. Dnes je prakticky jediným dodavatelem firma IBM se svou produktovou řadou zSeries. Mainframy dnes nabízí mnohem více než i ty nejlepší systémy postavené na unixových systémech nebo na architektuře PC. Jde o počítače určené speciálně pro podnikové aplikace. Mezi nejdůležitější z nich patří: databáze, zpracování transakcí, webové servery. Mezi čistě mainframové operační systémy patří v současnosti hlavně z/OS nebo z/VM. Dále je podporován Unix (tzv. Unix System Services) a v neposlední řadě také Linux for zSeries, o který je v současnosti veliký zájem. Velký fenomén dnešní doby, nejen ve firmách, ale také ve vládních institucích, je Green IT. IBM nedávno oznámilo projekt konsolidace 3 900 klasických serverů na 30 mainframů, což představuje roční úsporu energie zhruba 50 milionů dolarů. Nároky na energii ve srovnání s distribuovanou platformou jsou v takovém případě zhruba třetinové, nemluvě o ceně za pronájem prostor pro datacentra.(Oberhuber, 1999) Multiprocesorové OS Superpočítač je všeobecné označení pro velmi výkonný počítač nebo počítačový systém. V některých pramenech se hovoří o minimálně desetinásobně vyšším výkonu oproti běžně dostupným počítačům. Superpočítače se používají pro složité výpočetní úlohy, např. výzkum genomu, fyzikální modelování (např. modelování jaderných výbuchů, předpovídání počasí), kryptoanalýzu apod. Architektura superpočítačů je postavená na propojení velkého množství běžných počítačových procesorů prostřednictvím speciální vysokorychlostní počítačové sítě, tzv. cluster. Mezi superpočítače lze zařadit i spojení velkého množství běžných osobních počítačů pomocí internetu (grinding). Jedním z nejznámějších projektů tohoto druhu je SETIhome, který se zabývá analýzou signálů z radioteleskopu a dosahuje výkonu přibližně 250 teraflops (biliónů operací za sekundu). U nás nej26
2.3
Operační systém
silnějším paralelní superpočítač je umístěný v Ústavu fyziky atmosféry Akademie věd ČR a nese jméno Amálka. Má výpočetní výkon je 4,07 TFlops, 320 vícejadrových procesorů Intel Xeon 5140 (Woodcrest) a běží na operačním systému linux Slackware.(Wikipedie, 2009) Server OS Server je centrální prvek a zároveň nezbytná součást počítačové sítě, na který jsou napojeny jednotlivé počítače, a server pro ně vykonává určitou službu podle toho, k čemu je určen. Server je mnohem robustnější nežli klasický počítač. Má zdvojené pevné disky, pravidelně zálohovaná data. Operační systém na serveru musí být robustní, spolehlivý, stabilní, bezpečný, víceuživatelský. Takové vlastnosti mají zejména operační systémy Unix, Linux, které si drží v serverovém více jak 70% nasazení na serverech.(Wikipedie, 2009) OS osobních počítačů V roce 1977 bylo celosvětově používáno 40 tisíc počítačů, v roce 2001 to bylo již 125 miliónů a o sedm let později, v červnu minulého roku 2008, počet počítačů poprvé překonal 1 miliardu. Očekává se, že v roce 2014 dosáhne počet funkčních PC na světě hodnoty 2 miliardy. Každý osobní počítač musí mít operační systém. Ten by měl být zejména uživatelsky příjemný, lehko ovladatelný, zároveň bezpečný a spolehlivý, neboť uživatelé po celém světě na těchto systémech pracují a uchovávají svá data. Trhu s desktopovými operačními systémy dnes vévodí firma Microsoft se svými Windows Xp, Vista a Windows 7 a to 88,7%. Konkurent Microsoftu, firma Aplle, se drží se svým produktem MAC OS X, s 9,6% podílem na druhém místě. Co se týká Linuxu, ten se posunul z lednových 0,83% na 0,88% a stále víc se blíží k 1% hranici. Malé zastoupení OS Linux je dáno zejména ne příliš uživatelsky snadnou obsluhou, která v začátcích mnohé odradí. Současný trend Linuxu je stát se s pomocí vyspělých GUI uživatelsky více přívětivým. V budoucnu by se tak mohl stát velkým konkurentem Microsoftu. 2.3.7
Základní pojmy z oblasti operačních systémů
Program — soubor přesně definovaného formátu, obsahující instrukce a data. Proces — systémový objekt vznikne spuštěním programu to je entita realizující výpočet podle programu. Operační systém přidělí procesu paměťový prostor a čas procesoru. Vlákno — objekt vytvářený v rámci procesu. Schopnost procesu se dělit na menší části (vlákna). Tradiční proces je tvořen jedním vláknem. Plánování procesů řeší výběr, kterému následujícímu procesu bude přidělen procesor a proces tak poběží, přičemž výběr je závislý na prioritách jednotlivých procesů a algoritmu, kterým výběr proběhne. Vlákna podléhají plánování a je jim přidělován čas na konkrétním procesoru. Operační systém — softwarové vybavení počítače. Po spuštění je zaveden do paměti počítače a zůstává v činnosti až do jeho vypnutí. Privilegovaný režim — je metoda, jak ochránit počítačový systém proti chybě 27
2.4
Virtualizace
hardware nebo software. V privilegovaném režimu běží operační systém, zatímco uživatelské úlohy jsou procesorem prováděny v neprivilegovaném stavu. Procesor musí rozlišovat alespoň tyto dva stavy, avšak mohou jich rozlišovat i více. Neprivilegovaný režim — též uživatelský režim. V tomto režimu procesoru je možné provádět pouze neprivilegované instrukce, které chod počítače ohrozit nemohou a tedy v něm běží všechny uživatelské programy. Paralelizmus — umožňuje využít výhod rozdělování úloh na více procesorů (scaling up) a rozdělování úloh na více počítačů (scaling out) pomocí sítě. To významně snižuje celkovou dobu zpracování. Pseudoparalelismus — Několik procesů se vzájemně dělí o časová kvanta na jednom CPU. Operační systém by měl umožnit uživatelům spustit několik programů současně a přepínat mezi nimi. GNU — je rekurzivní zkratka GNU’s Not Unix, je to projekt, který vytváří volně šiřitelný software na profesionální úrovni. Do projektu se může zapojit kdokoliv, kdo chce svými programy přispívat do už velmi rozsáhlé množiny volně šiřitelných, ale přesto velmi kvalitních programů. Rozsáhlost projektu mnohé překvapuje právě proto, že jde vlastně o práci zdarma. Dalším pojmem s tím souvisejícím je Open Source (otevřený zdrojový kód). Znamená to, že programy jsou poskytovány včetně zdrojového kódu.
2.4
Virtualizace
Pojem virtualizace se začal ve větší míře objevovat již v šedesátých letech. První počítače byly v podstatě osobní, jejich kapacita (výpočetní možnosti, velikost paměti) i způsob práce s nimi vyžadovaly, že v daném okamžiku s konkrétním počítačem vždy pracoval jeden člověk. S postupným růstem výkonu počítačů začalo být možné, aby počítač současně zpracovával dva a více programů. Od toho byl již jen krůček k tomu, aby ty současně zpracovávané programy nepatřily stejnému uživateli, dochází k prvnímu souběžnému sdílení počítačů. Každé sdílení má však svá rizika, program jednoho uživatele může (omylem nebo záměrně) poškodit data nebo program druhého, zhroucení jednoho programu může vést ke zhroucení celého počítače (a tedy i programů ostatních uživatelů), náročné požadavky na paměť či výkon procesoru jednoho uživatele, mohou vést k faktickému zahlcení počítače. Virtualizace je jedním z konceptů, který se snaží výše zmíněné problémy vyřešit. Virtualizace v podstatě představuje iluzi, v níž nějaký zdroj (např. paměť, procesor, disk a další periferie) zmnožíme (tedy vytvoříme řadu kopií) a každý uživatel dostane jednu nebo více z těchto kopií k dispozici. Protože kopie vznikají pouze jako koncepty, hovoříme o virtuálních objektech. Máme virtuální paměť, virtuální disk a samozřejmě také virtuální procesor. V konečném důsledku tak můžeme uživateli nabídnout celý virtuální počítač, který je tvořen z virtuálních komponent. Uživatel má tak pocit naprosté kontroly (vlastnictví), reálně přitom sdílí konkrétní fyzické zdroje s dalšími uživateli. Vzniká tak velice dynamická IT infrastruktura.
28
2.4
Virtualizace
Ne všechny součásti počítače však lze snadno virtualizovat. Zatímco v případě paměti je to natolik snadné, že si mnohdy ani neuvědomujeme, že při práci s pamětí pracujeme prakticky vždy pouze s její virtualizovanou formou, v případě procesorů je to mnohem obtížnější a co se týče disků, zde zase pomohly hierarchické systémy souborů, v nichž uživatel dostane „svůjÿ prostor a v něm má již prakticky plnou volnost. Každý proces, který je v počítači spuštěn, pracuje automaticky s iluzí „vlastníhoÿ procesoru. Plná virtualizace však předpokládá, že tuto iluzi má ne pouze jeden proces, ale všechny procesy, které tvoří operační systém a uživatelské programy dohromady. Nezávislost jednotlivých virtuálních strojů a operačních sytémů v nich běžících je možné využít například při vývoji software, programů, nestabilních jader operačních systémů, testování kompatibility aplikačních programů bez nutnosti instalace jednotlivých operačních systémů na jeden počítač (příliš časově náročné), nebo je případné pořízení mnoha počítačů příliš nákladné. Dalším využitím, které se v dnešní době stává stále více využívaným, je konsolidace serveru, diverzifikace hardwarových prostředků, nebo naopak agregace výpočetního výkonu. Touto problematikou se bude zabývat následující text. Virtualizace umožňuje naplnit jeden ze slibů informatiky – plnou individualizaci prostředí při vysoce efektivním využití zdrojů. Virtualizace snižuje náklady spojené se správou, nákupem hardwaru a platbami za energie.(Matyska, 2008) 2.4.1
Historie
Jako první začala virtualizaci nabízet firma IBM koncem šedesátých let minulého století na svých sálových počítačích (mainframes) vybavených operačním systémem OS/370. Ten dovoloval rozdělit jeden fyzický počítač na několik virtuálních strojů, přitom v každém virtuálním stroji běžel plnohodnotný operační systém a uživatelské programy. Hlavním důvodem vzniku, byla nutnost rozdělit (i na dnešní dobu poměrně slušný) výkon sálových počítačů a to vzhledem k jejich velkým pořizovacím nákladům. Virtualizace v OS/370 stála na tzv. hypervisoru, neboli virtuálním monitoru (virtual monitor). Takto se do dnešních dnů označuje programová vrstva, která přímo komunikuje s fyzickým vybavením počítače a zajišťuje virtualizaci všech součástí. Virtuální počítače (virtual machines) se pak spouští jako procesy tohoto virtuálního monitoru a přitom tyto „procesyÿ mají charakter plných virtuálních počítačů. Uživatel (resp. správce) může v každém virtuálním počítači instalovat samostatný operační systém a v něm následně spouštět programy. Při plné virtualizaci operační systém, ani programy si nejsou vědomy toho, že běží ve virtuálním, nikoliv ve fyzickém počítači a není třeba je jakkoliv modifikovat. První virtualizační software pro běžné PC se objevil v 90. letech 20. století v podobě dnes nejznámějšího a nejvyužívanějšího produktu VMware, který provádí úplnou virtualizaci, přestože se jedná na architektuře PC o velmi složitou záležitost. V roce 2000 se objevuje první paravirtualizér Xen. Tyto virtualizační techniky jsou 29
2.4
Virtualizace
efektivnější z hlediska celkové režie, ale vyžadují úpravy v jádře operačních sytémů, což ne každý výrobce poskytne. Také různé metody partitioningu, které sice neumožňují současný běh více operačních systémů, ale dovolují rozdělit daný operační systém do několika nezávislých častí (kontextů, zón, partitions), začínají být dosti populární. Rok 2006 je pro virtualizaci přelomovým. Open source implementace partitioningu jako Linux VServer, Open VZ si postupně nacházejí cestu do bežně používaných distribucí GNU/Linux. Stejně běžnou součástí GNU/Linux začíná být také open source paravirtualizér Xen. Pravděpodobně pod sílícím tlakem na používání těchto volně dostupných vizualizačních nástrojů uvolnila společnost VMware některé konkrétní produkty své softwarové řady pro plnou virtualizaci k volnému používaní (zatím co nejvýkonnější high-end řady tohoto softwaru jsou stále komerční). Společnost Microsoft reaguje získáním produktů Virtual PC a Virtual server a v roce 2008 vyvinula vlastní produkt postavený na principu Xenu, Hyper-V, který je implementován do operačního systému Windows Server 2008. V posledních letech si také výrobci mikroprocesorů Intel a AMD uvědomují vzrůstající význam virtualizace a rozšiřují instrukční sady platforem IA-32, IA-64 a AMD64 o možnosti, jak vyřešit dosavadní velkou pracnost a časovou režii plné virtualizace. Rozšíření o technologie Silvervale, Pacifica obecně SVM (Security and Virtual Machine, firmy AMD) a Vanderpool obecně VMX (Virtualisation Machine eXtensions, firmy Intel). Nasazení nějaké formy virtualizace se brzo stane stejně běžné, jako je nyní používání operačních systému s virtuální pamětí. Umožní efektivnější využití hardwarových zdrojů, snazší administraci, vyšší dostupnost služeb a větší bezpečnost.(Matyska, 2008) 2.4.2
Výhody virtualizace
Možnost oddělení vývojového prostředí Původní hlavní potřebou, proč virtualizace vznikla, byla potřeba důkladného oddělení vývojových prostředí. Při vývoji software určeného pro široký trh je třeba ověřit jeho vlastnosti v prostředí nejrůznějších operačních systémů resp. jejich konfigurací. Instalace, správa a provoz odpovídajícího počtu fyzických počítačů je velmi drahá. Alternativa, kdy na jeden počítač postupně bootujeme různé verze operačních systémů, je zase časově příliš náročná. Nasazení virtuálních počítačů umožňuje rozmanitým verzím operačních systémů sdílet jediný fyzický počítač, přitom způsob práce garantuje, že nedochází k jeho přetížení.(Hájek, 2007) Serverová konsolidace S prudkým rozvojem informačních technologií docházelo ve firmách od počátku devadesátých let dvacátého století často k rychlému a neplánovanému rozrůstání informačních technologií. A to zejména v oblasti serverových systémů. U firem často dochází k bezhlavému nakupování malých levných PC sestav, pro izolované řešení, jednotlivými odděleními firmy. Jako příklad lze uvést, že firma vlastní samostatný 30
2.4
Virtualizace
server, určený pro výpočet mez, který pracuje jen jeden den v měsíci. Tyto izolované systémy byly pod správou jednotlivých oddělení, tak že docházelo k neefektivní správě a koordinaci IT prostředků. Ty se staly neflexibilními, nekonzistentními a vyžadovaly vysoké náklady na údržbu, obnovu i správu. Hromadné nasazení aplikací (např. antivirový software) se stalo často takřka nemožné. Důsledkem rozdělení systémů do mnoha menších bylo také to, že servery byly průměrně vytíženy jen na deset až třicet pět procent svého výkonu (u serverů na platformě x86 v průměru dokonce jen pět procent). Ironií však je, že při špičkovém zatížení byl výkon serverů nedostatečný a nastalá situace byla často řešena dalším bezhlavým nákupem serverů.(Hájek, 2007) Tento nastíněný problém řeší serverové konsolidace, proces spojování malých nezávislých serverových systémů v systémy velké. Jako příklad lze uvést firemní prostředí, kde běží na jednotlivých mnoha serverech různé druhy aplikací jako jsou databáze, webový server, doménový server a tak dále, pomocí virtualizace spojíme tyto servery tak, aby běžely virtuálně na jednom fyzickém a přitom každý na samostatném operačním systému.(Hájek, 2007) Díky konsolidaci tak lze ušetřit IT zdroje, protože mohou být efektivněji využity, zjednodušit správu systémů její centralizací a tím získat i lepší kontrolu nad systémem, a také větší bezpečnost. Zároveň dojde k odstranění skrytých a operačních nákladů spojených s údržbou mnoha lokací i k úspoře prostoru ve výpočetních centrech. Konsolidace ale není jen nahrazení několika menších systémů většími. Jde o komplexní optimalizaci celé IT infrastruktury tj. včetně serverů, databázových strojů, aplikací sítí a celkové správy s cílem tuto infrastrukturu zjednodušit a vytvořit tak stabilní základ pro další rozvoj vlastní infrastruktury i kvalitní zázemí pro nové projekty.(Hájek, 2007) Serverová dedikace Poskytovatelé různých internetových služeb zjistili, že mohou provozovat jednotlivé služby v dedikovaných virtuálních počítačích – tím zajistí maximální vyladění výpočetního prostředí (operačního systému) pro konkrétní službu a přitom tyto dedikované servery (zejména v případě služeb s malým zatížením procesoru) je možné i nadále provozovat na jednom fyzickém počítači. Na jednom počítači je tak možné provozovat virtuální počítač s operačním systémem Linux a v něm webový server Apache, a současně další virtuální počítač, v němž jsou nainstalovány např. Windows XP a Internet Exchange.(Hájek, 2007) Dynamické rozdělování výkonu Například v oblasti webových serverů je obvyklé, že takový server je fyzicky tvořen množinou (clusterem) počítačů, které společně obsluhují uživatelské požadavky. V nevirtualizovaném prostředí je předem dána velikost clusteru a v případě nízkého zájmu je řada počítačů nevyužita, přesto může ve špičkách docházet k přetížení celého systému a pomalé reakci. Pokud však provozujeme dva či více webových serverů, které jsou zatíženy v jinou dobu, můžeme při zatížení zvyšovat počet virtuálních strojů obsluhujících konkrétní webovou aplikaci a při snížení zájmu počet virtuálních strojů snižovat. Na stejném principu lze ale sdílet i fyzická prostředí 31
2.4
Virtualizace
se zcela rozdílným primárním využitím, např. webové servery (ve dne pro rychlé obsloužení zákazníků) a databázové aplikace (v noci pro rozsáhlé operace nad databází).(Hájek, 2007) Podpora starších operačních systémů Další zajímavou vlastností virtualizace je podpora starších operačních systémů na novém hardwaru (odborně nazývaná jako hardwarová abstrakce). V nejednom podnikovém prostředí je dosud provozováno například účetnictví z důvodu systémových požadavků na historickém, již nepodporovaném operačním systému, který běží na starším, dosluhujícím hardwaru. Přechod na nový, spolehlivý hardware není obvykle možný, jelikož už pro provozovaný operační systém nejsou výrobcem dodávány ovladače. Řešením může být provozovat takovou stanici plnohodnotně ve virtuálním prostředí na současném, podporovaném hardwaru.(Hájek, 2007) Migrace Je-li virtuální rozhraní (rozhraní mezi virtualizační vrstvou a virtuálním strojem, resp. Operačním systémem) dostatečně nezávislé na fyzickém rozhraní (rozhraní mezi virtualizační vrstvou a fyzickým strojem), můžeme uvažovat o možnosti ukládání aktuálního kompletního stavu virtuálního stroje a přesun (migrace) tohoto stavu na jiný fyzický stroj. Toto nám umožňuje, například provádět změny hardwarové konfigurace fyzického stroje bez nutnosti znatelného výpadku dostupnosti služeb. Migrace také slouží jako způsob zvýšení spolehlivosti služeb (v případě hardwarového selhaní lze přesunout funkční stav virtuálního stoje na záložní fyzický stoj).(Hájek, 2007) 2.4.3
Základní pojmy z oblasti virtualizace
K pochopení problematiky virtualizace bude předpokládán význam několika základních pojmů, jejichž vzájemný vztah názorně demonstrují obrázky 6 a 7. Fyzický stroj — výpočetní systém, realizovaný pomocí klasických elektronických nebo mechanických součástek. Fyzické rozhraní — rozhraní mezi fyzickým strojem a virtualizační vrstvou. Virtuální stoj — v tomto textu bude virtuální stroj chápán pouze jako hardwarový virtuální stoj tedy jako, izolovaný výpočetní systém poskytující všechny prostředky pro samostatný běh programů. V případě simulace a virtualizace představuje virtuální stoj téměř přesnou repliku fyzického stoje. Hostitelský software poskytuje tuto schopnost a je často označován jako hypervisor nebo virtuální strojový monitor (virtual machine monitor). Takovéto softwarové virtualizace mohou být prováděny ve třech hlavních úrovních: emulace, paravirtualizace a plná virtualizace. Hypervisor — software který je nahrán ještě dříve než jádro systému. (U KVM je hypervisor přímo součástí kernelu dom-0 jako modul). Je součástí virtualizační vrstvy, mezi jednotlivými virtuálními stroji a fyzickým strojem. Hypervisor přiděluje a obhospodařuje paměť a obsluhuje input/output operace které zprostředkovává virtuálním strojům. Hypervolání — žádost kódu běžícího ve virtuálním stroji o spuštění funkce hyper32
2.4
Virtualizace
visoru. Jde v podstatě o analogii systémového volání aplikačního programu a jádra operačního systému v operačním systému. Paravirtualizér — program řídící paravirtualizaci v prostředí Xenu se nazývá Doména 0 (Dom 0). Virtualizér — program řídící plnou virtualizaci. Virtualizační vrstva — souhrnné označení pro virtualizér, paravirtualizer nebo simulaci. Virtualizační vrstva bývá umístěna mezi hardwarem a virtuálními servery. Virtuální rozhraní — tento pojem se v textu vyskytne ve dvou významech a to za pohledu virtualizace operačních systému budeme virtuální rozhraní jako rozhraní mezi virtualizační vrstvou a virtuálním strojem. A dále pak z pohledu síťového virtuálního rozhraní, což je softwarově vytvořené síťové rozhraní na nějakém konkrétním fyzickém rozhraní. Takto vytvořené virtuální rozhraní můžeme pak adresovat stejně tak jak fyzické. Virtuální stroj — izolovaný výpočetní systém, který poskytuje všechny prostředky pro samostatný běh programů. V případě simulace a plné virtualizace představuje virtuální stroj podstatě přesnou repliku stroje fyzického.
33
3
3 3.1 3.1.1
POUŽITÉ METODY
Použité metody Způsob přístupu k fyzickému rozhraní Přímé rozhraní s hardwarem
Metoda kdy virtuální stroj může svým fyzickým rozhraním přímo komunikovat s fyzickým strojem, tedy hardwarovými prostředky. Tato metoda bývá používána velice často a využívá ji zejména úplná virtualizace a paravirtualizace, naopak u simulace využití nemá. Výhody tohoto přístupu jsou především v minimální režii a nejsnadnějším způsobu kontroly systémových prostředků, naopak znamenají komplikaci v tom, že hypervisor musí sám zprostředkovávat, inicializovat a řídit hardwarové prostředky, to v praxi často znamená že hypervisor musí obsahovat další vrstvu ovladačů zařízení, jako by se jednalo o operační systém.(Děcký, 2006)
Obrázek 6: Virtualizace metodou přímého rozhraní s hardwarem.
3.1.2
Rozhraní s hostitelským operačním systémem
Na rozdíl od předchozí varianty zde inicializaci hardwarových prostředků má na starosti hostitelský operační systém, tzv. simulátor. Hypervisor v něm potom běží jako aplikační program a virtualizuje hardwarové prostředky již zprostředkované rozhraním operačního systému. Jádro hostitelského i hostovaného operačního systému je často nutné rozšířit o možnost řízení některých privilegovaných stavů, což je jedna z velkých nevýhod této metody, neboť ne všechny operační systémy se dají takto upravit. Další nevýhoda je poněkud vetší. Režie způsobená rozhraním a navíc občasné nebezpečí konfliktů (plynoucí z toho, že hypervisor musí být schopen ovlivňovat některé privilegované stavy). Naopak výhoda spočívá ve snadnější podpoře různého hardwaru z hlediska simulátoru, tedy hypervisoru (o tu se stará hostitelský operační systém).(Děcký, 2006) Tato virtualizační metoda bývá typicky využívána u simulace často také u paravirtualizace a plné virtualizace. 34
3.2
Metody virtualizace počítačů
Obrázek 7: Virtualizace s rozhraním s hostitelským operačním systémem.
3.1.3
Hybridní rozhraní
Především u paravirtualizéru, jako je Xen, se využívá metoda hybridní. Jak název napovídá, jedná se o kombinaci obou předchozích přístupů. Paravirtualizér sice běží na hardwaru, ale sám inicializuje a řídí jen hardware nezbytný ke svému běhu. O ostatní periferie se stará operační systém v jednom privilegovaném systému, který má přístup k omezeným prostředkům stroje fyzického a zároveň jejich funkce zprostředkovává dalším virtuálním strojům.
3.2
Metody virtualizace počítačů
Na metody virtualizace počítačů lze nahlížet různými hledisky. Mezi základní dělení patří způsob implementace samotné virtualizační vrstvy a umístění fyzické vrstvy. Zda fyzická vrstva komunikuje přímo s hardwarem nebo komunikuje s hypervisorem, tedy s hostitelským operačním systémem. Jednotlivé virtualizační metody se liší především ve způsobu realizace virtualizační vrstvy. 3.2.1
Emulace a Simulace
Emulace a Simulace patří mezi nejstarší techniky virtualizace. Nástroje umožňují spustit i operační systémy, které nejsou původně určeny pro architekturu fyzického systému. Princip fungování je založen na vytvoření celého virtuálního stroje softwarovými prostředky hostujícího systému. Virtuální prostředí vytváří kompletní virtuální hardware (instrukční sadu a chování procesoru, přístup do paměti, komunikační protokoly, chování sběrnic, vstupně/výstupní zařízení) a umožňuje tak, spustit nemodifikovaný operační systém. Metoda je používána k vývoji aplikací pro procesory, které ještě nejsou na trhu a známá je pouze jejich specifikace, nebo k simulaci prostředí jiných architektur. 35
3.2
Metody virtualizace počítačů
Stejný princip je použit i pro simulaci periférií a operační paměti. Nevýhodou je obrovská režie tohoto přístupu. Každou instrukci je nutno buď interpretovat stavovým automatem představující virtuální procesor, nebo přeložit do instrukční sady kompatibilní s hostujícím systémem (dynamická rekompilace). Virtualizačními technikami jsou například Bochs, PearPC, Qemu (bez akceleračního modulu) a emulátor Hercules. Rozdíl mezi simulací a emulací není příliš patrný. Obvykle se uvádí, že emulace, na rozdíl od simulace, se nesnaží vytvářet virtuální stroje jako přesnou repliku stroje fyzického, ale snaží se simulovat fyzický stroj ve velmi zjednodušené podobě. Simuluje jen některé fyzické prostředky, případně ne zcela přesně. Simulace procesoru Instrukční sada, registry a chování procesoru patří k základním součástem každého simulátoru. Samostatné simulátory procesoru bývají často nazývány emulátory. Simulátor procesoru každou simulovanou instrukci interpretuje, nikoliv přímo provádí na fyzickém procesoru (přestože jsou obě instrukční sady shodné). Při běhu virtuálního stroje, je každá instrukce dekódována a jedná-li se o přípustnou instrukci, je zavolána funkce simulátoru, která ji odsimuluje (změní vnitřní stav simulátoru podle instrukce). Tento způsob se nazývá nativní interpretace. Simulátory používající tento způsob interpretace mají největší režii, přesto se tato metoda používá, protože umožňuje simulátor snadno naprogramovat a udržovat. Dynamická metoda interpretace (dynamická rekompilace) se snaží přeložit co největší posloupnost instrukcí virtuálního stroje do odpovídajících posloupností fyzického stroje a takto přeložený kód používá pokud možno opakovaně.(Děcký, 2006) 3.2.2
Plná virtualizace
V praxi se na desktopech a serverech nejčastěji setkáme s technikou plné virtualizace (full virtualization). Tato technika znamená, že virtualizujeme důsledně všechny součásti počítače. V takovémto případě nabízíme prostředí, v němž běžící operační systém nemůže žádným způsobem poznat, že nemá přístup k fyzickému technickému vybavení (hardware). Operační systém ani aplikační programy nepotřebují žádné modifikace. Jedná se v podstatě o ideální stav, kdy dochází k plnému oddělení fyzické vrstvy, veškeré programy běží pouze na virtuálním hardware a přístup k fyzickému vybavení je vždy zprostředkován. Virtuální stroj běží zcela samostatně, bez vědomí toho že je virtuální. Pokud se hostovaný systém pokusí přistoupit k hardware, jeho požadavek je odchycen virtualizérem (jako je na přiklad VMware ESX server), upraven (čtení z virtuálního disku je třeba převést na čtení určitého místa na disku fyzickém a podobně) a následně předán ke zpracování hostitelskému systému. Výsledek putuje stejně strastiplným způsobem zpět do hostitelského systému. To je největší slabinou plné virtualizace. Veškeré vstupně-výstupní operace jsou obtěžkány značnou režií. Novější procesory Intelu a AMD mají speciální technologie (Vanderpool resp. Pacifica), které v tomto směru usnadňují programování virtualizačního software, ale 36
3.2
Metody virtualizace počítačů
nepřenášejí téměř žádný nárůst výkonu. Procesor, který umožňuje plnou virtualizaci, musí být schopen běžet ve dvou režimech, privilegovaném a uživatelském. Instrukční sada takového procesoru se dělí do třech skupin: • Privilegovaná instrukce — jsou to instrukce operačního systému (HALT, IN, OUT). Slouží k volaní hardwaru na úrovni operačního systému. Pokud dojde k volání privilegované instrukce v uživatelském režimu je vyvolána výjimka. Pokud jsou volány v privilegovaném režimu, výjimku nevyvolají. • Instrukce ovlivňující stav — instrukce které mění stav zdrojů systému, jako jsou paměti, periferie. • Instrukce závislé na stavu — instrukce které jsou nějakým způsoben závislé na stavu zdrojů systému. Dosáhnout čistě plně vizualizovaného systému je velice komplikované a u většiny dnešních procesorů, nemožné. Například i dnes nejpoužívanější architektura procesoru IA-32, obsahuje instrukce (POPF, CALL, RET, MOV), které nelze jednoznačně rozpoznat, zda-li se jedna o instrukci privilegovanou nebo uživatelskou. Tento problém je řešen složitými prostředky, které znamenají zvýšení režie. Pro dosažení úplné virtualizace jsou nutné tyto podmínky: • Správa paměti — Musí existovat mechanismus na ochranu fyzické paměti. Mechanizmus, který zabrání přepsání paměťového prostoru fyzického (hostitelského), nebo virtuálního stroje (hostovaného) jiným běžícím strojem. Toto se děje pomocí explicitního přidělení paměťového prostoru, metodou bázové adresy, posunutím fyzických adres o přidělenou adresu virtuálního stroje. • Správa přerušení a výjimek — Při běhu virtuálního stroje dochází k žádosti o přerušení a volání výjimek. Ty musí být nejprve rozpoznána a případně ošetřena virtualizérem. Žádost je upravena a vykonána, při cestě zpět musí projít přes virtualizér, který požadavek opět převede a zasimuluje tak virtualnímu stroji obsluhu přerušení. Toto je bez podpory instrukčních sad procesoru velice HW náročné. • Přístup k periferiím — Všechen přístup k periferiím musí být realizován pomocí mechanizmu, který je schopen virtualizér bezpečně odchytit. Plná virtualizace má řadu výhod. Můžeme například virtuální prostředí navrhnout tak, aby nám vyhovovalo (velikost paměti, typ procesoru, typ a kapacitu disku apod.). Programy a operační systémy jsou rovněž zcela nezávislé na konkrétním použitém technickém vybavení. Toto nám umožňuje plnou přenositelnost - operační systém a aplikace běžící na procesoru Intel s architekturou IA-32 můžeme spouštět třeba na počítačích, vybavených procesory AMD. A následně je můžeme přenést na počítače vybavené jiným procesorem, aniž bychom provedli jedinou úpravu na úrovni virtuálního počítače, tedy jádra operačního systému. Nevýhodou je velká režie a pomalé I/O operace.(Děcký, 2006) Nejznámější aplikace využívající plné virtualizace: VMware, VirtualBox, VirtualPC, XEN.
37
3.2
3.2.3
Metody virtualizace počítačů
Paravirtualizace
Základní myšlenkou paravirtualizace je speciálně upravené jádro hostujícího operačního systému (hypervisoru). Tento upravený operační systém tvoří mezivrstvu mezi hostovanými virtuálními stroji a hardwarem. Hostované operační systémy musí být rovněž upraveny. Na rozdíl od plné virtualizace virtuálního stoje ví, že nemají přímí přístup k fyzickému hardwaru, takže všechny přístupy k hardwaru jsou automaticky převedeny na volání hypervisoru. Tím je odstraněna značná část režie spojené se vstupně výstupními operacemi, která byla značnou nevýhodou u plné virtualizace. Samozřejmě i paravirtualizace má své mínusy, největší nevýhoda je zřejmá, hostující i hostovaná jádra systému musí být upraveny, což komplikuje její nasazení (zejména u operačních systémů, jejichž zdrojové kódy nejsou běžně ke stažení) a vede k určité neefektivnosti. Intel proto v poslední době zavedl další systém podpory virtualizace v podobě tzv. Intel Virtualization Technology (IVT). Jedná se o rozšíření možností procesorů tak, že přibývá další úroveň ochrany (ring -1). Virtuální monitor (hostitelský operační systém) tak může obsluhovat několik virtuálních počítačů, které již pracují v prostředí nelišícího se od toho, které je k dispozici ve standardních procesorech bez podpory virtualizace. Operační systémy ve virtuálních počítačích není třeba modifikovat a přitom zůstávají základní výhody paravirtualizace, tj. přímé vykonávání instrukcí virtuálního počítače fyzickým procesorem. Aplikace i samotný systém běží nativně na procesoru stejně jako v případě plné virtualizace. Paravirtualizace je široce využívána při tvorbě virtuálních prostředí nad procesory Intel (a AMD). VMware a Xen patří mezi neznámější systémy, které jsou postaveny na paravirtualizaci. Virtualizace procesoru Každý procesor pracuje alespoň ve dvou různých režimech, a to privilegovaném (přístupný pouze jádru operačního systému) a uživatelském (běží všechny programy). Pokud ale počítač virtualizujeme, potřebujeme ještě jednu úroveň, kde poběží virtuální monitor. Virtuální monitor musí běžet na nejvyšším stupni ochrany. Na stejné úrovni však nemůže automaticky běžet operační systém, protože by mohl ovlivnit stav virtuálního monitoru. Paravirtualizace je tak možná jen díky tomu, že konkrétní procesory podporují více úrovní ochrany. Procesory Intel mají definovány 4 úrovně ochrany, tzv. okruhy (rings). Na nejvyšším stupni ochrany (ring 0) běží operační systém, uživatelské programy běží s nejnižším stupněm ochrany (ring 3). Ostatní stupně se běžně nevyužívají. Pokud použijeme paravirtualizaci, pak virtuální monitor pracuje na nejvyšším stupni ochrany, tj. v okruhu 0. Operační systém virtuálního počítače se posune o jeden stupeň (do okruhu 1), aplikační programy běží stále s nejmenší ochranou. Operační systém má tak stále vyšší úroveň ochrany než aplikační programy, na druhé straně už nemůže provádět operace, které vyžadují plně privilegovaný přístup. Úrovně ochrany však můžeme využít i místo výše zvýšené modifikace privilegovaných instrukcí. Necháme operační systém ve virtuálním počítači provádět
38
3.2
Metody virtualizace počítačů
všechny instrukce, pokud však bude chtít provést „zakázanouÿ operaci (tj. takovou, na kterou teď nemá dostatečná oprávnění), pak dojde k přerušení a řízení převezme virtuální monitor. Ten operaci zkontroluje a provede ji tak, aby správně změnila stav virtuálního počítače. Není v principu třeba měnit operační systém, většina instrukcí běží přímo, pouze privilegované instrukce jsou výrazně pomalejší, protože je musí provést virtuální monitor. Operační systém však může zjistit, že běží ve virtuálním prostředí, protože může mít i na úrovni 1 možnost číst některé části paměti, které jsou ve virtuálním počítači jiné něž ve fyzickém. Pro paravirtualizaci je proto třeba modifikovat některé součásti operačního systému, změny jsou však malé a dobře lokalizovatelné (zvlášť dobře je pak možné provést tyto změny u operačních systémů, k nimž jsou k dispozici zdrojové kódy, i proto začala být tak oblíbená (para)virtualizace v prostředí Linuxu). Přístup k hardware V prostředí Xen je přístup k hardwaru zajišťován vrstvou virtuálního monitoru (Virtual Machine Monitor, VMM). Nad touto vrstvou jsou pak vytvářeny virtuální počítače (Virtual Machines, VM). Jeden z těchto virtuálních počítačů má speciální postavení. V terminologii Xenu se nazývá Doménou 0 (Dom 0). Operační systém, který běží v tomto virtuálním počítači, má přímý přístup k rozhraní virtuálního monitoru, může tedy definovaným způsobem měnit jeho stav a může vytvářet a rušit ostatní virtuální počítače běžící nad VMM. Další zajímavou vlastností Xenu (opět související s paravirtualizací) je to, že může konkrétnímu virtuálnímu počítači přímo zpřístupnit konkrétní rozhraní. Představme si, že v jednom z virtuálních počítačů běží uživatelský program, který intenzivně komunikuje s jiným počítačem prostřednictvím počítačové sítě. Pokud používá virtuální síťovou kartu, pak její propustnost je omezena a velmi zatěžuje procesor. Pokud ale příslušnému virtuálnímu počítači po dobu běhu tohoto uživatelského programu přímo exportujeme rozhraní na fyzickou kartu, pak může síťová komunikace probíhat plnou rychlostí, kterou podporuje příslušný hardware. Samozřejmě v takovém případě kartu může používat pouze tento virtuální počítač, to ale nemusí být na závadu (fyzický počítač může mít více síťových rozhraní, ostatní virtuální počítače pak sdílí ta ostatní).(Matyska, 2008) 3.2.4
Virtualizace na úrovni OS
Virtualizace na úrovni jádra operačního systému je společně s paravirtulizací považována za nejefektivnější typ virtualizace. Virtualizovaná prostředí běží nad společným jádrem, které má přímý přístup k fyzickému hardwaru, tudíž se nevytváří virtuální zařízení. Režijní ztráty jsou způsobeny pouze oddělením procesů, diskových prostorů a síťového provozu serverů. Paravirtualizační prostředí, zastoupené například systémem Xen, nabízejí plnou izolovanost virtuálně běžících OS. V případech, kdy provozujeme více stejných operačních systémů, se však stává celý systém neefektivním, protože některé části operačních systémů běží vícenásobně. Naproti tomu při virtualizaci na úrovni jádra běží všechny virtuální servery nad jedním jádrem. Celý mechanismus pouze rozši39
3.2
Metody virtualizace počítačů
řuje služby jádra OS tak, aby byly schopné odizolovat jednotlivé související skupiny procesů nazývané sekce nebo kontexty a k nim příslušné diskové souborové systémy. V systémech typu unix lze technologii považovat za rozšíření mechanismu chroot. Výhodou řešení je výrazné snížení režijních ztrát (např. pouze 1 - 3% u OpenVZ) a nutnost upravit pouze jádro hostitelského systému. Systém umožňuje měnit limity systémových prostředků za běhu virtuálních serverů. Linux-VServer a OpenVZ přistupují k serverům jako k procesům, kterým můžeme v Linuxu přidělení hardwarových prostředků snadno měnit. Nevýhodou je možnost provozovat pouze operační systémy stejného typu jako upravené jádro, avšak s různými knihovnami a popřípadě různé distribuce. Virtuální stroje založené na virtualizaci na úrovni jádra jsou využívány pro testování software na různých distribucích. Programátor nemusí instalovat celý operační systém, stačí jen potřebné knihovny dané distribuce a programy nutné pro běh virtuálního serveru a testovaného programu. Změna OS je pak otázkou několika málo minut. V samostatném prostředí může běžet antivirus a firewall nezávisle na uživatelském serveru. Bezpečnostní software pak není negativně ovlivněn procesy provozovanými uživateli. Technologii lze použít pro provoz gridů se stejnými, ale na míru upravenými OS. Systém využívají také firmy poskytující provoz, pronájem a prodej serverů. Každý zákazník si upraví server podle svých představ bez ohledu na ostatní uživatele. Poskytovatel služby však může provozovat více virtuálních na jednom fyzickém serveru. Sníží značně náklady a správa takového systému je také podstatně jednodušší. Tento nepříliš náročný způsob virtualizace je výhodný pro výuku. Každý student má k dispozici vlastní server. Chybný úkon však neznamená poškození vlastního operačního systému nebo hardwaru. Toto lze docílit i s pomocí paravirtualizace.(Tomeček, 2007) 3.2.5
Partitioning
Metoda, kdy se na fyzickém stroji nevytváří několik nezávislých operačních systémů, ale vytvoří se pouze iluze oddělených systému (tzv. kontextu). Jádro operačního systému zůstává stejné a je společné pro všechny běžící vizualizované systémy, což sebou nese omezení v tom, že instalované operační systémy si musí být podobné (podporovat stejné jádro). Ke každé samostatné entitě (proces, adresářový prostor, soubor atd.) je připojen tak zvaný identifikátor kontextu do které patří, při přístupu k této entitě se provádí test, zda entita náleží do správného kontextu (tedy zda daný soubor patří konkrétnímu virtuálnímu stroji). Tato metoda je výhodná v tom, že testy nejsou příliš náročné i ve srovnání s mechanizmy paravirtualizace. Využití má metoda Paratitioningu především v oblasti vývoje software, kdy programátor může otestovat svou aplikaci na několika různých distribucích daného operačního systému.(Děcký, 2006)
40
3.3
3.3
Současné virtualizační techniky
Současné virtualizační techniky
V této kapitole budou přiblíženy současné virtualizační techniky. Rozhodně se však nebude jednat o kompletní výčet virtualizačních technik, zejména pak v oblasti starších simulátorů, 8bitových a 16bitových architektur počítačů existuje nepřeberná řada historických technik. Popis takových projektů není předmětem této práce, avšak tato práce bude detailně popisovat paravirtualizační techniku Xen. Tato kapitola také detailněji přiblíží další současné virtualizační techniky, které se nejvíce používají. 3.3.1
Xen
Projekt Xen byl zahájen výzkumným týmem na Univerzitě v Cambridge pod vedením lana Pratta. Později Ian Pratt založil společnost XenSources, Inc., která se v dnešní době stará o vývoj a podporu tohoto volně šířitelného projektu. Xen byl původně vyvíjen jako čistá paravirtualizační technika, ale díky příchodu hardwarové podpory v CPU (Vanderpool a Pacifica) lze od verze 3.0 provozovat v plně virtualizovaném režimu, bez nutnosti upravovat vizualizované operační systémy (což je hlavní nevýhodou Xenu). Současna aktuální verze je 3.4.0, kde jsou implementovány pokročilejší techniky zabezpečení, správy sítové komunikace. Mezi podporované platformy patří IA-32, IA-64, x86-64, AMD-64, PowerPC. Virtuální stroje se v terminologii Xenu nazývají domény, nad těmito doménami existuje jeden řídící operační systém tzv. hypervisor (program přijímající systémová volání). Hypervisor běží v ringu 0, kde je za normálního stavu jádro OS, privilegovaná doména dom0 (v podstatě prostředí operačního systému, ve kterém běžně pracujete) běží spolu s neprivilegovanými doménami domU (tj. virtuálními stroji) v ringu 1 a aplikace potom jako obvykle v ringu 3. Při bootování nejdříve je do ringu 0 zaveden hypervisor, pak se spustí upravené jádro privilegované domény dom0 v prvním ringu. Z něj může být spuštěn další virtuální stroj (doména domU), jehož jádro je zavedeno rovněž v ringu 0. Aplikace v rámci domény pak běží v ringu posledním, tj. třetím. Doména 0 při svém spuštění vytváří backend ovladače zařízení, se kterými posléze komunikují frontend ovladače v jednotlivých doménách U, které tak mohou přistupovat k blokovým zařízením, síťovým rozhraním apod. Jádra hostovaných neprivilegovaných systémů musejí být upravena, což je velká nevýhoda paravirtualizace. Na procesorech s podporou VT-X (Vanderpool Intel) nebo Pacifica (AMD) a od verze Xenu 3.0 a vyšší je možné provozovat hostované domény domU bez změn v jejich jádrech. Podporované operační systémy Většinu unixových systémů s otevřeným kódem je možno použít jako domU, mezi podporované systémy patří Linux, OpenBSD, NetBSD, FreeBSD, Pian 9, Minix, OpenSolaris, Netware a GNU/Hurd. Jako dom0 lze použít Linux, na OpenBSD a FreeBSD. V případě použití hardwarově asistované virtualizace je možné v domU provozovat libovolný neupravený operační systém. 41
3.3
Současné virtualizační techniky
Obrázek 8: Schéma paravirtualizace Xen (www.novell.com).
Virtualizace hardwaru Samotný hypervisor Xenobsluhuje jen velice malou část hardwarového vybavení počítače a zbytek hardwaru ponechává systému v dom0. Do režie hypervisoru spadá řízení procesorů, operační paměti a přístupu k periferiím. Dále poskytuje prostředky pro komunikaci jednotlivých domén mezi sebou. O veškerý ostatní hardware se stará hostující systém v dom0, ten kromě obsluhy těchto zařízení poskytuje i virtuální hardware pro ostatní domény. Diskové úložiště lze pro hostované operační systémy použít libovolný soubor” s blokovým přístupem (tedy i diskové oddíly a podobně). Virtuální síťové karty jsou propojeny do hostujícího systému na odpovídající virtuální zařízení, je tedy možný jak přístup přes nat, tak i bridge a podobně. Virtualizace paměti Překlad paměťových adres jednotlivých domén je realizován standardním stránkovacím mechanizmem. Virtuální adresa se pomocí stránkovacích tabulek převádí na fyzickou. Při běhu paravirtualizace nemají jednotlivé domény v paměti přiřazenu souvislou oblast paměti (blok paměti), ale jen jednotlivé rámce fyzické paměti. Je vytvořena překladová tabulka, která převádí abstraktní rámce na skutečné fyzické rámce. Překladové tabulky jsou chráněny proti zápisu nižší než nejvyšší úrovně, tak že pokus o jejich modifikaci vyvolá výjimku, kterou odchytí hypervisor, požadovanou tabulku vyřadí z mechanismu stránkování a umožni do ní zápis. Virtualizace zdrojů Realizace správy zdrojů se u Xenu liší podle toho zda k hardwaru přistupuje dom0. Nebo domU. Každopádně lze Xen nastavit tak, aby ke zdrojům meli domU přímí přístup. Například v případě sběrnice PCI je konfiguraci poskytnuta pouze určitou povolenou podmnožinu fyzických zařízení. Jinou variantou je správa zdrojů pomocí dom0. Systém běžící jako dom0 má
42
3.3
Současné virtualizační techniky
přímý fyzický přístup hardwaru a poskytuje k němu pomocí backendů rozhraní pro frontem ovladače ostatních domén. Předávání dat probíhá pomocí sdílené paměti. Komunikace mezi hypervisorem a doménami Pro doručování informací o hardwarových přerušeních se u Xenu používá tzv. kanál událostí. Funkce tohoto mechanismu je velice analogická mechanismu obsluhy přerušení na fyzickém stroji.(Děcký, 2006) 3.3.2
VMware
Virtualizační technika podporující plně vizualizační běh. Společnost VMware Inc. přišla s tímto softwarem na trh jako první v oblasti plné virtualizace pro platformu IA-32 a v současné době samozřejmě s podporou 64bitových architektur. Implementace mechanismu virtualizace se hodně přibližuje k popisované metodě plné virtualizace v kapitole 2 Virtualizační metody, je však použita celá řada velmi sofistikovaných metod, aby byla dosažena co největší efektivita běhu. Při plné virtualizaci odpadá nutnost použití operačního systému jako mezivrstvy mezi doménami a hardwarem stroje. Toto umožňuje specifikaci konkrétního typu operačního systému, který bude spravovat virtuální stroje, a implementovat do něj tyto speciální mechanizmy. VMware je lídrem v oblasti plné virtualizace od dob jejího vzniku, většina produktů této společnosti je komerční a zdrojové kódy (až na nedávno uvolněný ESX Server) nejsou k dispozici. Virtualizace hardwaru Tak jak již bylo řečeno výše, u plné virtualizace hypervisor poskytuje doménám dokonalou iluzi přístupu k hardwaru. Virtualizuje všechny fyzické zdroje počítače. Velkým rozdílem oproti paravirtualizaci je možnost simulovat kromě základního hardwaru, jako jsou sběrnice, v/v zařízení, také např. IDE, SCSI, SATA, SCSI a NFS disky. Jako fyzické úložiště je možné použít fyzický disk nebo soubor s blokovým přístupem. Operační systémy Jako hostující operační systém je vyžadován Linux, Windows, Mac OS X nebo některá varianta BSD systému. Ve virtuálním prostředí lze provozovat prakticky libovolný systém odpovídající architektury. Nástroje pro správu Základním administrativním rozhraním je u těchto produktů GUI obalující virtuální obrazovku, u serverových produktů je k dispozici vzdálená konzole se stejnou funkcionalitou. VMware ESX Server, jak již bylo zmíněno v představení produktu, umožňuje správu přes CLI, konzoli, webové rozhraní a aplikací Virtual Instruction Center. Služba VMotion umožňuje transparentní přesun virtuálního stroje mezi fyzickými počítači a dosáhnout tak nulového výpadku. Produktová řada VMware Workstation — Tento produkt se zaměřuje na provoz virtuálních strojů na desktopových systémech s operačnímy systémy Linux, Windows. Mezi významné vlastnosti patří schopnost vytváření „snímkůÿ (snapshots) virtuálních strojů. To 43
3.3
Současné virtualizační techniky
umožňuje uložit stav virtuálního stroje v libovolném okamžiku a pak se k němu vrátit. Dále pak podpora pro 3D akceleraci nebo připojení USB zařízení. VMware Server (dříve VMware GSX Server) — Další zdarma šířený produkt se vyznačuje client-server architekturou umožňující snadnou vzdálenou správu. V porovnání s VMware Workstation je ochuzen o možnosti jako jsou připojení USB zařízení, 3D akcelerace a možnost klonování virtuálních strojů. VMware ESX/ESXi Server — Tato platforma využívá silně upravenou Linuxovou distribuci Red Hat Enterprise Linux. Toto semknutí s operačním systémem umožňuje velice dobrou kontrolu nad přiřazováním prostředků jednotlivým virtuálním strojům. Servisní konzole (Service Console, COS nebo také vmnix) zde obstarává veškeré možnosti správy, ať již přes CLI, webový přístup nebo vzdálenou konzoli podobně jako u VMware Server. ESXi má čtyř stupňovou strukturu licencování produktu, kdy první Free ESXi je zdarma ale má jistá hardwarová omezení, následují produkty Foundation a Standard s cenou přibližně 30 respektive 70 tisíc korun a za nejvyšší řadu Enterprise uživatel zaplatí 100 tisíc korun. Licenční podmínky jsou na jeden server. VMware Virtual Infrastructure — Balík produktů označovaný jako VMware Virtual Infrastructure do sebe zahrnuje produkty VMware ESX Server, VMware Virtual Center (monitorování a správa), Virtual SMP (podpora virtualizace multiprocesorového systému), VMotion (migrace virtuálních strojů) a také služby jako VMware High Availability, VMware Distributed Resource Scheduler a VMware Consolidated Backup.(Nový, 2008) 3.3.3
Microsoft Virtual PC
Velice podařený produkt firmy Connectix, pro platformu IA-32, byl v roce 2003 odkoupen společností Microsoft. Virtual PC lze od roku 2006 stáhnout z Internetu bez poplatku. Jedná se o jednoduchý instalační balík velikosti 18 MB, který se snadno nainstaluje na pracovní stanici. Instalace virtuálního stroje je také velice snadná, pomocí intuitivního menu. Zvolíme OS, cestu k instalačnímu zdroji, velikost disku a operační paměti. Hostitelským operačním systémem muže být pouze řada Windows 2000 a vyší. Hostovaným systémem mohou být všechny operační systémy Microsoft pro IA-32 (včetně 16bitových verzí MS-DOSu) bez oficiální podpory, ale přesto spolehlivě běží také GNU/Linux, Solaris atd. Jedná se o plnou virtualizaci a hostovanému stroji je zpřístupněn omezený virtuální hardwer. Virtuální stroje tak mají k dispozici například procesor Pentium II, grafickou kartu S3 Trio64, Sound Blaster 16, atd. U této metody virtualizace je nutné počítat s tím, že běh virtuálního stroje si alokuje jistou část zdrojů hostitelského počítače, nutno tedy počítat s omezením výkonu.(Děcký, 2006) 3.3.4
Microsoft Virtual Server
Microsoft Virtual Server je v současné verzi (2005 R2) uvolněn zdarma i pro komerční použití. Oproti Microsoft Virtual PC je primárně zaměřen na hostování virtuálních 44
3.3
Současné virtualizační techniky
serverových operačních systémů ve verzi 2005 R2 se jedná o tyto systémy: Windows XP, Windows Small Business Server, Windows Server 2003, Windows 2000 Server a Windows NT Server 4.0 SP6. Rovněž lze použít některé distribuce Linuxu. Virtual Server může sloužit k otestování změn konfigurace v bezpečném virtuálním prostředí nebo přímo k ostrému provozu více virtuálních serverů na jednom fyzickém stroji. Oproti Virtual PC je Virtual Server více vláknovou aplikací, která se spouští jako systémová služba, virtuální servery se tedy mohou spouštět automaticky při startu hostitelského systému. Program podporuje víceprocesorové systémy, velké kapacity paměti RAM, proměnlivou alokaci paměti a dynamickou alokaci procesoru pro každý virtuální stroj. Virtual Server umožňuje snadnou vzdálenou správu serverů přes webové rozhraní (je kompatibilní s běžnými nástroji Windows Serveru), přičemž komunikace je zabezpečena vrstvou SSL. Webové prostředí pro správu virtuálních počítačů zobrazuje obr 5. Pro připojení na konzoli počítače slouží speciální VMRC klient. V rámci programu lze vytvořit libovolný počet samostatných virtuálních sítí LAN, pro každou virtuální síť LAN lze nakonfigurovat vlastní DHCP server a do vytvořených sítí lze přidávat jednotlivé virtuální stroje. Pomocí programu Virtual Server 2005 Migration Toolkit je možné provést migraci fyzického serveru do virtuálního prostředí. Virtual PC a Virtual Server jsou do jisté míry kompatibilní (vychází ze společného programového základu) a virtuální stroje je možné mezi nimi přenášet. Virtual Server zatím jako jediný produkt Microsoftu využívá také hardwarovou podporu virtualizace.(Děcký, 2006) 3.3.5
QEMU
Projekt QEMU sám sebe označuje jako emulátor a virtualizér s otevřeným kódem. Původním cílem projektu Fabrice Bellarda bylo vytvoření emulátoru procesoru. Během vývoje se k tomuto přidala emulace celého virtuálního počítače a schopnost plné virtualizace (bez hardwarové asistence). Podporované techniky QEMU používá techniku dynamické rekompilace a dokáže pracovat ve dvou režimech: • Režim emulace uživatelského módu — tento režim umožňuje spuštění binárních souborů určených pro jinou architekturu. V případě kombinace tohoto přístupu s projektem Wine je možné takto spouštět aplikace pro OS Windows na víceméně libovolné platformě. • Režim emulace celého virtuálního stroje — v tomto režimu dochází k emulaci celého počítače a je tedy možno provozovat libovolný neupravený operační systém. Projekt je zařazován mezi emulátory, existuje pro něj však nadstavba KQEMU akcelerátor umožňující běh uživatelského kódu (ring 3) hostovaného systému bez nutnosti emulace (pro jádro a periferie se stále používá emulace). Tento princip lze označit za kombinaci mezi plnou virtualizací a emulací. QEMU dokáže emulovat tyto architektury: IA-32, x86-64 (pouze v režimu emulace celého systému), ARM, 45
3.3
Současné virtualizační techniky
SPARC, PowerPC a MIPS. Na mnoha dalších se pracuje. Nároky na hostující procesor jsou kompatibilita s IA-32, x86-64 nebo PowerPC (další ve vývoji). KQEMU akcelerátor lze použít na platformách IA-32 a x86-64. Operační systémy Jako hostující si můžeme při použití QEMU zvolit jak většinu UNIX-ových systémů tak i OS Windows a vzhledem k možnosti emulace celého počítače lze pod QEMU provozovat prakticky libovolný operační systém.(Nový, 2008) 3.3.6
Linux-VServer
Produktem VServer se dostáváme do oblasti virtualizace na úrovni operačního systému. Linux-VServer je patch linuxového jádra umožňující izolaci procesů, původní projekt Jacquese Gélinase je nyní spravován Herbertem Pötzlem a je šířen pod licencí GPL. Virtualizovaný systém běží přímo pod jádrem hostujícího systému a ten se stará o separaci. Virtualizované prostředí Každý hostovaný systém má k dispozici svoji hiearchii procesů, samostatné uživatele včetně uživatele root a podobně. Přístup k diskovému úložišti se podobá unixovému nástroji choot, virtualizované prostředí má jako kořenový adresář k dispozici podstrom adresářové struktury hostujícího systému. Podobný princip funguje i při přístupu do sítě - jednotlivým procesům je dovoleno naslouchat a odesílat pakety pouze na/z přidělených IP adres.(Nový, 2008) 3.3.7
Hyper-V
Hyper-V je technologií nové generace pro serverovou virtualizaci postavenou na úplné virtualizaci za pomocí hypervisoru. Systém je opravdovou novinkou. V současné době je uvolněna pouze Beta verze, která je součástí nového operačního systému od Microsoftu Windows Server 2008. Již první ohlasy ale naznačují velký potenciál tohoto virualizačního nástroje. Microsoft se při implementaci tohoto produktu opřel o podporu virtualizace v procesorech a naprogramoval celý systém od začátku na míru virtualizaci (tzv. na zelené louce). Až bude dostupná plná verze Hyper-V a produkt se postaví do čela mnoha firemních infrastruktur, můžeme očekávat funkční srovnání s konkurenčními produkty a ostrý boj jednotlivých technologií. Už teď se ale dá ale bez větších pochybností říci, že Hyper-V bude důstojným a silným konkurentem a solidně zahýbe vodami virtualizace. Pro Hyper-V je charakteristické: • Podpora 32-bitové i 64-bitové architektury na virtuálních stanicích. • Možnost až 32 GB operační paměti pro každou virtuální stanici. • Windows Server 2008 s Hyper-V podporuje až 2 TB RAM. • Podpora tzv. Quick Migration, tedy přesunu virtuálních stanic mezi fyzickými servery. • Podpora vysoké dostupnosti jak na úrovni mateřského, tak dětského oddílu (clustery). 46
3.3
Současné virtualizační techniky
• Podpora tzv. snímkování virtuálních stanic v reálném čase a jednoduchý návrat k předchozím verzím.(Pavlis, 2008) 3.3.8
Sun xVM VirtualBox
Původně produkt společnosti InnoTek byl v únoru 2008 odkoupen společností Sun Microsystems. Šířen je primárně pod komerční licencí (existuje i ochuzená verze s GPL licencí) a používá ve svém jádru dynamický rekompilátor z projektu QEMU. V porovnání s ostatními produkty nabízí VirtualBox vzdálenou správu přes protokol RDP, vzdálené disky iSCSI a vzdálené připojení USB zařízení. Podporované techniky Pro většinu kódu používá VirtualBox plnou virtualizaci, kód jádra hostovaného systému se snaží spustit v ring 1 a pokud toto selže přichází ke slovu dynamická rekompilace. Jelikož je dynamická rekompilace relativně drahá, v některých případech VirtualBox místo rekompilace kód upravuje a spouští nativně. Využitím kombinace těchto technik je dosaženo velmi malé režie. Současné verze produktu dokáží využít i hardwarově asistovanou virtualizaci. V současné době podporuje VirtualBox pouze architekturu IA-32, na x86-64 se pracuje. Operační systémy Na straně hostujícího systému je podporován Linux, Windows, Mac OS X a Solaris, jako hostované systémy lze použít Linux, Windows, OS/2, OpenBSD, FreeBSD a Solaris. Nástroje pro správu Správu virtuálních strojů lze provádět pohodlně přes GUI zaobalující virtuální obrazovku nebo jsou k dispozici nástroje příkazové řádky. Volně šířitelná verze Mimo původní komerční verze byla v lednu 2007 uvolněna pod GPL i verze označovaná VirtualBox Open Source Edition. Při nasazení této verze je uživatel kromě technické podpory ochuzen i o vzdálenou správu přes RDP, podporu USB zařízení, sdílené složky s hostujícím systémem a podporu pro disky iSCSI.(Nový, 2008) 3.3.9
UML
Technika UML (User-mode Linux), jak již název napovídá, umožňuje spuštění Linuxového jádra jako samostatné aplikace pod obecným systémem Linux. Podporované architektury jsou IA-32 a x86-64. Podporované techniky Metodu, kterou UML používá lze zařadit mezi paravirtualizaci a toto si vyžádá úpravu hostovaného jádra. Vzhledem k tomu, že UML spouští jádro systému v uživatelském režimu, není potřeba mít pro spuštění virtuálního počítače práva uživatele root. Virtuální hardware Vstupně/výstupní operace hostovaného systému mohou být přivedeny na standardní vstup a výstup procesu v hostujícím systému, přesměrovány do xterm terminálu 47
3.3
Současné virtualizační techniky
nebo do socketu. Diskovým úložištěm se může stát libovolný „souborÿ umožňující blokový přístup, tedy obyčejný soubor nebo blokové zařízení. Zapojení hostovaného systému do sítě pak probíhá přes tuntap, nebo přes speciálního switch-démona (umožňuje vytvářet i složité síťové konfigurace). Nástroje pro správu Veškeré nastavení lze provádět pomocí parametrů příkazové řádky při spuštění hostovaného systému.(Nový, 2008) 3.3.10
OpenVZ
OpenVZ patří podobně jako Linux-VServer do kategorie virtualizačních nástrojů na úrovni operačního systému. Je šířen pod licencí GPL, o jeho vývoj se stará komunita s přispěním společnosti SWsoft, která ho používá jako základ svého komerčního virtualizačního řešení Virtuozzo.(Nový, 2008) Virtualizované prostředí Prostředí OpenVZ poskytuje podobné prostředky pro hostovaný systém jako LinuxVServer.(Nový, 2008) 3.3.11
KVM
Kernel-based Virtual Machine (KVM) je VMM (Virtual Machine Monitor) řešení společnosti Qumranet, v současnosti se o jeho vývoj stará Avi Kivity a jeho jednotlivé součásti jsou šířený pod licencemi GPL a LGPL. Jeho postavení je unikátní v tom, že se jedná prakticky o součást Linuxového jádra od verze 2.6.20 je v oficiálním stromu.(Nový, 2008) Podporované techniky Tento nástroj vyžaduje pro svůj provoz hardwarově asistovanou virtualizaci, jeho součástí proto tedy není, co se procesoru týče, žádný kód obstarávající emulaci. Jedná se tedy o hypervizor, který provádí plnou/nativní virtualizaci. Operační systémyí Jako hostující systém je podporován zcela logicky pouze OS Linux a vzhledem k technice virtualizace lze hostovat libovolný operační systém. Virtuální hardware Samotný KVM žádný hardware neemuluje, pouze zpřístupňuje uživatelskému prostředí speciální zařízení (/dev/kvm), pomocí kterého obslužný program vytvoří hostovaný adresní prostor a zajistí propojení vstupně/výstupních zařízení. V současné době toto obstarává silně modifikovaná verze projektu QEMU. Pro virtuální síťovou kartu lze použít paravirtualizovaný ovladač. Mezi podporované architektury patří IA-32, x86-64, IA-64, PowerPC a S390. Nástroje pro správu Pro správu tohoto nástroje lze použít buď příkazovou řádku nebo nástroj virtmanager.(Nový, 2008)
48
3.4
3.3.12
Přehled virtualizačních technik
Lguest
Lguest byl navržen jako jednoduchý hypervisor pro Linux (původní patch měl kolem 5000 řádků kódu), jeho tvůrcem je Rusty Russell a od verze 2.6.23 je součástí oficiálního jádra. Sířen je pod licencí GPL. Podporované techniky Tento hypervisor využívá techniku paravirtualizace. Na straně hostovaného operačního systému stačí zavést do jádra potřebný modul. Operační systémyí Jediným podporovaným operačním systémem a to jak pro hosta tak i hostitele je Linux. Virtuální hardware V současné době je podporována pouze architektura IA-32, na podpoře architektury x86-64 se pracuje. Virtualizovaná síťová karta je přivedena na tuntap zařízení hostitele a jako virtuální disk lze využít libovolný soubor s blokovým přístupem. Nástroje pro správu Jedinou možností správy je použití parametrů příkazové řádky nástroje lguest.
3.4
Přehled virtualizačních technik
Jednotlivé virtualizační techniky v souvislostech s jejich možnostmi a omezeními.(Nový, 2008)
Tabulka 1: Přehled vlastností jednotlivých virtualizačních technik (Lukáš Nový).
49
4
4
VLASTNÍ PRÁCE
Vlastní práce
Jedním z dílčích cílů této diplomové práce je zabývat se paravirtualizační technologii Xen. Ze strany Provozně ekonomické fakulty Mendlovy zemědělské a lesnické univerzity v Brně byla vysoká motivace k nasazení virtualizace. Neustálá potřeba rozšiřovat a obměnovat servery vedla k tomu, že virtualizace je v této situaci nezbytná. Tyto testovací servery využívají především stávající zaměstnanci fakulty, učitelé, studenti. Je zde i potřeba z řad bakalantů, diplomantů a doktorandů při tvorbě aplikací v rámci jejich závěrečných prací. Zároveň také nelze opomenout výuku samotných studentů, např. předměty Počítačové sítě a Operační systémy. Při volbě virtualizačního nástroje jsem byl limitován několika kritérii. V první řadě rozpočtem, kdy nebyly uvolněny finanční prostředky na zakoupení placeného virtualizačního nástroje jako je VMware. Dalším faktorem byla potřeba oddělit běh jednotlivých domén. Jistou roli samozřejmě sehrála i vyspělost virtuální metody. V neposlední řadě bylo mým přáním použít virtualizační nástroj za co možná nejmenší možnou hardwarovou režii. Při zvážení všech kritérii jsem se rozhodl použít právě paravirtualizér Xen. V první části práce bude popsán samotný server, na kterém byl Xen uveden do provozu. Poté se budu podrobněji zabývat instalací hostitelského operačního systému, kde uvedu i některé metody správné konfigurace a nastavení serveru a zároveň i zabezpečení systému. Další podkapitola bude pojednávat o instalaci jednotlivých hostovaných systémů (domenU) a popisem vnitřního řídícího systému. V poslední části kapitoly budou srovnány jednotlivé nástroje a posouzeny ekonomické výhody virtualizace. Samotný závěru práce obsahuje, co virtualizace přinese naši fakultě a také jaké výhody přináší firmám.
4.1
Technické vybavení
Vzhledem k tomu, že v případě virtualizace, prakticky současně běží na jednom fyzickém stroji paralele několik virtuálních systému využívající výkon daného hardwaru, je nutné, aby server na kterém jsem se rozhodl Xeninstalovat, byl co možná nejvýkonnější. Jako technický pracovník ústavu informatiky řešící daný problém s nedostatkem serverů, jsem dostal k dispozici server Sun Fire V40z, který se v dnešní dobu řadí ke středně výkonným. Server Sun Fire V40z je založen na procesorech AMD Opteron s jedním či dvěma jádry, je to server nové generace osazený až čtyřmi procesory, který nabízí výkon světové třídy a překonává většinu serveru ve své třídě. Má funkce a vlastnosti, jenž umožňují zákazníkům řešit a vyřešit IT potřeby efektivněji a s nižšími náklady. Je založen na procesorech AMD Opteron s technologií HyperTransport. I díky tomu poskytuje tento server lineární škálovatelnost procesoru a velmi kvalitní propustnost I/O pro aplikace x86. Sun Fire V40z je navíc vysoce flexibilní a lze na něm provozovat jak 32-bitové, tak 64-bitové operační systémy (Linux, Unix, Windows) a aplikace, čímž jsou chráněny zákazníkovy investice do stávajících IT infrastruk50
4.2
Instalace hostitelského operačního systému
tur a zároveň je zaručena i snadná migrace na příští 64-bitovou generaci. Sun Fire V40z je dále mimo jiné vybaven: vysokou rackovou hustotou (3RU vysokou); redundantním napájením a chlazením a úložištěm RAID (pro zajištění nepřerušovaného provozu serveru) managementem osvětlení (Lights Out Management) pro vzdálený monitoring systému. Na server je standardně poskytována tříletá záruka. Hardwarova konfigurace • Dva dvou jádrové procesory AMD Opteron 870, frekvence procesoru 2500 MHz, každý procesor má integrovaný paměťový řadič a integrovanou cache paměť L2 o velikosti 1 MB. • 8 GB, registrované paměti DDR1 400 MHz. Server V40z lze paměť povýšit až na 64 GB. • Technologie AMD HyperTransport. Vysokorychlostní plně duplexní spoj mezi integrovanými obvody. Zlepšuje se tak komunikace s I/O zařízeními, celkově se zvýší výkon počítače. U serveru AMD V40z integrována 3 x 8 GB/s sběrnice. Nárůst výkonu je téměř o 1000 MHz na procesor. • Server je osazen dvěma Ultra320 SCSI pevnými disky o kapacitě 73 GB. Již při nákupu tohoto serveru bylo předpokládáno využití právě k virtualizaci a to hlavně s ohledem na spolehlivost a bezztrátovost dat. Server byl při nákupu navíc osazen dalšími třemi Ultra320 SCSI pevnými disky o kapacitě 300 GB a to především z důvodu zvětšení kapacity, jelikož každému z hostovaných OS bude administrativně přidělen virtuální diskový prostor. Bezpečnosti a bezztrátovosti dat je dosaženo pomocí RAID (Redundant Array of Independent Discs – vícenásobné diskové pole nezávislých disků). První dva (72 GB jeden) systémové disky budou zrcadleny pomocí hardwarového RAID1. Zbylé tři (300 GB jeden) budou zálohovány pomocí RAID3. • DVD Rom a floppy mechanika. • Čtyři porty Gigabit Ethernet na desce, plus jeden gigabit ethernet port na managment síť (MGMT). • Funkce pro LOM (Lights-Out-Management) umožňuje vytvořit systém více možností správy serveru včetně přístupu in-band, out-of-band, sériového nebo pres Ethernet access. • Systém je vybaven dvěma redundantními zdroji 760 W. • Cena této konfigurace Serveru SUN Fire V40z je přibližně: 455 000Kč.
4.2
Instalace hostitelského operačního systému
Dříve než cokoliv jiného, musíme vedět, na jakou architekturu procesoru budeme CentOS instalovat. Na zakoupeném školním serveru jsou dva dvou jádrové procesory x86 AMD Opteron. Bude tedy instalována verze CentOS 5.2 x86-64. Můžeme instalovat jako obvykle lokálně z vypálených CD-ROM (4 CD), přes bittorrent staženého a vypáleného DVD, z ISO obrazu na svém disku, nebo zvolit sítovou instalaci pres NFS, FTP či HTTP. Vybrat a stáhnout lze také přímo ISO obraz instalačního 51
4.2
Instalace hostitelského operačního systému
CD-ROM s před vybraným výběrem balíčků a služeb pro nasazení na server bez grafického prostředí. Instalační CD bootuje samozřejmě do anglického prostředí a nabízí u instalačního CD dnes obvyklé parametry: test integrity instalačního média, start s různými možnostmi. Zvolíme variantu instalačních CD. Server zapojíme do sítě a připojíme na něj pres VGA vystup monitor a klávesnici. Po startu vstoupíme do BIOSu a zapneme volbu Bootovaní z CD. Restartujeme a vložíme první instalační CD. Konfigurace instalace, Instalátor Anaconda provede analýzu hardware (grafické karty, monitoru, myši). Také si můžeme již teď zvolit češtinu coby preferovaný instalační jazyk. Americký původ distribuce se nezapře v nabídce rozložení klávesnice jako „Czechoslovakaiÿ. Startujeme-li s parametrem linux askmethod, je k dispozici nastavení klávesnice v textovém režimu jako cz-us-qwertz a cz-lat2 (popřípadě sk-qwerty). Nastavení oddílu disku nástrojem Disk Druid nabízí grafické znázornění jednotlivých oddílu a jejich obsazení. Zvolíme důsledně ruční dělení disku a disky rozdělíme na několik potřebných oddílu. Nejprve je potřeba vytvořit ze tří 300 GB fyzických disků jeden raidovaný (virtuální) disk o co možná největší kapacitě. Toho docílíme pomocí RAID3 technologie. Ta pracuje na principu n+1 stejných disků, kde jeden disk slouží jako paritní. Na něj se ukládají XOR (exkluzivní OR) data, paritní data. Při výpadku paritního disku jsou data zachována, při výpadku libovolného jiného disku je možno z ostatních disků spolu s paritním diskem ztracená data zrekonstruovat. Takto docílíme maximálně velké (600 GB) a naprosto bezpečného úložiště pro později vytvářené domény, pod systémovým označením /dev/md0. Ze dvou 72 GB velkých fyzických disků jsme hardwarovým raidem RAID1, již při bootu BIOSu vytvořili jeden zrcadlený disk o velikosti 72 GB (/dev/sda), na který bude nainstalován hostitelský operační systém. Když máme vytvořené potřebné raidy, můžeme takto vzniklé virtuální disky podle potřeby rozdělit. Oddíl / bude mít velikost 49 GB, odkládací oddíl swap bude mít velikost 8 GB, oddíl /var 10GB. Celý virtuální disk /dev/md0 o velikosti 600 GB připojíme do systému jako /export. Na oddíl /export budou ukládány image jednotlivých virtuálních domén a zálohy systému. Kapacita diskových oddílu swap a /var je dostatečně dimenzovaná, vzhledem k funkci serveru (virtual server, firewall server). Lze vybrat ze souborových systémů ext2, ext3 a vfat. Pro naše diskové oddíly vybereme souborový systém ext3. Jako zavaděč systému zvolíme Grub. Dále zde máme možnost zvolit si již v této fázi zaheslovaný přístup k zavaděči a zabránit tomu, aby jednotliví uživatelé v podnikovém prostředí mohli startovat s vlastními libovolnými bootovacími parametry. Instalátor nabízí i okamžité nastavení sítě, firewallu, povolení vzdáleného přihlášení (SSH) a další služby. Na našem serveru necháme zatím povoleno pouze SSH (port 22) pro vzdálené přihlášení. V další fázi instalace volíme mezi předefinovanými instalačními styly. K dispozici jsou předvolby pro méně zkušené uživatele: Osobní systémy, Pracovní stanice, Server a Vlastní. Zvolíme položku Vlastní. Poté se zobrazí prostředí, ve kterém vybíráme námi potřebné balíčky. Pro server je zapotřebí pouze minimální instalace, 52
4.3
Nastavení serveru
popřípadně doplněná o možnosti: vědecké nástroje, textové internetové prohlížeče, všechny dostupné editory, DHCP server, jemný server Bind, nástroje pro konfiguraci serveru, systémové nástroje a další. Důležitým balíčkem v našem případě je podpora virtualizace, která je od verze CentOS 5.0 podporovaná přímo v jádře. Zvolíme instalace bez grafického prostředí Gdome, KDE. Instalujeme-li z klasických CD-ROM, instalátor nám také sdělí, která instalační CD bude postupně vyžadovat. Musíme být připraveni na to, že když bude nějaké CD chybět, zahájenou instalaci nelze korektně přerušit, v případě že nějaký balík nelze přečíst se ocitneme ve smyčce, kterou ukončí pouze hardwarové tlačítko RESET. Zde je také poslední možnost instalaci řádně přerušit beze změn na disku. Rozhodneme-li se instalovat, proběhne formátování zvolených oddílu, vytvoří se souborové systémy a zahájí se vlastní instalace, při níž vám pak již nezbývá nic jiného, než sledovat informace o právě instalovaných balíčcích a modrý progres bar, přičemž trvání celé procedury bude závislé na rychlosti vašeho počítače, použitém instalačním médiu a množství vybraných aplikací. Pro updaty a instalaci dalších aplikací lze vedle nástroje update použít i YUM, pak lze doinstalovat i správce balíčků apt a téměř libovolné doplňovat distribuci aplikacemi v RPM balíčcích s tím, že nebudou muset pravděpodobně ručně upravit některé závislosti.
4.3
Nastavení serveru
Na správné nastavení a zabezpečení serveru je nutné pamatovat vždy a za všech okolností. Je potřeba si uvědomit, že náš server se může stát cílem útoku v kterémkoliv okamžiku jeho života. Proto je nutné začít server zabezpečovat již během instalace, od stisknutí tlačítka power. V našem případě to platí dvojnásob, neboť server, který budeme instalovat, bude hostujícím systém pro další virtuální stroje, a s každým dalším virtuálním strojem se hodnota dat na tomto serveru sčítá. Pochopitelně musíme pamatovat na nastavení zabezpečení jednotlivých domén, ale toto riziko již není tak velké jako v případě proniknutí útočníka na domenu0. Jednotlivé virtuální stroje jsou autonomní systémy, proniknutí z jedné do druhé je stejně těžké jak napadnout vlastní systém, avšak kdyby útočník získal root přístup k dom0, mohl by poškodit všechny virtuální systémy. Proto zabezpečení hostujícího operačního systému je potřeba věnovat zvýšenou pozornost. Podrobným popisem všech technik by se mohla zabývat samostatná práce, uvedu zde ve zkratce jen ty nejdůležitější. Proces zabezpečení serveru začíná již před instalací, umístíme server (na bezpečném, dobře chlazeném místě do racku), po instalaci probíhá fáze tzv. hardening a zabezpečení (iptables). Další fáze je testování, například pomocí utilit Nmap, Nesus. Poté server nasadíme do ostrého provozu a průběžně udržujeme a kontrolujeme systém pomocí pravidelných aktualizací a kontroly logů. Jedno ze základních pravidel instalace serveru je: Nepřipojovat server do sítě, dokud není instalován a zabezpečen.
53
4.3
4.3.1
Nastavení serveru
Hardening
Před instalací nejprve dobře promyslíme účel serveru a rozdělení pevných disků (popsaný v předchozí kapitole) s ohledem na bezpečnost a bezztrátovost dat. Toho docílíme pomocí zrcadlení disku RAID. Správné rozdělení oddílů by mělo být takové, abychom měli zvlášť oddíly: /, /home, /var, /tmp, /usr a /boot (toto jsou tzv. important Linux partitions). To provádíme z důvodu nastavení různých pravidel u každého oddílu, mohou být typu: • nosuid zabraňuje nastavení SUID/SGID bitů na dané partition, • nodev zabraňuje vytvoření speciálních zařízení na tomto oddíle, • noexec při nastavení této volby, nelze na oddíle spouštět spustitelné soubory, • ro oddíl lze připojit pouze pro čtení, • quota zapnutí přidělování quot na oddíle. Tyto příznaky se nastaví v /etc/fstab, který by správně měl vypadat následovně: /dev/sda1 /home ext3 defaults,nosuid,nodev 1 2 /dev/sda2 /var ext3 defaults,nodev,nosuid, noexec 1 2 /dev/sda3 /tmp ext3 defaults,nodev,nosuid, noexec 1 2 /dev/sda4 /usr ext3 defaults,nodev 1 2 /dev/md0 /export ext3 defaults,nosuid 1 2
Dalším správným krokem je zajistit, aby se uživatel root nemohl na server přímo přihlásit. Tento mechanismus se používá pro to, že stále nejběžnější způsob průniku je přes uživatelské účty a největší současné riziko systému Linux je root účet. Postupujeme tak, že nejprve vytvoříme nějaký běžný účet například halamicek adduser halamicek, uživateli vytvoříme heslo passwd halamicek. Potom v konfiguračním souboru sshd config povolíme jen uživatele halamicek AllowUsers halamicek a službu ssh restartujeme (/etc/ini.d/sshd retart). V tomto případě útočník po prolomení jména a hesla k účtu halamicek získá přístup pouze jako běžný uživatel. Jediný, kdo se na server může vzdáleně přihlásit, je uživatel halamicek. Tento bezpečnostní mechanismus lze vylepšit o možnost automatického zasílaní mailu v případě přihlášení uživatele a časového omezení přihlášení roota (TMOUT=900" do /root/.bashrc). Dalším bezpečnostním nastavením je omezení SUID bitů. Jedná se o útoky přetečení neboli zahlcení buffer overflow. Potenciálně velmi nebezpečnými se tak stávají aplikace s přiděleným SUID či SGID bitem. Jestliže program běží pod účtem root a útočník napadne aplikaci s přiděleným SUID bitem, může bez problémů získat stejná oprávnění jako má root. V případě SGID bitu pak získá oprávnění skupiny. Proto dobrý administrátor dbá na to, aby takových souborů s SUID/SGID bitem měl co možná nejméně. K tomu to účelu je dobrý příkaz: find / -type f \( -perm -004000 -o -perm -002000 \) -exec ls -lg {} \;
Pokud na serveru běží, často zcela zbytečně, mnoho služeb a démonů, je dobré takovéto služby vypnout a balíčky odinstalovat. Jednak tím zvýšíme bezpečnost serveru a také tím ušetříme systémové prostředky. Nepotřebné balíčky odstraníme pomocí rpm nebo yum. Nepotřebné služby jako třeba ip6tables, bluetooth, cups, 54
4.3
Nastavení serveru
firstboot, acpid, avahi-daemon, irda, irqbalance, multipathd, netconsole a další, vypneme pomocí příkazu chkconfig. Nutností je mít na serveru správný čas. Má to dva hlavní důvody. Pokud na serveru jsou naplánovány nějaké události typu zálohování, provádění updatů, synchronizace, syncování databáze apod. je žádoucí, aby se tyto operace prováděly tehdy, kdy byly naplánovány. Druhým důležitým důvodem je zaznamenávání systémových událostí tzv. logování. Při kontrole nebo odhalování problému potřebujeme přesně vědět, kdy daná událost nastala. Například přihlášení/odhlášení uživatele, spuštění nějaké aplikace, přistup k učtu apod. Správný systémový čas se nejsnáze udržuje příkazem rdate rdate -s time.mendelu.cz. Pokud tento příkaz přidáme do /etc/crontab, systém si bude čas sám udržovat. Když už jsme si jisti, že máme server takto zabezpečen a na nic jsme nezapomněli, můžeme ho připojit k síti a provést aktualizace, případně doinstalovat některé potřebné balíčky. K tomuto slouží, v Linuxu dobře fungující, balíčkovací systém yum nebo apt-get. Pro doinstalovaní například typografického softwaru TeXu stačí zadat příkaz: yum install tetex-latex. Pro aktualizaci celého systému je potřeba zadat pouze příkaz: yum upgrade. Pokud přidáme tento příkaz do /etc/crontab, systém se bude sám v nastavený čas aktualizovat. Na závěr před instalací jednotlivých služeb typu apache, posgres, Xen atd. je dobré server otestovat z hlediska stability a bezpečnosti. Především otestovat nastavené bezpečnostní politiky. K tomu dobře poslouží programy nmap nebo nesus. Oba dva prověří otevřené porty na serveru, nesus upozorní i na bezpečnostní díry systému. 4.3.2
Konfigurace základních bezpečnostních politik (iptables)
Snažíme se o co možná nejpřesnější vymezení bezpečnostních pravidel pomoci konfigurace bezpečnostních politik iptables. Na serveru se snažíme nechat co nejmíň otevřených portů a běžících služeb a demonů. Firewall bude sloužit nejen k zabezpečení vlastního serveru, ale i jako router pro vnitřní domény. V této části práce popíši pouze základní konfiguraci iptables. Nastavení routru bude věnován prostor v sekci 4.6 Popis virtuálního switche. Zavedení modulu modprobe ip tables — základ, spustí firewall, pro zadávání pravidel iptables, modprobe ip conntrack ftp — umožňuje průchod aktivního ftp firewallem, modprobe ip nat ftp — umožňuje průchod aktivního ftp firewallem, modprobe ip MASQUEPADE — maškaráda, překlad adres. Základní nastavení iptables INPUT Jako první věc, co při konfigurování iptables musíme udělat, je vybrat bezpečnostní strategii. Můžeme všechny tři základní chainy nastavit na DROP a dále povolovat pouze námi požadovaná pravidla, nebo necháme základní chainy na ACCEPT a sestavíme dokonalou strukturu pravidel tak, aby přes firewall prošly pouze námi 55
4.3
Nastavení serveru
chtěné pakety. Zvolíme první variantu a začneme nastavovat. Nejprve tedy přepneme hlavní tři chainy INPUT, OITPUT, FORWARD na DROP příkazy: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
První, co povolíme v chainu INPUT, bude vnitřní komunikace, tzv. loopback. Sled příkazů: iptables A INPUT p all s 127.0.0.1 d 127.0.0.1 j ACCEPT iptables -A INPUT -p all -i lo -j ACCEPT
Dále vytvoříme 6 nových tříd, (tabulek),(chainy, usnadňují práci a orientaci v iptables). Jako první vytvoříme chain pro ochranu před IP spoofingem z nesmyslných IP adres a naplníme pravidly: iptables -N spoofing iptables -A spoofing -i ge0 -s 192.168.0.0/16 -j DROP iptables -A spoofing -i ge0 -s 172.16.0.0/12 -j DROP iptables -A spoofing -i ge0 -s 10.0.0.0/8 -j DROP Takto nastavený chain připojíme do INPUTU příkazem: iptables -A INPUT -p TCP -i ge0 -j spoofing
Následně vytvoříme nový chain pro povolené a zakázané IP adresy HOSTS ALLOW a HOSTS DENY. Dále vytvoříme chainy pro tcp segmenty a udp segmenty, ve kterých definujeme TCP respektive UDP spojení na jednotlivé porty na našem serveru, které budeme chtít mít povoleny. V našem případe to bude pouze port TCP port 22. Tento port pro vzdálené přihlášení k serveru necháme otevřený jak pro venkovní, tak i pro vnitřní sít. Této konfigurace docílíme příkazy: iIptabels N HOSTS_ALLOW iptables N HOSTS_DENY iptables -N tcp_segmenty iptables -N udp_segmenty iptables -A tcp_segmenty -p TCP --dport 22 -j ACCEPT iptabels A INPUT j HOSTS_ALLOW iptabels A INPUT -j HOSTS_DENY iptables -A INPUT -p TCP -j tcp_segmenty iptables -A INPUT -p UDP -j udp_segmenty
Následující třída pravidel icmp segmenty se týká servisních paketů používaných pro přenos diagnostických a chybových zpráv. Pro správné fungování je potřeba propouštět nejméně ICMP typ 3 - „destination unreachableÿ Vhodné je povolit také 0 - „Echo replyÿ, 8 - „Echo regestÿ a 11 - „Time exceededÿ, které používají užitečné programy ping a traceroute. Ostatní ICMP zprávy můžeme s klidným svědomím filtrovat. Následují příkazy: iptables iptables iptables iptables iptables iptables
-N -A -A -A -A -A
icmp_segmenty icmp_segmenty icmp_segmenty icmp_segmenty icmp_segmenty INPUT -p icmp
-p -p -p -p -j
ICMP -i eth0 --icmp-type ICMP -i eth0 --icmp-type ICMP -i eth0 --icmp-type ICMP -i eth0 --icmp-type icmp_segmenty
0 -j ACCEPT 3 -j ACCEPT 8 -j ACCEPT 11 -j ACCEPT
56
4.4
Instalace a spuštění Xenu (dom0)
Povolíme stavový firewall sledující veškerý provoz, aby byly propouštěny pakety patřící už k nějakému vytvořenému spojení nebo související s nějakým spojením (např. s ftp nebo ping). Do INPUTU tedy přidáme: iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Je nezbytné na firewallu blokovat AUTH, a to ne pravidlem DROP, ale REJECTem. Rozdíl je takový, že zatímco DROP pakety doslova „zahodíÿ, REJECT je „zdvořile odmítneÿ, tedy vygeneruje odesílateli ICMP datagram s oznámením o odfiltrování dochyceného paketu. Některé programy používají službu AUTH ke zjištění, jakému uživateli patří dané spojení. Protože muže poskytovat útočníkovi nežádoucí údaje, není dobré ji otevírat světu. Ovšem pokud ji běžným způsobem zablokujeme (DROP), také to není dobré, neboť některé programy (např. SMTP servery) ji mohou využívat v rámci užitečného provozu. Pokud ji tedy budeme filtrovat, může docházet ke značnému zpomalení komunikace, když bude protistrana čekat na vypršení času vyhrazeného k vyřízení AUTH požadavku. Zablokování služby AUTH v INPUTu dosáhneme příkazem: iptables -A INPUT -i ge0 -p TCP --dport 113 - REJECT
Tímto je dokončené základní nastavení hlavního chainu INPUT. Vzhledem k tomu, že máme INPUT nastaven na DROP, všechny pakety kterým nevyhoví ani jedno z postupně procházených pravidel, budou zahozeny. Je dobře tedy tyto pakety logovat. Proto na konec tohoto i dalších OUTPUT, i FORWARD dodáme pravidlo pro logování, zahazovaných paketu. iptables -A INPUT -m limit --limit 20/hour --limit-burst 5 -j LOG
Uvedený zápis loguje pouze prvních dvacet vyhovujících paketu, ovšem ne častěji než pětkrát za hodinu. Základní nastavení iptables OUTPUT a FORWARD U OUTPUTu se nemusíme zabývat nějakým složitým filtrováním, neboť datagramy tudy procházející mají svůj původ v našem počítači a nepředstavují tak nějaké zvláštní bezpečnostní riziko. Můžeme tedy nastavit bezpečnostní politiku OUTPUT zpět na ACCEPT. Stejně tak chain FORWARD, kterým se budu podrobněji zabývat později. iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT
4.4
Instalace a spuštění Xenu (dom0)
Metod instalací hypervisor Xen je více. Jedna již byla popsána v sekci: 4.2 Instalace systému, kdy od verze CentOS 5.0 je možnost instalovat Xen již při instalaci systému výběrem balíčků a podporou virtualizace. Jistější způsob je však instalovat Xen až po instalaci OS balíčkovacím systémem (yum install xen) nebo ze zdrojových soborů. Dnešní Xen3.0 a vyšší dokáže virtualizovat jak plnou virtualizací tak paravitualizovat, jak bylo vysvětleno v kapitole: 3 Metody virtualizace. Plná virtualizace má 57
4.4
Instalace a spuštění Xenu (dom0)
velkou výhodu v tom, že nemusí být upravena jádra hostovaných systémů, a tedy škála podporovaných systémů se pak rozšíří zejména o systémy, jejichž výrobci neuvolňují jejich zdrojové kódy. Tato výhoda je ovšem vykoupena větší režií. Plně virtualizační Xenlze provozovat na procesorech, které již mají podporu virtualizace (Vanderpool a Pacifica). Bohužel tuto podporu procesory mého serveru Sun Fire V40z nemají. Mé rozhodování tím bylo vyřešeno, a dále jsem se ubíral směrem paravirtualizace, která je i dle mého názoru lepší. Nevýhodu paravirtualizace v podobě úpravy jader OS, vyváží robustní výkon a administrace pomocí dom0. Rozhodl jsem pro instalaci verze xen-2.6.18-src.tgz z důvodu stabilní ověřené verze. Xen vyžaduje některé související balíčky, které nejsou součástí základní instalace. Například zavaděč GRUB, Iproute2, Linux bridge-utils2.1, překladač gcc a GNU make, zlib-dev, Python v2.2, LATEX. K nainstalovaní těchto balíčků je třeba spustit skript, který jsem nazval install-xen.sh, a je součástí přílohy. Pokud máme všechny tyto balíčky, můžeme se pustit do kompilace xenovského jádra. Rozbalíme xen-2.6.18-src.tgz do /root/xen-2.6.18. Vstoupíme do rozbaleného adresáře, zeditujeme konfigurační soubor Make a doplníme ho o řádek: KERNELS ?= linux-2.6-xen0 linux-2.6-xenU
Potom již spustíme vlastní kompilaci příkazem: make world a následně vlastní instalaci: make install. Vzhledem k tomu, že se Xen implementoval přímo do jádra systému, je nutné upravit zaváděcí menu, aby tak došlo k nastartování s podporou virtualizace Xen. Do konfiguračního souboru /etc/grub.conf, doplníme řádky pro bootovaní do xenovského jádra: title CentOS (2.6.18-128.1.6.el5xen) root (hd0,0) kernel /xen.gz-2.6.18-128.1.6.el5 module /vmlinuz-2.6.18-128.1.6.el5Xenro root=LABEL=/ module /initrd-2.6.18-128.1.6.el5xen.img
Poté musíme systém restartovat a systém naběhne s podporou virtualizace v jádře. To, jak se hypervisor zavádí, můžeme pozorovat během bootu, ještě před zavedením vlastního jádra systému. Když systém úspěšně spustíme, zkontrolujeme, zda je spuštěný proces xend. Pokud ne, spustíme ho ručně /etc/ini.d/xend start a „chkconfigemÿ ho také přidáme do automaticky spouštěných služeb. Když jsem Xen instaloval poprvé, prošel jsem si početnými pokusy instalace xen-3.0.4 i xen-2.0.7. Dokonce jsem zkoušel i jiné operační systémy jako Fedoru 8, pokaždé neúspěšně. Při bootovaní většinou systém zůstal viset na hlášce: „Warning: cannot open an initail concoleÿ. Při opakovaných nezdarech jsem se rozhodl vyzkoušet i jinou architekturu a pokusil jsem se stejné postupy aplikovat i na PC s arch. i386. Kde jsem se ovšem k mému zármutku setkal se stejným nezdarem. Nakonec tato metoda instalace zafungovala s Xenem 2.6.18. Nutno dodat, že tehdy byla ještě jiná doba. S postupem času se instalace Xenu do jádra mnohem zjednodušila. Dnes za pomocí balíčkovací služby yum je to otázka několika minut. V tomto části textu byly popsány tři instalační postupy implementace Xenu přímo do jádra operačního systému. Zároveň lze položit i otázku, jak upravit kernel 58
4.5
Instalace virtuálních domén
systému, aby na stroji bylo možno začít provozovat paravirtualizaci? V současné době nejlepším a nejpohodlnějším způsobem jak instalaci provést je nainstalovat základní operační systém a pak pomocí vytvořeného skriptu xen-install.sh implementovat Xen do systému.
4.5
Instalace virtuálních domén
Nyní, když máme nainstalovaný hostitelský operační systém s podporou Xenu v jádře, můžeme se začít věnovat instalaci jednotlivých hostovaných operačních systémů. V době, kdy jsem Xen začal studovat, jsem zkoušel různé postupy instalace virtuálních domén. Mnoho z nich skončilo nezdarem a v některé z fázi se instalace nebo start systému zastavil s chybovou hláškou, kterou jsem i přes veškerou snahu hledat v síti Internetu, nedokázal vyřešit. Nutno podotknout, že toto je jedna ze slabých stránek volně šiřitelného softwaru. Jelikož se na vývoji podílí mnoho vývojářů po celém světě, zpravidla neexistují přesné postupy, které by stoprocentně vedly k úspěšné instalaci GNU softwaru. Nutno podotknout, že virtualizace neblyla tak podrobně zdokumentována ,jak je v dnešní době. Po opakovaných pokusech nalezení toho správného postupu, jsem konečně našel ten, co mi vyhovoval a zafungoval. Tento postup jsem zjednodušil pomocí bash skriptů a nejdůležitější části budou v následujícím textu popsány. Celý instalační skript je součástí přílohy. Vytvoření nového virtuálního stroje se skládá s několika dílčích činností, které musí administrátor provést. Nejprve je potřeba doméně vytvořit virtuální disk, image soubor který se při instalaci rozdělí na požadované oddíly a naformátuje se souborovým systémem. Dále je nutné vytvořit konfigurační soubor pro vznikající systém a konfigurační soubor pro instalační proces operačního systému (minimal-ks.cfg). Také je třeba nastavit virtuální síťové rozhraní (eth0:1) a připojit ho k eth0. Aby mohl virtuální stroj komunikovat s okolím, je potřeba nastavit bezpečnostní politiky (iptables). O tyto konfigurace se postará instalační skript. Po vytvoření konfiguračních souborů se automaticky zavolá první z nich a instalace proběhne již bez zásahu správce. Konfigurační skript je napsán v jednoduchém bashy a jedná se v podstatě o dávkový soubor. Bash je linuxový interpret příkazů. Při jeho spuštění se provádí jednotlivé příkazy v dané posloupnosti. Bash skript vždy začíná příkazem: !/bin/bash. Definice proměnných Na začátku jsou definovány konstantní proměnné, které budeme s hojností ve skriptu využívat. Stroj se nachází ve školní síti, tedy je použita doména mendelu.cz, která se bude přidávat za název stroje. Proměnná „cestaÿ obsahuje ornamentní a jediné úložiště image souboru jednotlivých domén. Dd je vnitřní příkaz systému, jenž slouží nejen ke konvertování souborů, ale také k zapisování bloků dat, což s výhodou využijme při vytváření image souboru. /dev/zero je speciální soubor, ze kterého se nedá přečíst nic jiného než samé nuly. Takto jsou nadefinované konstantní proměnné. Během instalace je uživatel dotazován na dodání dalších potřebných údajů, nutných pro instalaci. 59
4.5
Instalace virtuálních domén
domain=’mendelu.cz’ cesta=’/export/DOMENY/’ dd=’/bin/dd’ zero=’/dev/zero’ img=’.img’
Vytvoření image souboru Následující řádky vytvoří image soubor (Virtual Block Device) pro právě instalovanou doménu. Uživatel je vyzván k zadání názvu vznikajícího systému a k velikosti image souboru. Je potřeba uvážit, jaké a jak velké diskové oddíly bude vznikající doména mít, sečíst jejich kapacity a vytvořit image soubor o něco málo větší. Samozřejmě celý proces může být, naprosto zautomatizovaný. Lze vytvořit modifikovaný skript, který bude mít veškeré volby dané napevno, a bude tak vytvářet homogenní virtuální systémy. Po zadání a potvrzení se vytvoří v /export/DOMENY/ adresář pro doménu a v něm se příkazem dd vytvoří image soubor pro vznikající doménu. Spustí se příkaz dd, který blokově (po blocích 1 MB) vyčítá ze zařízení /dev/zero samé nuly a zapisuje je do image souboru. Příkaz dd zapíše tolikrát tento blok o velikosti 1 MB, kolikrát určíme při zadávání velikosti. echo -n "Zadej nazev vytvarene domeny: [text]" read nazev echo -n "Zadej velikost image pro domenu $nazev: [cilso v MB]" read img_velikost echo -n "Spustit? [a/N]" read begin if [ "$begin" == "a" ] ; then mkdir $cesta/$nazev echo "Adresar vytvoren ‘date‘" $dd if=$zero of=/$cesta/$nazev/$nazev$img oflag=direct bs=1M count=$img_velikost echo "Image vytvoren ‘date‘"
Konfigurační skript nového virtuálního stroje Po vytvoření image souboru následuje vytvoření třech konfiguračních souborů. Na konci tohoto skriptu, dojde ke spuštění prvního z nich, konfiguračního souboru pro vytvářenou doménu, který se provede a zavolá další konfigurační soubor (konfiguraci instalace). Popis techniky vytvoření tohoto konfiguračního souboru není ani tak důležitý, jako samotný popis konfiguračního souboru. Proto se v následujících řádcích zaměřím na popis právě konfiguracího souboru domény. Technika vytvoření souboru, je jasně patrná ze zdrojových kódů skriptu v příloze. Uživatel je tázán na některé potřebné údaje, jako je IP adresa, velikost přidělené operační paměti nebo počet přidělených CPU. Následně je pomocí jednoduchého přesměrování výstupu do souboru, vytvořen následující konfigurační soubor. Konfigurační soubor obsahuje jednotlivá klíčová slova respektive proměnné srozumitelná pro démona Xen. Při instalaci nové domény Xen přečte tento konfigurační soubor a nastartuje podle toho nově vznikající virtuální systém. Tak jako při spuštění běžné instalace systému (například z přenosného media), tak i u spuštění instalace virtuálního systému je nutné zavést přesně odpovídající instalační jádro do paměti počítače. Cestu k instalačnímu jádru systému, definuje proměnná kernel. Je nutné, aby přesně odpovídala verze jádra s instalací systému, 60
4.5
Instalace virtuálních domén
který jsme se rozhodli instalovat, a to nejen v verzi OS, ale také v architektuře (i386 nebo x86 64). Zpravidla jádro (kernel), tak i ramdisk (initrd) lze volně stáhnout z umístění na Internetu, ze stejného umístění jako budeme instalovat zvolený OS. Například CentOS 5.3 x84 64 lze nainstalovat ze ftp serveru ftp.mendelu.cz (ftp.mendelu.cz/public/linux/CentOS/5.3/os/x86 64/). V dalších podadresářích (/images/xen) se nachází upravené jádro pro virtuální stroj. Vmlinuz a initrd stáhneme nejlépe do adresáře /boot a přejmenujeme podle právě instalovaného systému, protože pro každý jiný systém bude potřeba uplatnit jiný vmlinuz. kernel = "/boot/vmlinuz-centos5.3-x86_64-xen-install" ramdisk = "/boot/initrd-centos5.3-x86_64-xen-install"
Proměnná extra, slouží k definování externího konfiguračního souboru pro nastavení instalace. Soubor se také automaticky vytváří pomocí mého skriptu create domU.sh. Lze zvolit jednu ze dvou variant načtení souboru. Soubor může být načten z lokálního uložení na oddílu hostujícího OS, nebo lepší variantou je přečtení souboru ze sítě přes protokol http. Konfigurační soubor minimal-ks.cfg obsahuje instalační parametry pro instalátor Anakonda, který z pomocí tohoto souboru přesně nakonfiguruje instalovaný systém bez nutnosti dalšího zásahu. Soubor minimal-ks.cfg bude popsán v další podkapitole. extra = "/var/www/html/minimal-ks-test.cfg"
Vytvářenému systému musíme přidělit jméno, k tomu slouží proměnná name. Pro přidělení operační paměti slouží proměnná memory. Zde je nutné si uvědomit, že každá doména má přidělený blok paměti o konkrétní velikosti, a tato paměť se alokuje z fyzických systémových zdrojů, tedy z hostitelské domény. Proto s přidělováním paměti musíme zacházet opatrně, aby nedocházelo k nedostatku paměti pro řídící systém. Paměť přidělujeme podle účelu serveru, ke kterému bude systém sloužit. Virtualizace tedy může byt velice náročná na kapacitu fyzické operační paměti stroje. Další proměnná vcpus slouží k nastavení počtu procesorových jader, které bude mít doména k dispozici. Zde jsme opět limitováni počtem fyzických jader stroje. Z jistého úhlu pohledu je zde porušována základní myšlenka virtualizace, a to nezávislost běhu virtuálních strojů, neboť CPU sice jsou virtuálnímu stroji přiděleny, ale zároveň se na jednom virtuálním procesoru může střídat více systémů. Tedy ne vždy je doméně k dispozici plný výkon CPU. name = "test" memory = "512" vcpus=1
Proměnná disk specifikuje cestu k vytvořenému image souboru a další parametry pro upřesnění přístupu k souboru. Xen umožňuje použití více typů virtuálních disků. Pro připojení jednotlivých typů používá Xen integrované ovladače. • Nejčastěji používaný způsob připojení image souboru je tzv. Virtual Block Device. Pro připojení takového blokového souboru je využíváno ovladačů blktap a pro definici v konfiguračním souboru k tomu slouží definice tap:aio:.
61
4.5
Instalace virtuálních domén
• Další možností je připojit soubor s vytvořeným systémem souborů. Tento způsob na rozdíl od tap:aio nezapisuje data přímo na disk, ale se zpožděním se o tuto činnost stara přímo dom0. Je definována pomocí volby file před cestou k souboru. • Třetí možností je připojení přímo fyzického oddílu disku. Tak to pak může několik virtuálních serveru sdílet jeden oddíl, což ma obrovské využití při migraci virtuálních strojů zaživa. Tato možnost se definuje v konfiguračním souboru volbou phy (disk = [ ’phy:/dev/sda2,hda2,w’ ]). Za cestou k souboru následuje vnitřní pojmenování virtuálního disku (xvda) a způsob připojení souboru. Možno soubor připojit například jen pro čtení, v našem případě připojuji soubor pochopitelně pro zápis (w=write). disk = [ ’tap:aio:/export/DOMENY/test/test.img,xvda,w’, ]
Přečtení konfiguračního souboru instalace i samotná instalace bude probíhat ze zdrojů umístěných mimo server. Z tohoto důvodu musí být aktivováno bezprostředně po startu virtuální síťové rozhraní. Virtuální síťové zařízení se automaticky vytvoří a připojí, pomocí řady vnitřních skriptů Xenu. K definování základních údajů je vyzván uživatel a zjištěné údaje jsou zapsány do konfiguračního souboru domény pod proměnou vif. Pro funkční komunikaci je potřeba, aby byla doméně přidělena unikátní vnitřní IP adresa, odpovídající maska sítě a výchozí brána (gateway). Brána vnitřního Xenroutru se nazývá virbr0. Dále je přiřazeno do proměnné hostname úplné doménové jméno stroje. vif=[ ’192.168.122.4’ ] vif=[ ’gateway=192.168.122.1’ ] vif=[ ’bridge=virbr0’ ] hostname="test.mendelu.cz"
Následující volby určují, co má hypervisor s doménami provést, jestliže například doména zatuhne, nebo když se restartuje či vypne. Proměnná bootloader, určuje cestu k Xenovskému zavaděči, obdoby Linuxového GRUB. Tento řádek je nutné po instalaci odpoznámkovat a na začátku souboru naopak zapoznámkovat první dva řádky (kernel a ramdisk). Když je systém nainstalován, nepotřebuje startovat s instalačním jádrem, ale vyžaduje bootloader (GRUB), který načte ze správného umístění jádra. Tímto řádkem končí popis konfiguračního souboru pro virtuální doménu. on_reboot = ’reboot’ on_crash = ’destroy’ on_poweroff = destroy #bootloader="/usr/bin/pygrub"
Konfigurační skript instalace Konfigurační soubor pro instalační program Anaconda začíná slovem install. Následuje definice protokolu, přes který se budou Internetu stahovat instalační balíčky a cesta k instalované distribuci. Konfigurační soubor byl vytvořen záměrně proto, aby vše bylo automaticky nakonfigurováno. 62
4.5
Instalace virtuálních domén
Proto definice jednotlivých nastavení mají téměř totožné pořadí, se kterým bychom se setkali i v případě manuální instalace. Pomocí lang en US.UTF-8 nastavíme jazyk a anglickou klávesnici systému s kódováním UTF-8. Následuje nastavení síťového rozhraní domény. V případě, že máme DHCP server, můžeme z něj nechat načíst IP adresy. Jestliže zadáváme IP adresy staticky, musí se shodovat se zadanými adresami v konfiguračním souboru domény. O to se však automaticky postará skript (create domU.sh). Proměnná rootpw nastaví heslo do systému pro uživatele root. Řádkem firewall, zapneme bezpečnostní politiky a jako povolený port nastavíme port 22 (ssh). Stejně tak zapneme selinux na vynucující a povolíme komunikaci na portu 22. Nastavíme způsob ověřování uživatelů a časovou zónu. Zavaděče na řádku začínající bootloader nastavíme na MBR záznam na disku xvda. install ftp --ftp ftp://ftp.mendelu.cz/public/linux/CentOS/5.3/os/x86_64/ lang en_US.UTF-8 network --device eth0 --bootproto static --ip 192.168.122.4 --netmask 255.255.255.0 --gateway 192.168.122.1 --nameserver 195.178.72.150 rootpw dakine firewall --enabled --port=22 authconfig --enableshadow --enablemd5 selinux --enforcing --port=22:tcp timezone --utc Europe/Amsterdam bootloader --location=mbr --driveorder=xvda --append=console=xvc0 reboot
Součástí konfiguračního skriptu instalace je dále rozdělení virtuálního disku, reprezentované image blokovým souborem. Celkovou kapacitu virtuální disku, která byla při instalaci stanovena na 11 GB, rozdělíme na tři oddíly. Dle následující konfigurace se vytvoří oddíl /boot o velikost 100 MB a oddíl /, formátovaný linuxovým souborovým systémem ext3. Ze zbylého místa 660 MB se vytvoří odkládací oddíl tzv. swap. Vzhledem k počtu oddílů, mohou být všechny primární. Za klíčovým slovem packages může následovat výčet balíčků, které by uživatel chtěl nainstalovat. V našem případě se jedná o čistou instalaci systému, tudíž za proměnnou packals nebudou uvedeny žádné volby. Potřebné programy budou doinstalovány pomocí balíčkovacích služeb (yum, apt). Tento konfigurační soubor se automaticky vytvoří a následně umístí na místo na lokálním počítači nebo na síti, kde bude přečten při instalaci. Odkazuje se na něj konfigurační soubor domény, voláním extra. clearpart --all initlabel --drives=xvda part /boot --fstype ext3 --size=100 --asprimary --ondisk=xvda part / --fstype ext3 --size=10240 --asprimary --ondisk=xvda part swap --size=660 --asprimary --ondisk=xvda %packages @core
Vytvoření virtuálního síťového rozhraní Nyní jsou vytvořeny konfigurační soubory a je třeba vytvořit virtuální síťové rozhraní a nastavit centrální bezpečnostní politiky (iptables). Bez tohoto nastavení by vytvářená doména nemohla komunikovat s vnějším prostředím serveru. 63
4.5
Instalace virtuálních domén
Pojem virtuální rozhraní má zde specifické pojetí. Je chápáno jako potomek fyzické síťové karty stroje. Dědí například metriku, MAC adresu, ale má rozdílnou IP adresu. Zařízení označujeme eth0:1, eth0:2 atd. a vytváříme je pro to, aby bylo možné jedné síťové kartě přiřadit více IP adres. Takto nastavená sítová karta příjme ze sítě pakety směřující na nastavené IP adresy a předá je na příslušnou virtuální síťovou kartu. Uživatel je nejprve vyzván k zadání pořadového čísla virtuální karty. Poté se s touto informací vytvoří konfigurační skript ifcfg-eth0:X v /etc/sysconfg/network-scripts/, který definuje systému síťovou kartu. Do konfiguračního souboru se uloží: název zařízení (např. eth0:1, způsob načtení IP adresy (v našem případě statický), IP adresa, maska pro IP adresu, výchozí brána atd. Po vytvoření se zavolá restart sítě a požadované virtuální rozhraní bude systémem vytvořeno. Tento způsob zajistí, že i v případě restartu dom0, bude síťová infrastruktura vždy připravena pro vytváření virtuálních strojů. ifconfig | grep eth0: echo -n "Zadej poradove cislo virtualniho rozhrani [cislo]" read vir_roz touch /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo DEVICE=eth0:$vir_roz > /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo TYPE=Ethernet >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo NETMASK=255.255.255.224 >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo IPADDR=$ip_out >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo GATEWAY=195.113.194.129 >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz /etc/ini.d/network resatrt echo -n "Vytvoreno virtualni royhrani eth0:$vir_roz"
Následující řádky konfiguračního skriptu pomocí nastavení bezpečnostních politik zajistí, aby příchozí paket dostal z virtuálního síťového rozhraní na Xen switch a to se správnými IP adresami vnitřní Xen sítě. Podrobněji se tomuto problému věnuji v kapitole: Popis vnitřní virtuální sítě. Skript provádí přímo nastavení bezpočnostních politik pomoci příkazu iptables. Nejprve se vytvoří patřičné chainy s názvem dané domény. Poté se připojí do základních chainů PREROUTING a POSTROUTING. Chain pro PREROUTING se naplní základními pravidly pro povolení komunikace na portech 22 (ssh), 80 (http) a 443 (http). Na konec se konfigurace iptables uloží a provede se restart bezpečnostních politik. echo -n "Vytvarim chain: iptables -t nat -N PRE_$nazev" iptables -t nat -N PRE_$nazev echo -n "Vytvarim chain: iptables -t nat -N POS_$nazev" iptables -t nat -N POS_$nazev echo -n "Pripojuji chain do PREROUTNIG: iptables -t nat iptables -t nat -A PREROUTING -d $ip_out -j PRE_$nazev echo -n "Pripojuji chain do PREROUTNIG: iptables -t nat iptables -t nat -A POSTROUTING -s $ip_in -j POS_$nazev echo -n "Vytvarim pravidlo pro ssh pristup port 22" echo -n "Vytvarim pravidlo pro http pristup port 80" echo -n "Vytvarim pravidlo pro https pristup, port 443" iptables -t nat -A PRE_$nazev -p tcp -i eth0 -d $ip_out iptables -t nat -A PRE_$nazev -p tcp -i eth0 -d $ip_out iptables -t nat -A PRE_$nazev -p tcp -i eth0 -d $ip_out /etc/ini.d/iptables save /etc/ini.d/iptables restart
-A PREROUTING -d $ip_out -j PRE_$nazev" -A POSTROUTING -s $ip_in -j POS_$nazev"
--dport 22 -j DNAT --to $ip_in:22 --dport 80 -j DNAT --to $ip_in:80 --dport 443 -j DNAT --to $ip_in:443
64
4.6
Popis vnitřní virtuální sítě
V tomto okamžiku jsou vytvořeny všechny konfigurační soubory a je nastaveno vše tak, aby mohla byt vytvořena virtuální doména, která ihned po nastartování bude funkční. Instalaci zahájí poslední příkaz tohoto skriptu xm create, který slouží pro správu virtuálních strojů z příkazové řádky hostujícího operačního systému. Příkaz xm bude podrobně popsán v kapitole: 4.8 Možnosti správy virtuálních domén. Díky konfiguračnímu skriptu, který vytvoří a nastaví vše potřebné pro vznik nového virtuálního systému, se instalace domén značně zjednoduší. Odstraní se případné opomenutí některých z nastavení a podstatně se zkrátí doba potřebná na modifikaci jednotlivých konfiguračních souboru. Čas instalace se pohybuje zejména v závislosti na velikosti image souboru a rychlosti serveru. To znamená, že pro 11 GB image soubor na serveru SunFire V40z se instalace pohybuje do 15 minut. echo -n "Nasleduje spusteni instalace" xm create -c /etc/xen/dom/$nazev else echo "Instalace se nezdarila!" fi
4.6
Popis vnitřní virtuální sítě
Vytvoření vnitřní virtuální Xen sítě je složitý proces a závisí na struktuře naší fyzické sítě. V tomto okamžiku vyvstává problém, aby přes jednu fyzickou kartu (s jednou MAC a IP adresou) mohlo více operačních systému komunikovat směrem ven i dovnitř. Zároveň je třeba zajistit vnitřní komunikaci mezi samotnými virtuálními systémy. Xen obsahuje sadu skriptů v /etc/xen/scripts, které se volají při startu systému nebo při vytváření jednotlivých domén. Pomocí těchto několika skriptů lze vytvořit podstatě jakoukoliv síťovou architekturu. Základní situace Našemu serveru, respektive naší síťové kartě, je přidělena IP adresa a k ní doménové jméno v rámci dané podsítě. Tímto způsobem je možné server adresovat a komunikovat s ním. Pokud ovšem chceme, aby prostřednictvím této síťové karty komunikovaly i další stroje, „schované uvnitřÿ, je k tomu potřeba nějaký mechanismus. V první řadě musíme vytvořit jakýsi vnitřní virtuální switch a dále operačnímu systému nastavit, na který port tohoto virtuálního switche má poslat paket adresovaný jedné z vnitřních domén. O vytvoření virtuálního switche, v terminologii Xen nazývaný xenbr, se postará při startu hostitelského operačního systému (dom0) samotný Xen, pomocí svých skriptů (network-bridge, network-nat, network-route, xen-networkcommon.sh) uložených v /etc/xen/scripts. Naproti tomu, o přesměrování příchozích a odchozích paketů se musí postarat administrator. Lze využít zejména tzv. forward paketů a nastavení iptables v chainech PREROUTING a POSTROUTING, které jsou předřazeny samotným bezpečnostním politikám firewallu. Tato problematika bude podrobněji vysvětlena v následující kapitole 4.7 Přesměrování paketů.
65
4.6
Popis vnitřní virtuální sítě
Virtuální switch Virtuální switch má stejné funkce jako fyzický switch. To znamená, že slouží k vnitřní komunikaci mezi doménami a také k tomu, aby bylo umožněna komunikace směrem ven i dovnitř. Fyzická síťová karta eth0, je při startu Xenu přejmenována na zařízení peth0. S přidělenou IP adresou, je připojena přímo do Xenswitche (xenbr0) jako defaultní port. Xenswitch (xenbr0) obsahuje několik virtuálních síťových karet, vif0.0, vif0.1, vif1.0 atd., které jsou jakoby zapojeny do Xenswitche xenbr0). Tyto virtuální karty (vif1.0) přímo komunikují s virtuálními kartami jednotlivých virtuálních domén (eth0). Pro zjednodušení by se dalo říct, že každá virtuální karta dané domény je zapojena do Xen switche.
Obrázek 9: Schéma zapojení virtuálních domén do Xem switche na serveru jezecek.
Označení tzv. virtuálních zásuvek má svůj systém. První číslo v názvu portu (např. vif1.0) znamená, že se jedná o virtuální kartu, která přímo komunikuje s některým virtuálním síťovým zařízením zapojeným do virtuální domény, která nastartovala jako první. Druhé číslo pak označuje číslo virtuální síťové karty na daném virtuálním stroji. Například virtuální karta vif1.1 je zapojena do první nastartované domény a komunikuje přímo se síťovou kartou eth1 dané domény. Číslování virtuálních karet se počítá včetně těch neúspěšně nastartovaných a nebo ukončených. Každá nová doména dostane svoje unikátní číslo ID společně s přidělenou kartou zapojenou do Xenswitche. Tato síťová virtuální struktura se vytváří automaticky s pomocí volání skriptů při běžném startu domény. Zvláštní postavení má karta vif0.0, ke které se připojuje síťová karta eth0, hostitelské domény (dom0). Tento mechanizmus nám umožňuje vytvářet složité síťové struktury, kterými lze precizně 66
4.7
Přesměrování paketů
řídit síťovou komunikaci virtualizace. Dokonce je možné řídit tok jednotlivých služeb a rozdělit jej do na různá zařízení, a ty pak podle potřeby dále směrovat. Složitější schéma Xen switche popisuje obrázek 19 v příloze práce. Následující dva obrázky 9 a 10 znázorňují konkrétní topologii Xen switche na instalovaném serveru jezecek.
Obrázek 10: Znázornění síťové topologie serveru jezecek.
Implementace virtuálního Xen switche byla přiblížena v předchozím textu. Následující text se zabývá tím, aby se příchozí respektive odchozí pakety správně směrovaly. To znamená, že je zapotřebí systému říct co má s příchozím či odchozím paketem udělat, jak ho má modifikovat, aby ho systém doručil respektive odeslal na správné místo.
4.7
Přesměrování paketů
Aby byla virtuální doména dostupná, a adresovatelná z celé sítě je nutné mít přidělenou správcem sítě unikátní IP adresu a k ní doménové jméno. Problém nastává tehdy, když doménové virtuální rozhraní mají přidělené správcem serveru jiné (vnitřní) IP adresy. Je tedy nutné, aby byl implementován mechanismus, který zajistí přesměrování příchozího nebo odchozího paketu na vnitřní, respektive vnější IP adresu. Toho je docíleno pomocí přesměrování (forwadrování) paketů. To ovšem nebude fungovat samo o sobě, neboť příchozí pakety mají veřejnou IP adresu sítě, která je pro směrování v rámci vnitřní virtuální síť zcela nepoužitelná. Stejně tak i odchozí pakety odcházejí z virtuálních serverů se zdrojovou IP adresou konkrétní virtuální síťové karty. Je proto třeba zajistit pozměnění paketů ještě než dojde k vlastnímu směřování a poté je poslat na správnou virtuální kartu na Xen switchi. V systémech Linux je k tomuto účelu v bezpečnostních politikách iptables integrovaný ideální nastroj, tzv. PREROUTING, POSTROUTING. Těmito bezpečnostními tabulkami (chains) prochází paket ihned po fyzickém příchodu na síťovou kartu, a to ještě před vstupem do bezpečnostních politik INPUT v iptables. V tomto místě se rozhodne, zda se 67
4.7
Přesměrování paketů
paket do systému dostane (ACCEPT), bude zahozen (DENY), nebo bude odmítnut (REJECT). Celý tento proces názorně popisuje obrázek 11, s následujícím popisem.
Obrázek 11: Schéma vnitřní struktury bezpečnostních politik (iptables) Xenu.
4.7.1
PREROUTING
Počítačové sítě a směrování v nich funguje na principu unikátních IP adres a doménových jmen. Tyto dva pojmy spolu velice úzce souvisí, jedná se o tzv. DNS (Domain Name Services) záznamy. Požadavky na server, které uživatelé generují, jsou adresovány jeho doménovým jménem, které je svázáno pomocí DNS služeb s IP adresou konkrétního síťového zařízení. Stanice generující paket na základě DNS dotazu a následné odpovědi doplní do hlavičky paketu IP adresu serveru, se kterým chce komunikovat. Tento paket je směrován lokální sítí až dorazí na rozhraní fyzického stroje eth0. Jelikož se jedná o server, na kterém běží dva a více virtuálních serverů, je na jednom fyzickém rozhraní (eth0) vytvořeno tolik virtuálních rozhraní (eth0:x), kolik máme virtuálních serverů. Virtuální síťovou kartu v tomto případě chápeme, jako virtuální kartu karty fyzické. Má stejné parametry jako její mateřská karta, jako je metrika, MAC adresa atd., ale dostává přidělenou jedinečnou IP adresu sítě. Proto je možné, aby síťová karta přijala pakety s více IP adresami, a to takové IP adresy, jež jsou nastaveny u jejich virtuálních rozhraní. Nutné je pamatovat na to, že tato sdílená karta je pak vytěžována všemi virtuálními stroji, a je nutné pamatovat na její dostatečně dimenzovaný výkon, aby nedošlo k zahlcení. Když je paket síťovou kartou přijat (ať už přišel na kterékoliv rozhraní), prochází přes bezpečnostní politiky iptables, kde nejprve dostane do chainu PREROUTING. V tomto chainu jsou vytvořeny skupiny pro jednotlivé virtuální stroje. Pokud paket vyhoví jednomu z pravidel, respektive je adresován jednomu z virtuálních serverů pro jakýkoliv port, z jakéhokoliv zdrojového stroje, spadá do tohoto chainu a prochází další pravidla, která jsou v daném chainu nastavena. Například pokud paket je adresován stroji echo.mendelu.cz, vyhoví pravidlu PRE ECHO a přejde se 68
4.7
Přesměrování paketů
k další sérii rozhodování do té doby, než nějakému vyhoví a je přijat, nebo nevyhoví žádnému a je zamítnut. Toto je princip Unix, Linux firewallu (bezpečnostních politik iptables). Chain PREROUTING má v hierarchii iptables specifickou funkci. Do této skupiny pravidel paket přichází ještě před vstupem do samotného bezpečnostního chainu INPUT. Ani tak nerozhoduje o tom, zda paket bude vpuštěn do systému nebo bude zamítnut, ale definuje pravidla, jak pakety přicházející do systému pozměnit, aby byly následnými bezpečnostními pravidly přijaty. Chain PREROUTING (policy DROP) target prot opt source PRE_TRUST all -- anywhere PRE_ECHO all -- anywhere PRE_MAPY all -- anywhere PRE_VSK all -- anywhere
destination trust.mendelu.cz echo.mendelu.cz mapy.mendelu.cz vsk.mendelu.cz
Přijatý paket vyhověl v chainu PREROUTING chainu PRE ECHO a bude postupně procházet přes následující pravidla, která v případě vyhovění paket daným způsobem pozmění, aby s ním bylo možné nadále pracovat v rámci virtuální Xen sítě. Například první pravidlo v chainu PRE ECHO říká: pokud paket vyhoví podmínce, že cílový uzel je stroj echo.mendelu.cz a jedná se to komunikaci na TCP portu 22 (ssh) z libovolného zdrojového stroje, změň v hlavičce paketu cílový počítač na IP 192.168.1.7, port 22. 192.168.1.7 je vnitřní IP adresa virtuální síťové karty přidělená správcem serveru. Když paket vyhoví některému z pravidel, je pozměněn a puštěn dál do systému iptables, kde v závislosti na tom, jestli projde bezpečnostními politikami INPUT, je vpuštěn do systému, a dále na virtuální switch, kde je směrován na správný virtuální server. Na každém virtuálním stroji paket znovu prochází přes další bezpečnostní politiky iptables a pokud i těm vyhoví, je konečně u svého cíle, v systému virtuálního stroje. Chain PRE_ECHO (1 references) target prot opt source DNAT tcp -- anywhere DNAT tcp -- anywhere DNAT tcp -- anywhere DNAT tcp -- anywhere DNAT tcp -- anywhere
destination echo.mendelu.cz echo.mendelu.cz echo.mendelu.cz echo.mendelu.cz echo.mendelu.cz
tcp tcp tcp tcp tcp
dpt:ssh to:192.168.1.7:22 dpt:http to:192.168.1.7:80 dpt:https to:192.168.1.7:443 dpt:webcache to:192.168.1.7:8080 dpt:tproxy to:192.168.1.7:8081
Nastavení chainu PREROUTING pro virtuální server echo.mendelu.cz, vytvoříme zadáváním těchto příkazů: iptables -t nat -N PRE_ECHO iptables -t nat -A PREROUTING -d 195.113.215.8 -j IRONMAN iptables -t nat -A PRE_ECHO -p tcp -i eth0 -d 195.113.194.146 --dport 80 -j DNAT --to 192.168.1.7:80
Jak je vidět, bezpečnostní systém paravirtualizace pomocí Xenu je velice propracovaný a lze s naprostou přesností vymezit bezpečnostní pravidla, omezení a povolení. Správce takového serveru může například povolovat jen ty porty, které uzná za vhodné a to bez jediného zásahu na systému virtuálního stroje. Jako správce virtálního serveru může být k virtuálním strojům uživatelů velmi restriktivní, tak jak bylo demonstrováno, anebo může být benevolentní a povolit veškerou komunikaci. 69
4.8
Možnosti správy Xen domén
Tento způsob dvojité ochrany se mi osobně velice líbí, a také je to jeden z důvodů, proč jsem se rozhodl právě pro paravirtualizační Xen. 4.7.2
POSTROUTING
Při komunikaci směrem ven je mechanismus převodu IP adres zrcadlově opačný. Paket, který opouští virtuální stroj, nese ve své hlavičce IP adresu zdrojového počítače IP vnitřní domén. Což by ani tak nevadilo, pokud by paket nemusel hledat cestu zpět. Cílová adresa je dána a takový paket by jistě dosáhl svého cíle. Avšak takových paketů je málo. Jak jsme zvyklí u jakéhokoliv druhu komunikace, tak i v případě síťové komunikace očekáváme odpovědi na naše dotazy nebo požadavky. Proto je nutné zajistit, aby paket měl správnou i zdrojovou IP adresu v rámci sítě, kde se právě pohybuje. Aby stroj, který odpovídá na daný požadavek, mohl do hlavičky paketu uvést správnou IP adresu cílového stroje známého v síti. Příchozí pakety procházejí přes chain PREROUTING, který je modifikuje. Hlavičky odchozích paketů jsou pozměněny předtím, než opustí skrze síťovou kartu počítač, v chainu POSTROUTING podle přesně daných pravidel. Chain POSTROUTING je tak jako PREROUTING naplněn pouze dalšími chainy pro jednotlivé virtuální domény. Pokud paket pochází z jedné z domén, vyhoví danému pravidlu a dostane se do chainu, kde jsou definována další pravidla, jak paket modifikovat. V modelovém případě je to pouze jedno pravidlo změny IP adresy z původní vnitřní sítě na IP adresu sítě veřejné. Poté je paket předán fyzické vrstvě, která ho odešle ze stroje pryč směrem ke svému příjemci. Chain POSTROUTING (policy ACCEPT) target prot opt source POS_TRUST all -- trust POS_ECHO all -- echo POS_MAPY all -- mapy POS_VSK all -- vsk
destination anywhere anywhere anywhere anywhere
Chain POS_ECHO (1 references) target prot opt source SNAT all -- echo
destination anywhere
4.8
to:195.113.194.146
Možnosti správy Xen domén
V tuto chvíli již máme v provozu několik funkčních virtuálních serverů, ale zároveň potřebujeme mít nějaký nástroj, kterým budeme virtuální stroje spravovat. Nástroj, který by umožňoval zastavení, restart, uložení a opětovné spuštění domény. Ba co víc, pomocí kterého bychom mohli přidělovat virtuálním serverům vice či méně operační pamětí, nebo přiřadit další virtuální procesor, a to samozřejmě pokud možno bez restartu běžící domény přímo za chodu. Tyto nástroje samozřejmě existují, dva z nich jsou integrovány přímo v samotném Xenu, jsou to příkazy xm , virsh. Další existují jako grafické nadstavby využívající tyto vnitřní příkazy, jako je například Virtual Machine Manager (VMM). Vybrané dva budou podrobněji popsány v následujícím textu. 70
4.8
4.8.1
Možnosti správy Xen domén
Xm
Xm, neboli Xen management, je hlavní program pro správu Xen domén. Program slouží k vytváření, startu, pozastavení, restartu a zastavení konkrétní domény. Využíváme ho pro přidaní VCPU (virtuálního CPU), pro přidání paměti nebo přidání dalšího blokového zařízení doméně, a také k migraci domén v rámci dvou serverů (nodů). Program je součástí hypervisoru, je tedy spouštěn z příkazové řádky hostujícího operačního systému (dom0). Při jeho používaní je potřeba si uvědomovat, že nesprávným použitím můžeme běžící doménu poškodit. Příkaz má jednoduchou základní strukturu: xm <subcommand> <domain-id> [OPTIONS] xm destroy echo c
V systému domén jsou domény číslovány podle toho, koliká v pořadí doména nastartuje. Čísla domén lze snadno zjistit například příkazem xm list. Za volbu domain-id pak můžeme dosazovat konkrétní číslo a nebo přímo název požadované domény.
Obrázek 12: Ukázka výpisu xm top.
4.8.2
Virtual Machine Manager (VMM)
Jedná se o grafickou aplikaci vytvořenou právě pro správu virtuálních strojů. Pomocí virt-manager, jak ve zkratce Virtual machine manager nazývá, lze spravovat jednak virtuální servery Xen, ale i servery s technologii QEMU nebo KVM. Aplikace nabízí celkem komfortní prostředí pro správu virtuálních serverů a ovlivňování jejich stavu. Nabízí přehledný monitoring, sledování stavu vytížení zdrojů apod. Možnost přidávání a odebírání výpočetních zdrojů jednotlivým doménám. Dokonce pomocí VMM lze instalovat nové domény. Aplikaci Virtual machine manager je možné nainstalovat již během instalace hostujícího operačního systému v sekci virtualizace, dále po instalaci balíčkovací službou rpm, nebo yum. Součástí balíčku virt, jsou i další nástroje: virt-clone pro klonování existujících domén, virt-image pro vytvoření domény s image souboru, virt-install pro vytváření nových virtuálních strojů. Popis těchto nastrojů není předmětem této práce.
71
4.8
Možnosti správy Xen domén
Po spuštění aplikace příkazem virt-manager musí uživatel vzdáleně připojit servery, na kterých je provozována virtualizace a které chce spravovat. Spojení probíhá přes bezpečný protokol ssh. Po úspěšném připojení se zobrazí všechny spuštěné virtuální servery. Zobrazí se grafické informace o vytíženosti jednotlivých strojů, jejich využití paměti, počet přidělených VCPU a samozřejmě jejich ID. Tento první pohled je nastíněn na obrázku 15, jsou zobrazeny dva připojené fyzické servery (jezecek a hibernal), včetně všech běžících virtuálních serverů, které v současnosti provozuji.
Obrázek 13: Ukázka hlavní obrazovky VMM.
Pomocí VMM lze spravovat velikost přidělené paměti, počet přidělených virtuálních procesorů, přidávání blokových zařízení, spravovat síťová zařízení. Tyto změny se projevují na virtuálních strojích okamžitě. Obrázek 14 ukazuje náhled správy paměti. VMM umožňuje i instalace virtuálních strojů. Stačí spustit instalačního průvodce, který postupně vyzve k zadání nutných údajů pro vznik domény (názvu, počet VCPU, velikost paměti, atd.). I přes všechny doposud popsané klady VMM, není tento software ani zdaleka tak propracovaný jako konkurenční nástroj od společnosti VMware. Je tomu tak zejména pro to, že XEN, KVM, QEMU a tedy i virt-manager jsou volně šiřitelné programy. To samozřejmě ovlivňuje jejich propracovanost i uživatelskou přívětivost. Komerční VMware Infrastructure Client má oproti VMM zabudované funkce jako je migrace, migrace virt. strojů podle aktuální zátěže fyzického stroje tzv. dynamická optimalizace zátěže, dále zálohovací systém, VMware convertor pro převod nevizualizovaného systému na vizualizovaný, plánovač úloh a další.
72
4.9
Migrace
Obrázek 14: Ukázka správy paměti VMM
4.9
Migrace
Virtualizace i přes nesporné výhody s sebou přináší také jednu velkou nevýhodu. Představme si situaci, kdy máme díky virtualizaci možnost provozovat každou požadovanou službu (např. DNS, http, FTP, mail) na samostatném virtuálním serveru. V případě havárie fyzické stroje dojde k výpadku všech služeb. Tento problém řeší právě migrace. Migrace je přenos virtuálního stroje (hosta) mezi jednotlivými fyzickými stroji (hostiteli). Každý virtuální počítač běží v prostředí nějakého hypervisoru (Virtual Machine Monitor), který mimo jiné rozhoduje o přidělení procesoru a také má plně pod kontrolou všechna virtuální rozhraní (především přístup na disk či do počítačové sítě). Pomocí hypervisoru můžeme domény uvést do stavu, kdy se uloží aktuální stav na disk a virtuální stroj se zastaví (hibernuje). Takto vytvořený obraz domény můžeme přesunout na jiný fyzický stroj a tam jej opět spustit. Tomuto procesu se říká migrace. Samozřejmě reálná situace je komplikovanější kvůli vstup/výstupním operacím. Systém souboru přesuneme celkem bez větších problémů díky uložení otevřených souboru na disk. Skutečný problém je však se síťovou komunikací. Pokud hypervisor systém zastaví, ztratí tak schopnost přijímat data. Pokud tedy během migrace nějaký jiný počítač pošle na migrující systém paket, nemůže být přijat. Proto jsou v hypervisoru integrovány zajišťující mechanismy tím, že paket přicházející na fyzickou síťovou kartu hostujícího OS, nebude rovnou přesunut do virtuálního síťového rozhraní konkrétního migrujícího systému, ale bude přesunut do speciálního bufferu určeného pro danou doménu. Tento buffer se po znovu zprovoznění přesouvané domény přesune na virtuální síťovou kartu a pakety jsou přijaty. Tímto způsobem je možné i u migrace zajistit bezztrátovost síťové komunikace. Popsaný
73
4.9
Migrace
způsob migrace stroje funguje pouze v případě přesunu stroje v rámci jedné podsítě, kdy nemusí dojít ke změně IP adresy virtuálního stroje. Jak je z předchozího textu patrné, pro migraci jsou potřeba alespoň dva fyzické stroje a v nejlepším případě jeden sdílený diskový prostor, který mají možnost sdílet oba dva stroje. Díky abstrakci hardwaru, kterou virtualizace poskytuje, není nutné, aby si byly servery hardwarově podobné. Důležité je, aby se shodovaly verzí virtualizačního nástroje (Xen) a architekturou procesorů. Výhody, které nám tato topologie nabízí, jsou značné. Díky tomu že máme dva systémy, které jsou na sobě funkčně nezávislé, můžeme například v případě údržby jednoho ze serverů plynule migrovat virtuální stroje na druhý funkční, a zabránit tak výpadku některých z provozovaných služeb. Další možností je udržovat na obou serverech stejný stav virtuálních serveru. V tomto případě je jeden využíván pro výpočty a na druhém je udržován pomocí sinc aktuální stav. V případě výpadku primární serveru dojde k okamžitému převzetí druhým hypervisorem a zajistí se tak další provoz serveru se ztrátou nejvýše jednoho paketu. V případě, že máme systém dvou serverů sdílící stejný diskový prostor je situace o to snadnější. (V případě výpadku hypervisoru sekundárního serveru jen převezme doménu a zavede jí na svůj hardware.) Migrace však umožňuje jít ještě dále. Při použití tzv. dynamického přidělování virtuálních serverů mezi fyzické stroje. V situacích, kdy máme několik virtuálních serverů spojených do clusteru (několik serverů zpracovávající stejný druh požadavku, servery spojují svůj výpočetní výkon k stejnému účelu). Tyto virtuální servery mohou být provozovány na několika fyzických strojích. Dynamicky lze podle zátěže rozdělovat virtuální servery na jednotlivé fyzické servery, které jsou méně využity. Toho se využívá například při webových službách, které zpravidla spolupracují s databází. Za pomocí virtualizace můžeme tyto dvě služby oddělit a vytvořit cluster webových a databázových serverů o variabilním počtu virtuálních serverů. Poté v denních hodinách, kdy jsou více využívány webové služby, je dynamicky upřednostňován webový cluster. V nočních hodinách je naopak upřednosťnován databázový, který tak může vykonávat náročné operace nad databází. Virtualizace ve spolupráci s migrací virtuálních strojů přispívá i k tzv. Green IT. Například v situaci, kdy zkonsolidujeme několik fyzických serverů a provozujeme je na jediném fyzickém stroji, má značné úspory ve spotřebě elektrické energie v podobě přímé úspory elektrické energie ale také, v úspoře energie vynaložené na chlazení hardwaru. Dokonce pomocí skriptů a správného nastavení lze provozovat virtuální servery na jednom (primárním) serveru a v případě velké zátěže zapnout další (sekundární) a následně na něj automatizovaně přesunout některé domény. Variant, jak virtualizaci a migraci využívat, je mnoho. Detailnějším prozkoumáním možností migrace a virtualizace bych se i nadále rád zabýval ve svém profesním životě. Migraci rozdělujeme na: • Off-line — rychlejší, ale stroj je suspendovaný. • On-line — pomalejší, migrovaný stroj je v provozu, tzv. live migrace. 74
4.10
Porovnání Xenu s ostatními virtualizačními technikami
• Copy — stroj je uložen na disk a přesunut na jiný systém, tam spuštěn. Stadia migrace • Pre-migration — uvedení do provozu virtuální doménu na primárním stroji. • Reservetion — inicializace image souboru na sekundárním stroji. • Pre-copy — cyklické kopírování paměťových stránek. • Stop-and-copy — pozastavení virtuálního stroje na primárním serveru, přesměrování síťového provozu na sekundární stroj, dokončení synchronizace. • Commitment — zavedení migrovaného virtuálního stroje na sekundárním serveru, uvolnění virtuálního stroje na primárním serveru.
4.10
Porovnání Xenu s ostatními virtualizačními technikami
V této části práce bych rád uvedl srovnání vlastností jednotlivých virtualizačních nástrojů, abych tak podložil důvod, proč jsem se rozhodnul právě pro paravirtualizaci pomocí Xenu. Samotné vlastní testování jednotlivých technik je velice rozsáhlá problematika a vystačila by na další práci podobného rozsahu. Proto jsem při psaní těchto odstavců vycházel z poznatků, které jsem získal během studia odborných textů, článků a prací. Pokud chceme virtualizační nástroje porovnávat, nejprve musíme stanovit kritéria. 4.10.1
Režie virtualizace
Samozřejmě platí, že čím více virtuálních strojů na systému běží, tím větší režie daného hypervisoru. Zde platí pochopitelně přímá úměra. Jistý druh přímé úměry platí i v případě posuzování vizualizačních metod, kde posuzování jednotlivých metod závisí na poměru počtu instrukcí, které dokáže daná metoda provést nativně a jiná ne. Virtualizační metody můžeme takto srovnávat z důvodu jejich zobecnění. Například je dáno, jaké instrukce paravirtualizace dokáže provést nativně a které ne. Při porovnání plné virtualizace a paravirtualizace je počet instrukcí prováděných nativně přibližně stejný. O celkové režii rozhoduje převážně simulace privilegovaných instrukcí. V tomto pohledu má výhodu právě paravirtualizace, která používá hostované i hostující systémy s upravenými jádry, tedy lépe připravenými na virtualizaci. V neposlední řadě režii ovlivňuje i použitá virtualizační technika. Porovnání dvou technik, jenž používají stejnou virtualizační metodu, by bylo jistě zajímavé. Virtualizační techniky pocházejí od různých výrobců a zde záleží na nápadech, schopnostech, preciznosti, důkladnosti virtualizační nastroj vyrobit. 4.10.2
Srovnání výpočetního výkonu
Výpočetní výkon jednotlivých domén je dán zejména administrátorem přidělenými zdroji jednotlivým virtuálním serverům pomocí nástrojů pro správu, tak jak bylo popsáno v kapitole 8.6. Při testování je nutno dbát na zachování stejných podmínek 75
4.10
Porovnání Xenu s ostatními virtualizačními technikami
Obrázek 15: Procentní srovnání vizualizačních technik Xen, VMware a UML s nevirtualizovaným systémem, pomocí standardních benchmarků a porovnání doby kompilace jádra (Jerry Mayfield).
jak pro testované domény, u nichž není problém administrovat stejně velké zdroje, tak hlavně nastavit stejné podmínky i systému, který nepoběží virtuálně a budeme ho brát jako výchozí. K měření výkonu se používají tzv. benchmarkové testy. Ty provádějí na stroji různé výpočetní operace, testují rychlost vytváření souboru či adresářů, nebo rychlost shellu. 4.10.3
Srovnání síťově propustnosti
Další velice důležitou vlastností systému je co možná největší propustnost sítového rozhraní. U virtualizovaných systémů se jedná o virtuální síťové rozhraní zapojené do virtuálního switche a ten je následně připojen k již fyzické kartě fyzického stroje. K sítové kartě je pak připojen jiný počítač a ten bude posílat data směrem k naší virtuální doméně. Zajímá nás, o kolik bude menší objem přenesených dat menší, oproti přenosu stejných dat na nevizualizovaný systém za stejných podmínek a za danou časovou jednotku (1 sekunda). 4.10.4
Míra izolace
Pokud vezmeme v potaz jeden ze základních principů virtualizace virtuální stroj nesmí žádaným způsobem ovlivňovat běh jiných virtuálních strojů, potom z čistě 76
4.10
Porovnání Xenu s ostatními virtualizačními technikami
Obrázek 16: Procentní srovnání výkonu vizualizačních technik Xen, VMware při různých činostech systému, s nevirtualizovaným systémem (xen.org).
teoretického hlediska by míra izolace jednotlivých metod a technik měla být stejná. Z tohoto pohledu, není tedy rozdíl, zda li se bude jednat o simulaci, paravirtualizaci nebo plnou virtualizaci. Míra izolace bude vždy stejná. Samozřejmě, že u některých náhodných stavů může dojít k porušení izolace. To může vést například k ovlivnění privilegovaných instrukcí a může v konečném důsledku skončit i zaseknutím fyzického stroje. 4.10.5
Bezpečnost
Z bezpečnostního hlediska se jednotlivé virtualizační techniky nedají příliš porovnávat. Každá využívá jiný bezpečnostní mechanismus a těžko bez důkladného otestování posuzovat, která je více či méně bezpečná. Posuzování jednotlivých vizualizačních metod je z důvodu stanoveních jistých koncepcí, již srovnatelnější. Ale přesto je nutných pár vět ohledně bezpečnosti vyplývajících z vlastních zkušeností z implementace Xenu. Mechanismus, jež používá paravirtualizační Xen, se mi osobně velice líbí. S trochou abstrakce připomíná technologii Honeypot z oblasti zabezpečování serveru, kde na útočníka je nastražena virtuálně vytvořena past (síť serveru). Útočník pak má pocit, že server skutečně úspěšně napadl a pohybuje se v naší síti. U Xenu v ideálním případě virtuální systém vůbec nepozná. Jeho funkčnost i a vlastnosti jsou stejné, jako by běžel na samostatném fyzickém stroji. Xen ovšem nabízí oproti běžnému sys-
77
4.10
Porovnání Xenu s ostatními virtualizačními technikami
Obrázek 17: Srovnání datové propustnosti paketu různé velikosti. Porovnání vzualizačních technik Xen, VMware, UML s nevirtualizovaným systémem (Jerry Mayfield).
tému ještě jednu bezpečnostní vrstvu, a to na úrovni hostitelského operačního systému. Zde je třeba za pomocí bezpečnostních politik (iptables) vytvořit bezpečnostní politiky pro jednotlivé hostované systémy a filtrovat příchozí i odchozí komunikaci podle uvážení správce virtualizace. Administrátor může samozřejmě také povolit veškerou komunikaci na konkrétní doménu a na jinou naopak být velice restriktivní. Tento princip s sebou nese jedno velké bezpečnostní riziko v podobě napadnutí hostitelského operačního systému. Pokud by k tomu došlo, útočník by získal kontrolu nad vizualizačním systémem a mohl by jednotlivé domény nebo i celý fyzický server poškodit. Z tohoto důvodu byla v kapitole 8.3, věnována pozornost zabezpečení systému dom0. 4.10.6
Xen vs. VMware
Na porovnání těchto dvou robustních vizualizačních nástrojů se názory mezi odborníky různí. Každý z nich je ovlivněn právě tím svým nasazeným řešením, které provozuje a preferuje. Vlastnosti Xenu • Méně rozšířený. • Paravirtualizační, s podporou CPU možnost provozování i plné virtualizace. 78
4.10
Porovnání Xenu s ostatními virtualizačními technikami
• Nutnost úpravy jader jak hostovaných tak hostujících systému v případě paravirtualizace. • Výkon virtuálních strojů srovnatelný s fyzickým strojem u paravirtualizace. • Volně šiřitelný SW, je zdarma. • Podpora 32bittových i 64bitových architektur (i386, x86 64). • Náročné ovládání, nekvalitní nástroje pro správu (xm, virt-manager). Vlastnosti VMware • Nejrozšířenější, velká podpora. • Podpora plné virtualizace. • Není nutné upravovat jádra OS, možnost provozovat podstatě jakýkoliv virtuální OS. • Výkon na velice dobré úrovni. • Snadné, velice propracované ovládání a dokonalá správa Infrastructure Client. • Licenční software. VMware má čtyř stupňovou produktovou řadu, nejnižší produkt free ESX nebo ESXi jsou zdarma, následují produkty Foundation a Standart s cenou přibližně 30 respektive 70 tisíc korun a za nejvyšší řadu Enterprise uživatel zaplatí 100 tisíc korun. Licenční podmínky jsou na jeden server a nutné je zakoupit zvlášť management software VMware Infrastructure Client. • U volně šiřitelného free ESXi jsou hardwarové omezení. Z uvedených kladů, záporů a mých dosavadních zkušeností vyvozuji toto: Xen je výborný virtualizační nástroj, je zdarma a v případě nekomerčního využití (například ve školství) má velký potenciál. Paravirtualizace pomocí Xenu, je snad nejvýkonnější možnost, jak provozovat virtuální stroje. Velkým mínusem paravirtualizace je nutnost opravovat jádra OS, což v důsledku vede k omezenému výběru systému vhodných k virtualizaci pouze na Linux, Unix systémy. Tento nedostatek je podle mého názoru klíčový a společně s uživatelsky náročnou obsluhou (kdy například pro dynamické řízení zátěže je nutné, aby administrátor vytvářel vlastní skripty), řadí Xen má stejnou, možná i horší úroveň než VMware. Konkurenční nástroj VMware je v dnes lídrem na poli virtualizace a pravděpodobně jím i zůstane. Vděčí tím hlavně spolehlivostí, uspokojivým výkonem a uživatelskou přívětivostí svého produktu. Samozřejmě za tento „komfortÿ je nutné zaplatit vyšší částky. Proto VMware nachází využití zejména při komerčním využití virtualizace, firmami které nabízí serverové konsolidace, web-hosting, nebo server-housing. V-zhledem k hardwarovým omezením, které jsem měl, jsem bohužel nebyl schopen vyzkoušet Xen při plné virtualizaci. To je velká škoda, protože pak by si tyto porovnávané virtualizační techniky byly bližší a jejich porovnání by bylo jistě zajímavé. Doufám, že se mi v budoucnosti podaří tuto a i jiné virtualizační techniky vyzkoušet.
79
5
5
ZÁVĚR
Závěr
Virtualizace není jen zajímavou oblastí pro výzkum a další rozvoj, ale má jednoznačné praktické využití. Virtualizace výpočetní infrastruktury nejen pomáhá řešit řadu existujících problémů, ale otevírá i prostor pro zcela nové způsoby využití výpočetních infrastruktur. Při prvním pochopením smyslu virtualizace nám dává prostředek k řešení stále vzrůstajících požadavků na zvyšování počtu počítačů, které jsou stále výkonnější a jejich potenciál zůstává v mnoha případech ne zcela využit. Například potřebujeme-li zajistit provoz čtyř služeb, jež každá musí běžet na samostatném serveru, je ideálním řešením virtualizovat každý z nich a ušetřit tak velké náklady na pořízení a provoz čtyř samostatných fyzických serverů. Pokud se ale do problematiky virtualizace počítačů ponoříme hlouběji, pochopíme další nesčetné výhody a praktické využití, které nabízí. Mnoho z nich bylo objasněno: serverová konsolidace, migrace, dynamická správa zátěže, ukládání aktuálních stavů tzv. snímkování atd. Pro mnoho dalších, jako je virtualizace počítačových sítí, již prostor v této práci nebyl. Čtenáři byli seznámeni s koncepty a historií počítačů, se základní počítačovou architekturou (Von Neumannovo a Harvardské schéma počítače), popisem a složením výpočetní systému. V teoretické části byly popsány funkce a architektury operačních systémů, jednotlivé vybrané operační systémy a definovány základní pojmy. Po základním seznámení s operačními systémy se práce věnuje již jen virtualizaci. Byla popsána virtualizace obecně a čtenář je seznámen se základními principy a pojmy a existujícími virtualizačními metodami. Podle přístupu virtualizovaných systémů (zda komunikuje přímo s fyzickým hardwarem, nebo k tomu využívá prostředky hostujícího systému) k fyzickému hardwaru lze virtualizaci rozdělit na čtyři základní metody. Simulaci (virtuální stroj komunikuje pouze skrze hypervisor), úplnou virtualizaci (pouze privilegované instrukce jsou převáděny hypervisorem), paravirtualizaci (privilegované instrukce jsou nahrazovány explicitním voláním již v operačním systému) a partitioning (virtualizační vrstva je přímo součástí hostujícího operačního systému). Část textu byla věnována i analýzování výhod a nevýhod jednotlivých metod. Jako nejlepší virtualizační metoda se jevila úplná virtualizace, která ovšem ke svému běhu potřebuje vylepšené instrukční sady procesorů. S jednotlivými virtualizačními metodami úzce souvisí konkrétní virtualizační techniky. Pod pojmem virtualizační techniky si lze představit konkrétní implementaci použité metody, v praxi. Byly popsány nejznámější virtualizační techniky a zařazeny do jednotlivých metod spolu s výhodami, způsobem a možnostmi využití. Cílem vlastní práce bylo implementovat a uvést do funkčního stavu paravirtualizační techniku Xen. Po pečlivém nastudování několika dokumentací a nesčetných manuálů, které někdy i chybně popisují instalaci Xenu, byla v první řadě popsána hardwarová konfigurace serveru, na kterém byla virtualizace implementována. Následuje krátký manuál k instalaci operačního systému a důležité zabezpečení hostujícího operačního systému. Jedním z pilířů vlastní práce bylo vytvoření vlast80
5
ZÁVĚR
ního instalačního skriptu, který zjednodušil a urychlil vlastní instalaci virtuálních strojů. Tento skript postupně vytvořil a nakonfiguroval všechny potřebné konfigurační soubory potřebné pro vytvoření a instalaci domény, vytvořil a upravil síťovou infrastrukturu a bezpečnostní politiky tak, aby uživatel měl co nejvíce usnadněnou práci. Další oblastí, kterou jsem se ve vlastní práci zabýval, byla možnost správy virtuálních serverů pomocí dvou vhodných nástrojů xm a grafického virt-manager. Je zde rozebrána technologie migrace (tedy s přesun) virtuálních serverů z jednoho fyzického stroje na jiný. S tím souvisí nesčetná řada výhod, které jsou taktéž vyzdviženy. Poslední část práce obsahuje srovnání Xenu s jinými virtualizačními technikami, především s konkurenčním VMware. Xen a VMware byly posouzeni z několika hledisek. Výstupem tohoto porovnání je zhodnocení výsledků, z nichž vyplývá že, nástroje jsou souměřitelné a každý má své pole působnosti, kde předčí svého konkurenta. Navzdory nedostatků Xenu, jsem si ověřil, že pro právě mou oblast nasazní je Xen tím pravým virtualizačním nastrojem. Tato práce splňuje všechny cíle, které byly vytyčeny v jejím zadání a má tři zásadní přínosy. • v první řadě poskytuje komplexní uvedení do problematiky virtualizace operačních systému a seznámuje se současnými virtualizačními metodami a technikami, • kompletní popis postupu instalace virtualizace ve části vlastní práce, může čtenáři posloužit jako vyzkoušený manuál pro implementaci serverové virtualizace, • třetím přínosem je implementační část a to uvedení virtualizace do praxe na Ústavu informatiky PEF MZLU v Brně. Což ušetřilo nemalé finanční prostředky na nákup již potřebných serverů, které nyní jsou provozovány virtuálně na technologii Xen. Další využití nalezne virtualizace i při výuce předmětu Operační systémy, kdy každý student bude mít k dispozici vlastní virtuální operační systém. Obrovský potenciál má virtualizace v oblasti virtualizace síťových zařízení a virtuálních celých síťových topologiích. Tímto tématem bych se rád i nadále zabýval. Při tvorbě této práce jsem načerpal mnoho nových poznatků z odborných článku a literatury. Implementace virtualizace pomocí Xenu mi pomohla utřídit a prohloubit mé dosavadní zkušenosti se správou operačních systémů Linux. Práce mi pomohla ujasnit si, čemu se chci i nadále v budoucnu věnovat. Virtualizace bude dlouhodobým trendem, kterému bude jen velmi těžké odolat či uniknout.
81
6
6
LITERATURA
Literatura
Brandejs, M. Linux : praktický průvodce. 2. vyd. Brno: Konvoj, 2003. 304 s., ISBN 80-7302-050-5. Dostálek, L. Velký průvodce protokoly TCP/IP – bezpečnost. 2 vyd. Praha: Computer Press, 2003. 571 s., ISBN 80-7226-849-X. Hunt, C. Linux : síťové servery. 1 vyd. Praha: SoftPress, 2003. 672 s., ISBN 80-86497-59-3. Bach, M.J. Principy operačního systému UNIX. 2 vyd. Praha: Softwarové aplikace a sys, 1993. 512 s., ISBN 80-7226-849-X. Skočovský, L. Principy a problémy OS Unix. 1 vyd. Praha: Science, 1993. 288 s., ISBN 80-901475-0-X. Zmrzlý, S. Mikroprocesorová technika. 1 vyd. Brno: Skripta VUT FEI Brno, 1996. 174 s., ISBN 80-214-0799-9. Matyska, L. Virtualizace výpočetního prostředí. Dokument ve formátu HTML. Poslední revize 2006. [cit. 19. května 2009]. Elektronická adresa http://www.ics.muni.cz/zpravodaj/articles/540.html. Tomeček, J Virtualizace na úrovni jádra operačního systému. Dokument ve formátu HTML. Poslední revize 2007. [cit. 17. května 2009]. Elektronická adresa http://www.abclinuxu.cz/clanky/system/ virtualizace-na-urovni-jadra-operacniho-systemu. Beran, R Virtualizace operačních systémů. Dokument ve formátu HTML. Poslední revize 2006. Elektronická adresa http://www.beranr.webzdarma.cz/virtualizace.htmlobr2. Hájek, J Virtualizace. Dokument ve formátu HTML. Poslední revize 2006. [cit. 12. května 2009]. Elektronická adresa http://interval.cz/clanky/virtualizace-mytus-kouzlohype-nebo-realita/. Koudelka, P. Historie operačních systémů. Dokument ve formátu HTML. Poslední revize 2004. [cit. 10. května 2009]. Elektronická adresa http://airborn.webz.cz/histos.html. Brandejs, M. Výpočetní systémy. Dokument ve formátu HTML. Poslední revize 2008. [cit. 12. května 2009]. Elektronická adresa http://www.fi.muni.cz/usr/brandejs/PB151/. Šiška, FI MUNI Procesor. Dokument ve formátu HTML. Poslední revize 2003. [cit. 12. května 2009]. Elektronická adresa http://www.fi.muni.cz/ xsiska1/.
82
6
LITERATURA
Brych, P. Operační paměť. Dokument ve formátu HTML. Poslední revize 2005. [cit. 14. května 2009]. Elektronická adresa http://hardware.brych.cz/ram.php. Kunderová, L Operační systémy (materiály k přednáškám). Dokumenty ve formátu PPT. Poslední revize 2008. [cit. 12. května 2009]. Elektronická adresa https://akela.mendelu.cz/~ lidak/share/systemy/. Šafařík, J Operační systémy. Dokument ve formátu HTML. Poslední revize 2005. [cit. 12. května 2009]. Elektronická adresa http://www.kiv.zcu.cz/~ safarikj/vyuka/os/index.html. Vavrečková, Š Operační systémy. Dokument ve formátu HTML, PDF. Poslední revize 2009. [cit. 17. května 2009]. Elektronická adresa http://axpsu.fpf.slu.cz/~ vav10ui/opsys.html. Oberhuber, T Úvod do mainframe. Dokument ve formátu HTML. Poslední revize 1999. [cit. 17. května 2009]. Elektronická adresa http://kmlinux.fjfi.cvut.cz/~ oberhtom/uvod.html. Pavlis, M Microsoft a virtualizace. Dokument ve formátu HTML. Poslední revize 1999. [cit. 17. května 2009]. Elektronická adresa http://209.85.129.132/.... Wikipedie Monolitické jádro. Dokument ve formátu HTML. Poslední revize 2009. [cit. 17. května 2009]. Elektronická adresa http://cs.wikipedia.org/wiki/Monoliticke jadro. Roubal, F UNIX. Dokument ve formátu HTML. Poslední revize 2009. [cit. 17. května 2009]. Elektronická adresa http://www.lochness.cz/informatika/030.php. Mayfield, J Virtualization and Xen, and Open Sorce Approach. Dokument ve formátu HTML, PDF. Poslední revize 2006. [cit. 17. května 2009]. Elektronická adresa http://regions.cmg.org/. Herrold, R Creating and installing a CentOS 5 domU instance. Dokument ve formátu HTML, PDF. Poslední revize 2006. [cit. 24. května 2009]. Elektronická adresa http://wiki.centos.org/HowTos/Xen/Installing CentOSDomU?highlight=(xen). Citrix Xen User Manual. Dokument ve formátu HTML, PDF. Poslední revize 2007. [cit. 23. května 2009]. Elektronická adresa http://orgs.man.ac.uk/documentation/xen/user/. Děcký, M. Mechanismy virtualizace běhu operačních systémů (Diplomová práce). Praha: MFF UK, 2003. Nový, L. Porovnání virtualizačních technik (Bakalářská práce). Brno: FI MU, 2008. 83
Přílohy
A SLOŽITĚJŠÍ XEN SWITCH
A
Složitější Xen switch
Obrázek 18: Příklad složitějšího zapojení Xen switche.
85
B SKRIPT PRO VYTVOŘENÍ VIRTUÁLNÍHO STROJE
B
Skript pro vytvoření virtuálního stroje
#!/bin/bash domain=’mendelu.cz’ cesta=’/export/DOMENY/’ dd=’/bin/dd’ zero=’/dev/zero’ img=’.img’ # Vytvoreni image souboru echo -n "Zadej nazev vytvarene domeny: [text]" read nazev echo -n "Zadej velikost image pro domenu $nazev: [cilso v MB]" read img_velikost echo -n "Spustit? [a/N]" read begin if [ "$begin" == "a" ] ; then mkdir $cesta/$nazev echo "Adresar vytvoren ‘date‘" $dd if=$zero of=/$cesta/$nazev/$nazev$img oflag=direct bs=1M count=$img_velikost echo "Image vytvoren ‘date‘" # Vytvoreni konfiguracniho souboru pro novou domenu echo -n "Zadej velikost pameti pro domenu $nazev [cislo v MB]" read mem echo -n "Zadej pocet procesoru pro domenu $nazev [cislo 1-4]" read cpu more /etc/hosts echo -n "Zadej nepouzitou IP adresu pro domenu $nazev [IP v teckoe notaci]" read ip_in echo -n "Zadej IP adresu pridelenou spravcem site, venkovni IP stroje [IP v teckove notaci]" read ip_out touch /etc/xen/dom/$nazev echo ’kernel = "/boot/vmlinuz-centos5.3-x86_64-xen-install" ’> /etc/xen/dom/$nazev echo ’ramdisk = "/boot/initrd-centos5.3-x86_64-xen-install" ’>> /etc/xen/dom/$nazev echo ’extra = "text ks=http://localhost/minimal-ks-’$nazev’.cfg" ’>> /etc/xen/dom/$nazev echo ’name = "’$nazev’" ’>> /etc/xen/dom/$nazev echo ’memory = "’$mem’" ’>> /etc/xen/dom/$nazev echo "vcpus=$cpu" >> /etc/xen/dom/$nazev echo "disk = [ ’tap:aio:/export/DOMENY/$nazev/$nazev.img,xvda,w’, ] ">> /etc/xen/dom/$nazev echo "vif=[ ’$ip_in’ ] ">> /etc/xen/dom/$nazev echo "vif=[ ’gateway=192.168.122.1’ ] ">> /etc/xen/dom/$nazev echo "vif=[ ’bridge=virbr0’ ] ">> /etc/xen/dom/$nazev echo ’hostname="’$nazev.$domain’" ’>> /etc/xen/dom/$nazev echo "on_reboot = ’destroy’ ">> /etc/xen/dom/$nazev echo "on_crash = ’destroy’ ">> /etc/xen/dom/$nazev echo ’#bootloader="/usr/bin/pygrub" ’>> /etc/xen/dom/$nazev echo -n "Konfiguracni soubor $cesta/$nazev byl vytvoren ‘date‘" # Vytvoreni konfiguracniho souboru minimal-ks.cfg pro instaalci systemu touch /etc/xen/minimal-ks-$nazev.cfg echo install > /etc/xen/minimal-ks-$nazev.cfg echo ftp --ftp ftp://ftp.mendelu.cz/public/linux/CentOS/5.3/os/x86_64/ >> minimal-ks-$nazev.cfg echo lang en_US.UTF-8 >> /etc/xen/minimal-ks-$nazev.cfg echo network --device eth0 --bootproto static --ip $ip_in --netmask 255.255.255.0 --gateway 192.168.122.1 --nameserver 195.178.72.150 >> /etc/xen/minimal-ks-$nazev.cfg echo rootpw dakine >> /etc/xen/minimal-ks-$nazev.cfg echo firewall --enabled --port=22 >> /etc/xen/minimal-ks-$nazev.cfg echo authconfig --enableshadow --enablemd5 >> /etc/xen/minimal-ks-$nazev.cfg echo selinux --enforcing --port=22:tcp >> /etc/xen/minimal-ks-$nazev.cfg echo timezone --utc Europe/Amsterdam >> /etc/xen/minimal-ks-$nazev.cfg echo bootloader --location=mbr --driveorder=xvda --append="console=xvc0" >> minimal-ks-$nazev.cfg echo reboot >> /etc/xen/minimal-ks-$nazev.cfg echo clearpart --all initlabel --drives=xvda >> /etc/xen/minimal-ks-$nazev.cfg
86
B SKRIPT PRO VYTVOŘENÍ VIRTUÁLNÍHO STROJE echo part /boot --fstype ext3 --size=100 --asprimary --ondisk=xvda >> minimal-ks-$nazev.cfg echo part / --fstype ext3 --size=10240 --asprimary --ondisk=xvda >> /xen/minimal-ks-$nazev.cfg echo part swap --size=660 --asprimary --ondisk=xvda >> /etc/xen/minimal-ks-$nazev.cfg echo %packages >> /etc/xen/minimal-ks-$nazev.cfg echo @core >> /etc/xen/minimal-ks-$nazev.cfg echo -n "Konfiguracni soubor insatace vytvoren ‘date‘" cp /etc/xen/minimal-ks-$nazev.cfg /var/www/html # Vytvoreni virualniho sitoveho rozhrani ifconfig | grep eth0: echo -n "Zadej poradove cislo virtualniho rozhrani [cislo]" read vir_roz touch /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo DEVICE=eth0:$vir_roz > /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo ONBOOT=yes >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo TYPE=Ethernet >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo NETMASK=255.255.255.224 >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo IPADDR=$ip_out >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz echo GATEWAY=195.113.194.129 >> /etc/sysconfig/network-scripts/ifcfg-eth0:$vir_roz /etc/ini.d/network resatrt echo -n "Vytvoreno virtualni royhrani eth0:$vir_roz" # Nastaveni centralniho firewalu pro vytvarenou domenu echo -n "Vytvarim chain: iptables -t nat -N PRE_$nazev" iptables -t nat -N PRE_$nazev echo -n "Vytvarim chain: iptables -t nat -N POS_$nazev" iptables -t nat -N POS_$nazev echo -n "Pripojuji chain do PREROUTNIG: iptables -t nat iptables -t nat -A PREROUTING -d $ip_out -j PRE_$nazev echo -n "Pripojuji chain do PREROUTNIG: iptables -t nat iptables -t nat -A POSTROUTING -s $ip_in -j POS_$nazev echo -n "Vytvarim pravidlo pro ssh pristup port 22" echo -n "Vytvarim pravidlo pro http pristup port 80" echo -n "Vytvarim pravidlo pro https pristup, port 443" iptables -t nat -A PRE_$nazev -p tcp -i eth0 -d $ip_out iptables -t nat -A PRE_$nazev -p tcp -i eth0 -d $ip_out iptables -t nat -A PRE_$nazev -p tcp -i eth0 -d $ip_out /etc/ini.d/iptables save /etc/ini.d/iptables restart # Spusteni instalace echo -n "Nasleduje spusteni instalace" xm create -c /etc/xen/dom/$nazev else echo "Neco je sptane!" fi
-A PREROUTING -d $ip_out -j PRE_$nazev" -A POSTROUTING -s $ip_in -j POS_$nazev"
--dport 22 -j DNAT --to $ip_in:22 --dport 80 -j DNAT --to $ip_in:80 --dport 443 -j DNAT --to $ip_in:443
87
C
C
INSTALACE POTŘEBNÝCH BALÍČKŮ A XENU
Instalace potřebných balíčků a Xenu
#!/bin/bash wger http://dag.wieers.com/rpm/packages/python-twisted/python-twisted-1.3.0-1.2.el4.rf.i386.rpm rpm -ivh python-twisted-1.3.0-1.2.el4.rf.i386.rpm yum -y install bridge curl-devel openssl-devel python-devel tetex tetex-latex tetex-fonts tetex-font tetex-afm pspdf xorg-x11-devel xorg-x11-fonts-100dpi xorg-x11-server-Xvfb xorgx11-filesystem xorg-x11-server-utils xorg-x11-twm xorg-x11-utils xorg-x11-xauth xorg-x11-xfs xorg-x11-apps xorg-x11-xinit xorg-x11-xkb-utils xorg-x11-font-utils xorg-x11-fonts-base virt-manager yum -y install xen yum -y update yum clean all
88