21.7 XEN
In diesem Abschnitt möchte ich Ihnen eine Virtualisierungssoftware vorstellen, die sich in ihrer kurzen Geschichte einen durchaus beachtlichen Ruf erarbeitet hat: XEN.
Abbildung 21.6 Die offizielle Homepage von XEN
XEN wird englisch ausgesprochen: »Zen« mit weichem »Z« und ging aus einem größeren Projekt, dem Xeno-Server, hervor. Inzwischen ist XEN eigenständig und wird von einer Arbeitsgruppe um Ian Pratt an der Universität Cambridge entwickelt.
Xen hatte in dieser kurzen Zeit schon einen derartigen Erfolg und Einfluß, dass die Prozessorhersteller die neueste Generation von Prozessoren mit bestimmten Techniken ausrüsten, um die Virtualisierung durch XEN zu unterstützen.
Die Technik wurde erstmals 2003 in einem Aufsatz mit dem Titel »Xen and the Art of Virtualization« beschrieben:
» Xen is an open-source hypervisor that enables increased server utilization and server consolidation by enabling multiple operating system images to simultaneously run on a single physical server.«
Sie erreichen die offizielle Homepage des XEN-Projektes unter der Adresse http://www.cl.cam.ac.uk/Research/SRG/netos/xen/ (Abbildung 21.6).
21.7.1 Was ist XEN?
XEN ist wie ich bereits beschrieben habe eine sehr effektive Methode zur Ausführung mehrerer Betriebssysteme auf einem Rechner. Es erfordert bei Prozessoren ohne Vanderpool- oder Pacifica-Technologie allerdings angepaßte Betriebssysteme. Daher ist man ohne diese Prozessoren auf Linux und einige BSD-Varianten eingeschränkt. Andererseits ist die Leistung der parallel laufenden Systeme geradezu phänomenal hoch, die Verluste liegen stets im einstelligen, meist sogar im niedrigen einstelligen Prozentbereich.
Die Entwicklung von XEN macht zurzeit sehr schnell große Fortschritte. Während die vollständige Integration in anderen Distributionen, z. B. in Fedora, schon sehr weit fortgeschritten ist, steht diese in Ubuntu erst am Anfang. Ehrlicherweise muss man sagen, dass es zum Zeitpunkt der Drucklegung dieses Buches mit Ubuntu weitaus schwieriger ist, ein funktionsfähiges XEN-System zu erreichen, als es dies mit anderen Distributionen möglich ist.
Der folgende Abschnitt über XEN soll lediglich einen einsteigenden Charakter besitzen und kann eine tiefere Beschäftigung mit dieser faszinierenden Technik nicht ersetzen. Fassen Sie die folgenden Schritte bistte deshalb nur als Hinweise auf, die Ihnen einen roten Faden geben sollen. Bitte beachten Sie, dass die folgende Anleitung auf der aktuellen Version 3 von XEN beruht (Stand Dezember 2006). XEN 3 ist inkompatibel zu Gästen aus der XEN-Version 2. Grundsätzlich sollten sich nur erfahrene Anwender an die Konfiguration eines XEN-Systems wagen, daher bitte ich um Verständnis, wenn die nachfolgenden Schritte nicht so detailliert sind wie sich ein Einsteiger dies wünschen würde.
21.7.2 Systemanforderungen
Wie bei allen Anwendungen gibt es einige Systemanforderungen zu beachten:
- Das System muss GRUB verwenden. Dies ist bei Ubuntu der Standard-Bootloader und sofern Sie daran nichts geändert haben, ist die erste Voraussetzung leicht zu erfüllen.
- Sie brauchen natürlich ausreichend Platz auf Ihrer Festplatte für die zu installierenden Gastsysteme. Während ein minimales System mit 600 BM auskommt, braucht eine vollständige graphische Linux-Installation leicht bis zu 3 GB Platz.
- Sie brauchen als Faustregel ungefähr jeweils 256 MB Arbeitsspeicher für jedes Gastsystem.
21.7.3 XEN installieren
Der erste Schritt besteht darin, dass Sie sich die aktuelle XEN-Version vom Server des Projektes herunterladen. Das Verzeichnis hierfür befindet sich unter http://www.cl.cam.ac.uk/research/srg/netos/xen/downloads/. Dort finden Sie z. B. Pakete mit der Bezeichnung xen-3.0.2-install-x86_32.tgz.
Laden Sie sich dort einfach das aktuellste Paket passend für Ihren PC herunter und entpacken Sie dieses dann, z. B. durch rechten Mausklick auf das Archiv und dann den Menüpunkt Hier entpacken auswählen.
Öffnen Sie nun als nächstes ein Terminal und installieren die bridge-utils:
user$ sudo apt-get install bridge-utils
Nun wechseln Sie in das Verzeichnis, welches nach dem Entpacken des XEN-Archivs entstanden ist:
user$ cd /home/marcus/xen-3.0.2-install
Rufen Sie dort mit sudo ./install.sh die Installationsroutine auf. Sie erhalten einen Ausgabe wie folgt:
Installing Xen from './install' to '/'... All done. Checking to see whether prerequisite tools are installed... Xen CHECK-INSTALL Fr 1 Dez 00:22:30 CET 2006 Checking check_brctl: OK Checking check_hotplug: OK Checking check_iproute: OK Checking check_python: OK Checking check_zlib_lib: OK All done.
Als nächstes müssen Sie den XEN-Kernel in }gpkursiv{GRUB} eintragen.
21.7.4 Anpassung der Bootkonfiguration zum Start von XEN
Der eigentlich zu bootende Kernel ist der XEN-Kernel selbst. Der für die privilegierte Domäne zu verwendende Speicher ist als Option in kB anzugeben. Der Linux-Kernel der privilegierten Domäne wird wie sonst eine initrd mit dem Grub-Befehl module geladen. Eine initrd dieses Kernel erfordert einen weiteren module-Befehl.
Dies ist ein Beispiel für einen Eintrag in /boot/grub/menu.lst, in der der XEN-Kernel als Standard ausgewählt ist:
title Xen(3.0)/Linux(2.6.15) kernel /boot/xen.gz dom0_mem=393216 module /boot/vmlinuz-2.6-xen0 root=/dev/evms/root module /boot/evms-2.5.2-initrd.gz savedefault
Anschließend können Sie bereits xend starten:
user$ /etc/init.d/xend start
Nun brauchen Sie lediglich Ihren PC neuzustarten und den XEN-Kernel auswählen, sofern Sie ihn nicht als Standard ausgewählt haben.
Wenn das System korrekt gestartet ist, dann haben Sie das Gröbste überstanden. Überprüfen Sie zunächst mit Hilfe von uname -r, ob Sie gerade unter dem XEN-Kernel arbeiten. Die Ausgabe dieses Befehls sollte den momentan verwendeten Kernel anzeigen, z. B. 2.6.15.xen.
Mit
user$ xm list
erhalten Sie eine Übersicht über alle laufenden Betriebssysteme. Hier sollte zu Beginn nur ein Eintrag stehen: Domain-0. Dies ist das Betriebssystem, unter welchem SIe gerade arbeiten, der Host.
Bitte beachten Sie, dass in den Standardeinstellungen das Netzwerk für die installierten Gastsysteme gebrückt ist. Dies bedeutet, dass diese Systeme eine IP-Adresse aus dem gleichen Netzwerk, in welchem sich der Host befindet, benötigen. Wenn Sie einen DHCP-Server haben, müssen Sie dementsprechend sicherstellen, dass dieser den Gastsystemen solche Adressen zuweist. In der Datei /etc/xen/xend-config.sxp können SIe einen anderen Netzwerktyp festlegen.
Deaktivierung von TLS |
TLS verwendet eine Art der Speicheradressierung, die in XEN umständliche Emulation erfordert. Das System wird daher wesentlich schneller, wenn man TLS deaktiviert. Dazu muß der Ordner /lib/tls umbenannt werden, z. B. nach /lib/tls-disabled. |
Problemlösungen beim Start von dom0 |
21.7.5 XEN-Dämonen automatisch starten
Zwei Dienste müssen dazu gestartet werden:
- xend
- xendomains
Die Funktion von xend hatten wir bereits kennengelernt. xenddomains wird verwendet, um VMs automatisch zu starten und zu stoppen, wenn das Xen-Wirts-System (Domain 0) gestartet bzw. herunter gefahren wird. Damit die beiden Dienste nach jedem Neustart automatisch gestartet sind, müssen symbolische Links von den Init-Skripten in die entsprechenden rc-Verzeichnisse angelegt werden.
Unter Ubuntu kann dies geschehen mit dem Tool update-rc.d:
user$ update-rc.d xend defaults 20 21 user$ update-rc.d xendomains defaults 21 20
Wenn das Verzeichnis /var/lock/subsys/ nicht gefunden werden kann, dann müssen Sie es eventuell manuell erstellen:
user$ mkdir /var/lock/subsys/
21.7.6 Installation von Gastsystemen
Gastsysteme können auf physische Partitionen oder in Imagedateien installiert werden. In beiden Fällen hat man die Wahl zwischen der Verwendung fertiger Systemimages und der manuellen Installation eines Gastsystems. Bei der Installation auf physischen Partitionen empfiehlt sich die Verwendung von evms. Das schafft nicht nur mehr Übersicht, sondern ermöglicht auch Partitionssnapshots der Gastsysteme, so dass eine besonders einfache Wiederherstellung möglich ist.
21.7.7 Gast-Linux installieren auf einer virtuellen Maschine
Es gibt grundsätzlich zwei Möglichkeiten, ein Gastsystem zu installieren:
- In ein eigenes reales Dateisystem
- In eine Image-Datei in das Dateisystem des Xen-Wirtsystems
In ein eigenes reales Dateisystem installieren
Ist auf der Festplatte noch Platz für weitere Partitionen, kann ein Linux für eine virtuelle Maschine ganz normal von bootfähiger CD in diese freien Bereiche installiert werden. Der Bootmanager darf allerdings NICHT in den MBR geschrieben werden, da ja XEN das virtuelle Linux startet, nicht GRUB. Für weitere VMs kann das so von CD installierte System kopiert werden.
Um ein /-Dateisystem-Image mit 1 GB und ein Swap-Image mit 256 MB zu erzeugen, ist folgendes einzugeben:
mkdir /var/images dd if=/dev/zero of=/var/images/vm1disk bs=1024k count=1024 dd if=/dev/zero of=/var/images/vm1swap bs=1024k count=256 mkfs.ext3 /var/images/vm1disk && mkswap /var/images/vm1swap
Mit count=''Zahl'' wird die Größe des Images im MB definiert. Das erstellte Image binden Sie in das UNIX-Dateisystem mit:
mkdir /mnt/disk mount -o loop /var/images/vm1disk /mnt/disk
Nun kann ein Betriebssystem in die Image-Datei kopiert werden. Ich möchte im Folgenden Debian als virtuelle Maschine einrichten. Hierzu nutze ich debootstrap.
Das Programm debootstrap muss natürlich auf dem XEN-System installiert werden:
user$ sudo apt-get install debootstrap
Nach der Einbindung eines Images in das Dateisystem wird z. B. ein Debian-Linux installiert mit:
user$ debootstrap --arch i386 sarge /mnt/disk http://debian.tu-bs.de/debian/
Hierbei ist die Quelle mit http:// nach eigenen Wünschen anzupassen.
Ist das Image nun erfolgreich erzeugt, kann dieses als Vorlage für weitere virtuelle Maschinen dienen. Für eine neue VM wird diese Datei einfach kopiert und angepasst. Dazu wechseln bitte zunächst aus Sicherheitsgründen in eine chroot-Umgebung
user$ chroot /mnt/disk /bin/bash
Anschließend den neuen virtuellen PC über die folgenden Dateien anpassen:
/etc/hostname => Hostnamen eintragen /etc/network/interfaces => Netzwerk konfigurieren, z.B. auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.11 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 /etc/apt/sources.list => Quellen anpassen /etc/fstab => Dies z.B. anpassen wie folgt: /dev/sda1 / ext3 errors=remount-ro 0 1 /dev/sda2 none swap sw 0 0 proc /proc proc defaults 0 0
Wie bei dem XEN-Wirtssystem ist auch auf dem Gastsystem abschließend TLS zu deaktivieren
user$ mv /lib/tls /lib/tls.disabled
Nun aus der chroot herausgehen und das Images aus dem Dateisystem entfernen
user$ exit user$ umount /mnt/disk
Nach starten der VM brauchen Sie nur noch die Debian-Grundkonfiguration durchzuführen:
user$ base-config
21.7.8 VM starten
Die Beispiel-Konfigurations-Datei /etc/xen/xmexample1 ist zu kopieren und anschließend an die eigene Umgebung anzupassen.
Beispiel der Einträge:
kernel = "/boot/vmlinuz-2.6.12-xenU" ## RAM-Speicher Zuweisung (in Megabyte) für die neue Domain memory = 128 ## Name des virtuellen Servers name = "xenvm1" ### Liste von zugewiesenen Partitionen oder Imagedateien ## Eintrag für oben genannte debootstrap-Beispiel mit Image. disk = [ 'file:/var/images/vm1disk,sda1,w', 'file:/var/images /vm1swap,sda2,w' ] ## Beispiel für reale Partitionen #disk = [ 'phy:hda7,sda1,w', 'phy,sda2,w' ] root = "/dev/sda1 ro"
Um eine VM starten zu können, muss, falls dem nicht schon so ist, der Xen-Dämon xend gestartet werden
user$ xend start
Wenn die Konfigurationsdatei z. B. xenvm1 genannt wurde, kann die VM gestartet werden mit
user$ xm create -c xenvm1 vmid=1
Das -c bewirkt, dass man nach dem Start der VM gleich auf der Konsole von dieser landet. Die Boot-Meldungen sollten beim create über den Bildschirm laufen, abschließend sollte der Login-Prompt erscheinen.
Um virtuelle Maschinen automatisch nach einem Reboot des Xen-Wirtssystem zu starten, muss die Konfigurations-Datei in das korrekte Verzeichnis /etc/xen/auto verlinkt werden. Für eine Beispiel-Konfigurations-Datei mit Namen xenvm1 ist folgendes einzugeben:
user$ ln -s /etc/xen/xenvm1 /etc/xen/auto/
21.7.9 Administration der virtuellen Maschinen
Das Haupt-Programm zur Verwaltung von Xens Gast-VMs ist xm. Sie haben es im vorigen Abschnitt schon einmal benutzt, um die VMs zu starten. xm kann aber wesentlich mehr. Zum Beispiel zeigt der Aufruf des Befehls xm list eine Liste aller laufenden VMs an (inklusive des Hosts):
# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 64 1 r----- 112.0 vm1 3 128 1 ------ 27.4
Die folgende Tabelle gibt die Bedeutung der einzelnen Punkt wieder. Eine erheblich detailliertere Ausgabe wird durch xm list -l erreicht.
egriff | Bedeutung |
Name | Name der VM |
ID | Identifikationsnummer der VM |
Mem(MiB) | Arbeitsspeicherzuweisung in Megabyte |
VCPUs | Anzahl der zugewiesenen Prozessoren |
Status (State) r | running – laufend |
Status (State) b | blockiert |
Status (State) p | pausierend |
Status (State) s | shutdown – heruntergefahren |
Status (State) c | crashed – abgestürzt |
Time(s) | Verbrauch von CPU-Rechenzeit in Sekunden |
Dieses dient dem Zugriff auf die Konsole. Damit erscheint genau das vor einem, was man sehen würde, als wenn man vor einem realen PC sitzen würde. Hierbei benutzen Sie die Identifikationsnummern der VMS, z. B. xm console 3.
Um sich wieder von der VM-Konsole abzumelden, muss bei deutscher Tastatur (CTRL) + (5) eingegeben werden.
Einige Befehle
Mit dem Kommando
user$ xm shutdown <Domänen-Id>
wird das Betriebssystem der VM angewiesen, herunterzufahren. Über das Kommando
user$ xm mem-set <Domänen-Id> <Hauptspeicher>
kann die Speicherzuweisung für eine VM angepasst werden. Soll die Speicherzuweisung auf Dauer verändert werden, ist in der VM-Konfigurations-Datei der Wert memory anzupassen