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:

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:

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:

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.

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:

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:

Gentoo: rc-update

Gast System installieren

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

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:

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

Das Image in das Unix-Dateisystem einbinden mit:

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.

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

Bei Nutzung eines 2.6er Kernels für das Gastsystem abschließend tls 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:

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:

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.

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 STRG+ALTGR+9 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

Englisch

FAQ/Fragen

Bitte auf Unterseite folgen


YvesFischer/Xen (zuletzt geändert am 2007-12-23 22:49:47 durch localhost)