Original: Xen
Xen ermöglicht es, mehrere virtuelle Computer auf einem einzigen realen Rechner parallel laufen zu lassen, siehe auch KategorieHardwareVirtualisierung.
Xen steht unter GPL.
Diese Dokumentation bezieht sich auf Xen der Version 3.0.
Inhalt dieser Seite:
Inhaltsverzeichnis
Was Xen ist
Xen unterscheidet sich von anderen Virtualisierungs-Lösungen vor allem dadurch, dass es nicht die gesamte Hardware eines PCs penibel emuliert. Stattdessen bietet es dem Gast-Betriebssystemen definierte Schnittstellen für die Nutzung der Hardware an, z.B. für Festplatte, Prozessor und Netzwerkkarte.
Die Gast-Systeme müssen deshalb für Xen angepasst werden (Paravirtualisierung), damit diese die von Xen zur Verfügung gestellten Schnittstellen nutzen können.
linux-2.6.x-xen0 linux-2.6.x-xenU ################## ################## ######Domain0##### ######DomainU's### ################## ################## ##Administration## ## von xend ## ################## \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ Netzwerk Massenspeicher ######################################################## ##################XEN Hypervisior####################### ######################################################## - Hardware -
Der Vorteil dieser Methode:
Die Gast-Betriebssysteme laufen schneller auf Xen als z.B. auf VMware, siehe auch Xen Performance, denn die Hardware muss nicht vollständig emuliert werden.
Statt dessen wird relativ direkt über die definierten Xen-Schnittstellen kommuniziert.
Dabei bleibt alles unter der Kontrolle des Xen-Wirtsystems.
Der Nachteil:
Ein Gast-Betriebssystem muss verändert werden, damit es auf Xen läuft. Damit scheiden zurzeit Betriebssysteme wie Windows aus, die nicht als Quelltext vorliegen und daher nicht angepasst werden können.
Abhilfe schaffen die CPU-Erweiterungen von Intel (VT) und AMD (Pacifica), mit deren Hilfe Betriebssysteme als Gast ohne spezielle Anpassungen auf Xen laufen können (siehe Heise-News). Bisher ist diese CPU-Erweiterung nur bei folgenden Intel-Prozessoren enthalten: In dem P4 672 mit 3,8 GHz, dem P4 662 mit 3,6 GHz und den Dual-Core-Prozessoren der Xeon-MP-Baureihe.
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.
Domain0 / Wirtssystem
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 Bootmanagers Grub verwendet und die Programm-Pakete iproute2, bridge-utils, hotplug und twisted installiert werden.
Debian: Installation als Binary
Voraussetzungen:
apt-get install iproute python python-twisted bridge-utils curl
Um 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.
Auspacken von Xen:
tar xvzf xen-<Version>-install-x86_32.tgz
Nun in das Installations-Verzeichnis wechseln mit:
cd xen-<Version>-install
und Xen installieren:
sh ./install.sh
Die nun ausgegebenen Meldungen genau prüfen, da die Installations-Routine meldet, wenn z.B. bestimmte Voraussetzungen nicht erfüllt sind.
Debian: Installation aus den Sourcen
$ wget "http://www.cl.cam.ac.uk/Research/SRG/netos/xen/downloads/xen-3.0-testing-src.1.tgz
Entpacken.
Domain0 Kernel Bauen
$ make linux-2.6-xen0-config CONFIGMODE=menuconfig XEN ---> [*] Privileged Guest (domain 0) [*] Block-device backend driver [*] Network-device backend driver [ ] Block-device frontend driver [ ] Network-device frontend driver [ ] Piplined transmitter (DANGEROUS) [*] Scrub memory before freeing it to Xen Processor Type (X86) ---> Device Drivers ---> Networking support ---> Networking options ---> [*] 802.1d Ethernet Bridging $ make linux-2.6-xen0-build $ make linux-2.6-xen0-install
DomainU Kernel bauen
$ make linux-2.6-xenU-config CONFIGMODE=menuconfig XEN ---> [ ] Privileged Guest (domain 0) [ ] Block-device backend driver [ ] Network-device backend driver [*] Block-device frontend driver [*] Network-device frontend driver [ ] Piplined transmitter (DANGEROUS) [*] Scrub memory before freeing it to Xen Processor Type (X86) ---> $ make linux-2.6-xenU-build $ make linux-2.6-xenU-install
Xend und Xen-Tools kompilieren
#xen-kernel $ make install-xen #xen userspace tools $ make install-tools
Bootmanager grub anpassen
Um den speziellen Xen-Kernel nutzen zu können, ist der Bootmanager grub ist über die Datei /boot/grub/menu.list anzupassen
title Xen 3.0 / XenLinux 2.6 kernel /boot/xen-3.0.gz dom0_mem=65536 module /boot/vmlinuz-2.6-xen0 root=/dev/hda1 ro console=tty0
Die Pfade /boot/xen-3.0.gz und /boot/vmlinuz-2.6-xen0 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.
Mit loopback.nloopbacks wird das Maximum der gleichzeitig gemounteten loopback devices (Bei fest einkompilierten loopback) festgesetzt.
Unter root ist die "/"-Root-Partition einzutragen, nicht das Home-Verzeichnis des Users root.
Ist bei der Installation eine eigene /boot-Partition angelegt worden, muss bei den Pfadangaben jeweils das /boot weggelassen werden:
Bei Kernel 2.6 "Thread Local Storage" deaktivieren
Zur Beschleunigung sollte bei einem 2.6er Kernel noch folgendes ausgeführt werden:
mv /lib/tls /lib/tls.disabled
Nun kann der Xen-Kernel gestartet werden durch eine entsprechende Auswahl im Bootmanager.
Wahrscheinlich werden beim Starten einige Fehlermeldungen auflaufen. 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-Daemons 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.
Debian: update-rc.d
Unter Debian kann dies geschehen mit dem Tool update-rc.d:
update-rc.d xend defaults 20 21
update-rc.d xendomains defaults 21 20
Gentoo: rc-update
rc-update add xend defaults
rc-update add xendomains defaults
Gast System installieren
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 eine eigene reale Partitiion 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.
Unter Debian kann als vereinfachte Alternative das Programm debootstrap genutzt werden, um ein Linux zu installieren, siehe weiter unten.
Unter Gentoo kann von Xen aus ganz normal in ein chroot installiert werden. Statt der Partition wird das Image gemounted.
Ein Image erstellen
Um ein '/'-root-Dateisystem-Image mit 1 GB und ein Swap-Image mit 256 MB zu erzeugt, 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 Image in das Unix-Dateisystem einbinden mit:
mkdir /mnt/disk mount -o loop /var/images/vm1disk /mnt/disk
Debian als virtuelle Maschine einrichten mit "debootstrap"
Das Programm "debootstrap" muss auf dem Xen-System installiert werden mit:
apt-get install debootstrap
Nach Einbindung eines Images in das Dateisystem (siehe oben), wird ein Debian-Linux installiert mit:
debootstrap --arch i386 sarge /mnt/disk http://debian.tu-bs.de/debian/
Die Quelle mit http://... ist 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 zunächst aus Sicherheitsgründen in eine chroot-Umgebung wechseln:
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 => Die Quellen für das Debian-Packet-Management 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
Bei Nutzung eines 2.6er Kernels für das Gastsystem abschließend tls deaktivieren mit:
mv /lib/tls /lib/tls.disabled
Nun aus der chroot herausgehen und das Images aus dem Dateisystem entfernen mit:
exit umount /mnt/disk
Nach starten der VM (siehe unten) die Debian-Grundkonfiguration durchführen durch Aufruf von:
base-config
Administration der virtuellen Maschinen
Ein Gast-System 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-Daemon xend gestartet werden mit:
xend start
Haben wir die Konfigurations-Datei xenvm1 genannt, kann die VM gestartet werden mit:
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.
VM's/DomainU's 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 mit 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.
Beispiel:
xm console 3
xm console vm1
Die 3 ist ID der VM vm1, entnommen aus dem obigen Beispiel mit xm list, es kann auch der Name angegeben werden.
Um sich wieder von der VM-Konsole abzumelden, muss eingeben werden.
xm shutdown <Domänen-Id>
Mit diesem Kommando wird das Betriebssystem der VM angewiesen, herunterzufahren
xm destroy <Domänen-Id>
Mit diesem Kommando wird das die VM zerstört/ausgeschaltet.
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 Betreibssystem 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
Andere Howtos
Deutsch
Debian Anleitung in den Linuxforen {de} und Penguin User Group {de}
Englisch
Debian Administration.org Installing Xen 3.0 upon Debian Sarge {en}
IBM A moment of Xen: Virtualize Linux to test your apps {en}
The Perfect Xen Setup For Debian And Ubuntu @Howtoforge.com {en}
http://mark.foster.cc/wiki/index.php/Xen_3.0.x_on_Debian_Sarge
FAQ/Fragen