Xen ermöglicht es, mehrere virtuelle Computer auf einem einzigen realen Rechner parallel laufen zu lassen, ähnlich wie das bekanntere VmWare, siehe auch KategorieHardwareVirtualisierung.

Xen steht unter GPL.

Für den der schnell mal Xen ein wenig testen möchte. Hier gibt es eine Live CD auf Grundlage von Knoppix mit Xen und QEMU, KVM .... zum Download: http://unit.aist.go.jp/itri/knoppix/index-en.html

Diese Dokumentation bezieht sich auf Xen der Version 3.0.

Inhalt dieser Seite:

Das Besondere an Xen

Xen unterscheidet sich von anderen Virtualisierungs-Lösungen vor allem dadurch, dass es normalerweise nicht die gesamte Hardware eines PCs penibel emuliert. Stattdessen bietet es dem Gast-Betriebssystem definierte Schnittstellen für die Nutzung der Hardware an, z.B. für Festplatte, Prozessor und Netzwerkkarte.
Die Gast-Betriebssysteme müssen in diesem Fall für Xen angepasst werden (Paravirtualisierung), um die von Xen zur Verfügung gestellten Schnittstellen nutzen können. Die auf dem Gast-Betriebssystem laufenden Anwendungen müssen dagegen NICHT angepasst werden, diese merken von der Paravirtualisierung nichts.

Vorteil der Paravirtualisierung
Die Gast-Betriebssysteme laufen erheblich schneller als z.B. auf VMware, siehe auch Xen Performance, da die Hardware nicht vollständig emuliert werden muss. Insbesondere die Emulation des Prozessors kostet viel Zeit.
Statt dessen wird direkt über die definierten Xen-Schnittstellen kommuniziert.
Dabei bleibt alles unter der Kontrolle des Xen-Wirtsystems.

Der Nachteil:
Ein Betriebssystem muss angepasst werden, damit es als Gast auf Xen läuft. Damit scheiden Betriebssysteme wie Windows aus, da sie nicht in Form von veränderbarem Quelltext vorliegen und nicht angepasst werden dürfen.
Eine gewisse Abhilfe schaffen die CPU-Erweiterungen von Intel (VT) und AMD (Pacifica), mit deren Hilfe z.B. Windows XP als Gast ohne spezielle Anpassungen auf Xen laufen können. Allerdings geht ohne Paravirtualisierung der Geschwindigkeitsvorteil von Xen verloren

Aufbau des Xen-Systems

Xen führt jedes Gast-Betriebssystem in einer eigenen virtuellen Maschine (VM) aus, welche in Xen-Terminologie Domains genannt werden.
Jedes Gast-Betriebssystem verwaltet wiederum seine Anwendungen selbst, inklusive der Zuteilung der Rechenzeit für die einzelnen Programme, dies jedoch natürlich nur innerhalb der Rechenzeit, die Xen der jeweiligen VM bzw. Domain zugeteilt hat.

Die unterste Ebene Domain 0 belegt Xen selbst. Diese ist mit den meisten Rechten ausgestattet. Die Domain 0 bildet die Basis, von welcher aus virtuelle Maschinen gestartet und verwaltet werden können. Von hier werden virtuelle Schnittstellen (Festplatten, RAM u.a.) für die höher liegenden VMs zur Verfügung gestellt. Innerhalb der Domain 0 läuft der xend, mit Hilfe dessen das System verwaltet wird. Der xend ist verantwortlich für die Verwaltung der VMs und ermöglicht den Zugriff auf deren Konsolen.

Installation

Als erstes muss das Xen-Wirts-System installiert werden, welches die Gast-Systeme beherbergen soll.
Voraussetzung dafür ist die Unterstützung von Xen für das jeweilige Betriebssystem, siehe dazu hier, wobei dom0 bedeutet, dass das System als Wirt einsetzbar ist.
Desweiteren muss der Bootmanager Grub verwendet und die Programmpakete iproute2, bridge-utils, hotplug und twisted installiert werden.

Ab Suse 10.1 und Fedora 5 kann Xen über das normale Installations-System installiert werden.

Unter Debian- oder Ubuntu-Linux ist dies zur Zeit noch nicht möglich.

Folgende Anleitung bindet Xen in Ubuntu, Debian oder andere Linux-Distributionen ein.

Voraussetzungen

Zunächst muss der Bootmanager Grub verwendet und die Programmpakete iproute2, bridge-utils, hotplug und twisted installiert werden. Unter Debian bzw. Ubuntu ist dazu folgendes auf der bash einzugeben:

Installationsablauf

Um es sich einfacher zu machen und nicht kompilieren zu müssen, kann das "XEN Stable binary release" von Xen herunter geladen werden. Diese Datei ist in das Verzeichnis /usr/local/src zu kopieren.
Anschließend ist in dieses Verzeichnis zu wechseln und Xen auszupacken mit:

Nun in das Installations-Verzeichnis wechseln mit:

und Xen installieren:

Die nun ausgegebenen Meldungen genau prüfen, da die Installations-Routine meldet, wenn z.B. bestimmte Voraussetzungen nicht erfüllt sind.

Einrichten des Xen-Wirtsystems

Zunächst ist das Wirtsystem vorzubereiten, auf welchem die virtuellen Rechner zum Laufen gebracht werden sollen.

Bootmanager grub anpassen

Um den speziellen Xen-Kernel nutzen zu können, ist der Bootmanager grub über die Datei /boot/grub/menu.list anzupassen.

Beispiel:

title           Xen 3.0 / XenLinux 2.6
kernel          /boot/xen-3.0.gz dom0_mem=65536
module          /boot/vmlinuz-2.6-xen root=/dev/hda1 ro console=tty0

Die Pfade /boot/xen-3.0.gz und /boot/vmlinuz-2.6-xen müssen natürlich existieren und können je nach Xen-Version anders lauten.
Mit dem Parameter dom0_mem wird dem Xen-Wirtsystem (Domain 0) Arbeitsspeicher (in KB) zugewiesen. Wird dom0_mem ein hoher Wert zugewiesen, bleibt den VMs weniger Speicher übrig.
Unter root ist die "/"-Root-Partition einzutragen, nicht das Home-Verzeichnis des Users root. Die "/"-Partition ist z.B. zu ermitteln mit:

mount | grep " / "

Ist bei der Installation eine eigene /boot-Partition angelegt worden, muss bei den Pfadangaben jeweils das /boot weggelassen werden. Dem Beispiel oben entsprechend hieße das:

title           Xen 3.0 / XenLinux 2.6
kernel          /xen-3.0.gz dom0_mem=65536
module          /vmlinuz-2.6-xen root=/dev/hda1 ro console=tty0

"Thread Local Storage" deaktivieren

/!\ Zur Beschleunigung sollte unbedingt tls deaktiviert werden, das System wird ansonsten extrem abgebremst

Folgendes ist dazu auszuführen:

Mit dem Xen-Kernel neu starten

Ab jetzt sollte der Xen-Kernel durch eine entsprechende Auswahl im Bootmanager gestartet werden können.

Wahrscheinlich werden beim Starten einige Fehlermeldungen auftauchen. Diese müssen kein Grund zur Besorgnis sein, sondern können an den Unterschieden der Konfiguration des Xen-Kernels im Gegensatz zum Standard-Kernel der jeweiligen Linux-Distribution liegen.

Xen-Dämonen automatisch starten

Zwei Dienste müssen dazu gestartet werden: xend und xendomains.

Die Funktion von xend ist weiter oben schon erläutert. 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 Debian kann dies geschehen mit dem Tool update-rc.d:

Ich konnte einen kleinen Bug von Xen 3.0 feststellen, für das Starten von xendomains:
Das Verzeichnis /var/lock/subsys/ konnte nicht gefunden werden.

Dieses ist dann anzulegen mit:

Gast-Linux installieren auf einer virtuellen Maschine

Es gibt grundsätzlich zwei Möglichkeiten, ein Gastsystem zu installieren:

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.

In ein Image installieren

Um ein '/'-root-Dateisystem-Image mit 1 GB und ein Swap-Image mit 256 MB zu erzeugen, ist folgendes einzugeben:

Mit count=<Zahl> wird die Größe des Images im MB definiert.

Das Image in das Unix-Dateisystem einbinden mit:

Nun kann ein Betriebssystem in die Image-Datei kopiert werden.

Debian als virtuelle Maschine einrichten mit "debootstrap"

Das Programm "debootstrap" muss auf dem Xen-System installiert werden mit:

Nach Einbindung eines Images in das Dateisystem (siehe oben), wird ein Debian-Linux installiert mit:

Die Quelle mit http://... ist nach eigenen Wünschen anzupassen.

Mussen die nötigen Dateien über einen Proxy geladen werden, ist die Variable http_proxy zu setzen, siehe auch ProxyServer.

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 zunächst aus Sicherheitsgründen in eine chroot-Umgebung wechseln:

Anschließend den neuen virtuellen PC über die folgenden Dateien anpassen:

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

/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 mit:

Nun aus der chroot herausgehen und das Images aus dem Dateisystem entfernen mit:

Nach starten der VM (siehe unten) die Debian-Grundkonfiguration durchführen durch Aufruf von:

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

Haben wir die Konfigurations-Datei xenvm1 genannt, kann die VM gestartet werden mit:

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. Den Promt kann man mit Strg+5 wieder verlassen. Es empfielt sich openssh-server zu installieren und die weitere Konfiguration per SSH zu erledigen.

VM automatisch starten

Um virtuelle Maschinen automatisch nach einem Reboot des Xen-Wirtssystem zu starten, muss die Konfigurations-Datei in das Verzeichnis /etc/xen/auto verlinkt werden. Für eine Beispiel-Konfigurations-Datei mit Namen xenvm1 ist folgendes einzugeben:

ln -s /etc/xen/xenvm1 /etc/xen/auto/

Administration der virtuellen Maschinen

xm

xm ist das Haupt-Programm zur Verwaltung von Xens Gast-VMs. Wir haben es oben schon einmal benutzt, um die VMs zu starten. xm kann aber wesentlich mehr.

xm list

Dieses gibt zum Beispiel folgendes aus:

# xm list
Name                              ID Mem(MiB) VCPUs State  Time(s)
Domain-0                           0       64     1 r-----   112.0
vm1                                3      128     1 ------    27.4

Erläuterungen zu der Ausgabe:

Name

ist der Name der VM

ID

ist die Nummer der VM/Domain, wichtig, um z.B. nachträglich an die Konsole der VM zu kommen

Mem(MiB)

Arbeitsspeicherzuweisung in Megabyte

VCPUs

Anzahl der zugewiesenen Prozessoren

State

Status

r

running - laufend

b

blockiert

p

pausierend

s

shutdown - heruntergefahren

c

crashed - abgestürzt

Time(s)

Verbrauch von CPU-Rechenzeit in Sekunden

Eine erheblich detailliertere Ausgabe wird durch ein zusätzliches "-l" bewirkt:

xm list -l

xm console

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. Mit Strg+5 kann man diese wieder verlassen.

Beispiel:

xm console 3

Die 3 ist ID der VM, entnommen aus dem obigen Beispiel mit xm list

ACHTUNG: Um sich wieder von der VM-Konsole abzumelden, muss bei deutscher Tastatur <CTRL> '5' eingegeben werden.

xm shutdown <Domänen-Id>

Mit diesem Kommando wird das Betriebssystem der VM angewiesen, herunterzufahren

xm mem-set

Über dieses Kommando kann die Speicherzuweisung für eine VM angepasst werden.

Syntax:

xm mem-set <Domänen-Id> <Hauptspeicher>

Beispiel:

xm mem-set 3 256

Das Betriebssystem in der VM konnte bei mir den neu zugewiesenen Speicher erst nach Neustart der VM nutzen.

Soll die Speicherzuweisung auf Dauer verändert werden, ist in der VM-Konfigurations-Datei der Wert memory anzupassen

Tipps & Tricks

Grafische Oberfläche: http://xenman.sourceforge.net

Mini-Howto

Hier wackelige dyndns-Adressen zu verlinken, finde ich wenig sinnvoll. Die Doku ist ja ganz gut, aber wenn sich hier jeder seinen eigenen PC eintragen würde, wird die Linksammlung sehr unübersichtlich. Hier der Link:

Sie hierzu Xen/Diskussion

Bücher

FAQ

Was wird emuliert/Virtualisiert und wie? z.B. Emuliert VmWare Ethernet als AMD Netzwerk Chip u.s.w wie macht das Xen? (Netz, Grafik, Geräte wie USB .... )

Frage: Wie funktioniert dann die Nutzung der neuen VM-CPU-Erweitungen mit Xen?

Ich empfehle die überarbeitete Anleitung von mir auf www.pug.org Seite. Da wurde vieles korrigiert.

Können Gastsysteme auf Devices direkt zugreifen?


Xen (zuletzt geändert am 2009-02-10 22:44:51 durch dslb-088-067-026-230)