Xen#

Xen ist eine Virtualisierungslösung unter Linux. Es erlaubt, mehrere Betriebssysteme auf einem einzigen Rechner zu betreiben. Hat man einen Prozessor, der Hardware-Virtualisierung unterstützt, können so sogar proprietäre Systeme wie Windows in einer eigenen Domain laufen. Auf normalen Prozessoren benötigt man einen angepassten Kernel für das Gastsystem. Xen ist eine echte Alternative zu UserModeLinux. Es soll viel schneller als dieses sein.

Xen unter Debian ETCH#

1. ETCH installieren#

2. XEN Pakete installieren #

Auf einem normalen System reicht folgender Befehl

    aptitude install linux-image-xen-k7 xen-tools xen-utils
Diese Pakete installieren dann noch einige andere, abhängige. Dazu kann man, wenn man ein System mit Hardware-Virtualisierung (Vanderpool bzw. Pacifica) besitzt, noch xen-ioemu installieren. JensKapitza kommt dabei z.B. insgesamt auf folgende Pakete:
    aptitude install -r libc6-xen linux-image-2.6-xen-686 linux-image-2.6.17-2-xen-686 \
                    linux-modules-2.6.17-2-xen-686 xen-hypervisor-3.0-unstable-1-i386 \
                    xen-ioemu-3.0-unstable xen-linux-system-2.6.17-2-xen-686 \
                    xen-utils-3.0-unstable-1 xen-utils-common
    aptitute install -r  xen-linux-system-2.6.18-3-xen-686
ist eigentlich ausreichend, damit ist alles installiert (xen-tools nicht). Aber der Rest läuft.

Wer eine GUI will kann sich ja mal xenman angucken :

    aptitute install -r xenman (erfordert einen X-Server | es soll aber auch remote gehen)

3. Rechnerconfig anpassen#

In der Datei /etc/xen/xend-config.sxp:

# diese Zeile nicht kommentieren 
 (network-script network-bridge)
# dafür aber diese
#(network-script network-dummy)

4. REBOOT und dann im Grub Anwahl des Xen-Menüpunktes#

Jetzt wird der XEN Hypervisor geladen, dieser lädt sodann den Linux-Kernel, der dann als "Dom0" läuft. Dies ist das Linux-System, von dem aus die anderen Domains verwaltet werden. (Jedes virtuelle System nennt man eine "Domain"; die Dom0 ist die Haupt-Domain, die Gastsysteme werden auch als DomU bezeichnet.)

Rechner im Rechner (Gastsystem) erstellen#

1. aptitude install xen-tools (wenn noch nicht gemacht)#

Bei bedarf die config in /etc/xen-tools/xen-tools.conf ändern. Am besten mal alles durchsehen. Beispiele für sinnvolle Einstellungen sind:

# /etc/xen-tools/xen-tools.conf 
dir = /home/xen
debootstrap = 1
size   = 4Gb      # Disk image size.
memory = 128Mb    # Memory size
swap   = 256Mb    # Swap size
# noswap = 1      # Don't use swap at all for the new system.
fs     = ext3     # use the EXT3 filesystem for the disk image.
dist   = etch    # Default distribution to install.
image  = sparse   # Specify sparse vs. full disk images.

2. Image erzeugen#

Hier müssen jetzt bei xen-create-image nur noch die Parameter angegeben werden, die anders sind als in der xen-tools.conf eingestellt wurden. Dies ist logischerweise immer der hostname, ggf. die IP usw. Beispiele sind:

 xen-create-image --hostname testxen1 --debootstrap
 xen-create-image --hostname test1 --size 10Gb --ip 192.168.221.130

Ubuntu-Image erzeugen

Man kann auf einem Debian-Basissystem übrigens auch sehr einfach ein Ubuntu-Gastsystem erzeugen. Dazu benötigt man lediglich die aktuelle Version den Ubuntu-debootstrap-Paketes, die man z.B. auf https://wiki.ubuntu.com/DebootstrapChroot bekommt und dann mit dpkg -i debootstrap_0.3.3.0ubuntu7_all.deb installiert. Dann kann man mit einem Befehl wie dem folgenden ein Ubuntu-System installieren:

 xen-create-image --memory 512Mb --swap 512Mb --size=10Gb  \
                  --hostname ubuntu --ip 192.168.201.139  \
                  --dist edgy --mirror http://archive.ubuntu.com/ubuntu/

3. Xen-Gastsystem starten#

 xm create -c /etc/xen/testxen1.cfg 

Das "-c" sorgt dafür, daß man sofort auf der Konsole des neuen Systems ist. Hier kommt man mit "Strg-]" (auf einer deutschen Tastatur auch bekannt als "Strg-AltGr-9") wieder raus. Ohne "-c" startet die Doamin im Hintergrund und kann nun über das Netzwerk erreicht werden. Weitere Befehle, z.B. um eine Domain wieder herunterzufahren etc. ergibt xm help.

Autostart: Wer sein Gastsystem beim hochfahren automatisch starten will, erzeugt ein auto-Verzeichnis und folgenden Link:

cd /etc/xen
mkdir auto
cd auto
ln -s ../testxen1.cfg testxen1.cfg

Netzwerk#

Wer verstehen will, wie das standardmäßig aufgesetzte Bridge-Netzwerk funktioniert und was alle die Devices sollen, sollte http://wiki.xensource.com/xenwiki/XenNetworking lesen.

Auf dieser Seite ganz unten steht auch ein Tip, wie man zwei Bridges erzeugt. Hat man einen Xen-Basisrechner mit zwei Netzwerkkarten, so kann man nun jede Gastdomain individuell mit einer der Netzweerkkarten verbinden, um z.B. eine DMZ abzubilden. Dabei ist es natürlich möglich, daß das Xen-Basissystem in der DMZ gar nicht angesprochen werden kann.

Wer udev im Xen-Gastsystem benutzt aber keine festen Mac-Adressen zuweist, sollte meinen Tip auf Udev lesen.

Viele Gäste und wenig loop-Devices#

Wer mit mehreren Gästen herumtestet, kommt irgendwann an folgende Fehlermeldung:

  Error: Device 2049 (vbd) could not be connected. Backend device not found.

Das ist kein Beinbruch, sondern bedeutet, daß das Loop-Device (das z.B. für Image-Dateien gebraucht wird) im Normalfall nur 8 Dateien gleichzeitig benutzen kann. Dies ändert man leicht beim laden des loop-Kernelmoduls. Um das am Debianigsten zu machen, erzeugt man eine Datei /etc/modprobe.d/xen mit dem Inhalt:

  # Konfiguration des Loop-Device zur Arbeit mit Xen und vielen Gastsystemen:
  options loop max_loop=200

Nun hat man einstweilen genug Devices zur Verfügung. (Kann mir eigentlich jemand sagen, wie man feststellt, wieviele loop-Devices schon belegt sind?) Eigentlich gehörte diese Datei in die Debian-Xen-Pakete (aber was nicht ist, kann ja noch werden...). -- ThomasBayen

HVM-Gastsysteme (z.B. Windows)#

Normale Gastsysteme sind "paravirtualisiert", d.h. der Zugriff auf bestimmte Hardwareressourcen (z.B. Festplatten und Netzwerkkarten) geschieht über besondere Xen-Schnittstellen. Deshalb wird in diesen Xen-Domains ein besonderer, angepasster Kernel benutzt, der diese Schnittstellen erkennt. Möchte man nun jedoch ein System laufen lassen, das diese Anpassungen nicht enthält, muss man eine komplette Virtualisierung haben. Das bedeutet, daß die komplette Hardware virtualisiert wird, also ein Harddisk-Controller, eine Netzwerkkarte und eine Grafikkarte. Das ist natürlich etwas langsamer, erlaubt es aber insbesondere, Windows laufen zu lassen. Diese Möglichkeit hat man allerdings nur, wenn der Prozessor dies unterstützt. Prozessoren ab ca. 2007 können dies. Bei Intel heisst das Vanderpool, bei AMD Pacifica.

Ich habe dabei folgende zusätzliche Einstellungen in die Konfigurationsdatei der Domain eingefügt:

  kernel = 'hvmloader'
  builder = 'hvm'
  device_model = 'qemu-dm'
  vnc = 1
  vnclisten = '*'
  keymap = 'de'
  disk    = [ 'file:/home/xen/domains/'+instancename+'/disk.img,ioemu:hda,w'
             ,'file:/home/tbayen/winXP_InstallCD.iso,ioemu:hdc:cdrom,r'
            ]
  boot = 'd'
  vif  = [ 'type=ioemu' ]

Bei "disk" und bei "vif" muss zusätzlich ein "ioemu"-Parameter angegeben werden, wie man sieht. Mit der Boot-Option stellt man ein, ob von der CD ('d') oder von der Festplatte ('c') gebootet werden soll.

Wie man übrigens sieht, bekommen HVM-Gastsysteme immer eine emulierte Festplatte im Image und können nicht mit Partitions-Images betrieben werden. Wem der Umgang mit diesen Images Kopfzerbrechen bereitet, findet auf http://www.osdev.org/osfaq2/index.php/Disk%20Images%20Under%20Linux eine Einführung, wie man Partitionen in einem Harddisk-Image mounten kann.

Was nicht geht / Gemecker#

Dokumentation bzw. Community#

Was ich erst nach einigem Ärger festgestellt habe ist, daß Windows 98 definitiv nicht läuft. Das Problem liegt wohl am HIMEM.SYS-Treiber und dürfte damit auch DOS erfassen. Wenn man die Doku genau liest, ist immer nur von Windows 2000/XP die Rede.

Schöner Scheiss! Können die nicht irgendwo sagen, was nicht geht?!? Hätte ich das vorher gewusst, hätte ich mich vielleicht direkt für eine andere Technologie entschieden. :-( Diese Tatsache bestätigt meinen Eindruck von der Webseite, daß es keine echte "Community" gibt, die Xen entwickelt, sondern ein paar Firmen, die Teile Ihres Know-Hows intern behalten. Gerade, wenn man sich zum Thema "HVM" im Netz umsieht, gibt es einfach überhaupt keine Doku. Es gibt Konfigurationsbefehle (wie obiges "keymap"), die in irgendwelchen Beispielen auf der Mailingliste nebenher auftauchen, die aber niemals irgendwo offiziell dokumentiert sind. Nach wie vor fehlt also eine echte freie Virtualisierungslösung, hinter der eine Community steht und die deshalb nicht spontan sterben oder kommerziallisiert werden kann. -- ThomasBayen

ich habe Beispiele und Doku immer unter doc/PAKETNAME auch für xen steht das was und in den Beispieldateien ist auch eine menge Kommentar. Was willst du eigentich alles an Doku für eine Virtualisierung? Suse soll XEN mir Klick Oberfläche anbieten! kannst du ja mal unter HVM-XEN installieren -- JensKapitza
Sorry, ich war gestern etwas erregt, weil ich seit Monaten mein System aufsetze mit dem Wissen, daß ich auch meine alten Windows-Systeme migrieren kann und mir jetzt erst auffällt, daß ich belogen worden bin. Aber ich stehe nach wie vor zu meiner Aussage! Daß nirgedwo deutlich steht, daß Win 98 und DOS nicht gehen, ist ein "Schöner Scheiss!".
Mach mal 'find /usr/share/doc/xen-* | grep -vE "changelog|copyright"' und dann erklär mir, wo da Doku ist!?! Die einzige Readme-Datei ist von den Debian-Maintainern. Wenn du das doc-Paket installierst, hast du da nur das PDF-File mit der Doku zu 3.0. Das ist zwar nett für Anfänger, aber für HVM so gut wie nicht zu benutzen.
/usr/share/doc/xen-docs-3.0/user.pdf.gz
/usr/share/doc/xen-docs-3.0/interface.pdf.gz
/usr/share/doc/xen-hypervisor-3.0.3-1-i386/changelog.Debian.gz
/usr/share/doc/xen-tools/README
/usr/share/doc/xen-tools/SUPPORT
/usr/share/doc/xen-tools/README.Debian
/usr/share/doc/xen-tools/examples
/usr/share/doc/xen-tools/examples/update-modules.gz
/usr/share/doc/xen-tools/examples/setup-kernel-initrd
/usr/share/doc/xen-tools/BUGS
/usr/share/doc/xen-tools/TODO
/usr/share/doc/xen-utils-3.0.3-1/README.Debian.gz
/usr/share/doc/xen-utils-common/examples/xmexample.vti.gz
/usr/share/doc/xen-utils-common/examples/xmexample.hvm.gz
/usr/share/doc/xen-utils-common/examples/xmexample1.gz
/usr/share/doc/xen-utils-common/examples/xmexample2.gz

in 
/usr/share/doc/xen-utils-common/examples/xmexample.hvm.gz


#-----------------------------------------------------------------------------
#   Set keyboard layout, default is en-us keyboard.
#keymap='ja' #de ?
               
 

-- JensKapitza

Also wo in Deiner Auflistung ist jetzt irgendeine Doku zu hvm? Ich habe ein grep drüber laufen lassen. "HVM" kommt im Grunde nur in dieser einen Beispieldatei vor. Die einzigen READMEs sind Debian-Files. Da ist nichts von den Xen-Leuten selber. Und Nein - die von Dir angegebene "keymap"-Zeile ist in meinem Debian Etch Paket nicht drin. -- ThomasBayen
OK, dann müssen wir in den Version noch genauer sein 3.0.? mein XEN ist nun ein SID (wegen ATI Treiber,denn musste ich mal testen) der XEN Krenel kommt aber aus ETCH, nur die INITRD ist neu gebaut, weil libcrübt.so.1 nicht in SID ist, sondern so.3 da steht. Nur für den Fall, dass sich mal jemand wundert wieso file not found kommt.
Über die offizielle 3.0-Doku hinaus gibt es keine Doku. Dort steht immer was von "VMX"-Guests. Dort wird z.B. die Konfiguration "builder='vmx'" angegeben. In allen Beispielen ist aber immer von "hvm" die Rede. Was heisst hvm? Was ist der Unterschied? Warum wurde das geändert? Wo ist das dokumentiert? Ich habe den Eindruck, daß alle diese Fragen erst mit der offiziellen "3.1"-Doku gelüftet werden und bis dahin in einem geheimen Zirkel von kommerziellen Firmen, der Universität von Cambridge und vielleicht der Mailingliste geheimgehalten werden.
Anderes Beispiel ist der "keymap"-Parameter. Er ist in mehreren Beispieldateien, die Leute z.B. auf die Mailingliste gesendet haben, enthalten. In meinen Debian-Paketen ist er nirgwnwo erwähnt, er funktioniert auch nicht. Aber ich habe in meinen Paketen keymap-Dateien. Was soll das nun? Wenn jemand sowas einbaut, dann gehört das irgenwo erwähnt, dann möchte ich ein Readme, News, ein HOWTO, eine Wikiseite oder sowas haben. Stattdessen finde ich nichts.
Selbst im Wiki stehen immer nur Halb-Dokus. Ich habe immer das Gefühl, mir fehlen Informationen, die die Leute auf der Mailingliste oder im Wiki haben. Die haben einfach keinen kooperativen Ansatz und kein verteiltes Team von Entwicklern, sondern sind eine eingeschworene Gemeinde, in der sowieso jeder Bescheid weiss. Ein ähnliches Gefühl habe ich sonst bei Projekten, die nur einen einzigen Entwickler haben. Und deshalb glaube ich auch, daß Xen, obwohl es technologisch im Moment mit an der Spitze ist, auf Dauer nicht die Zukunft sein wird. -- ThomasBayen

serielle Schnittstelle aus einer DomU benutzen#

Schlecht bzw. gar nicht offiziell dokumentiert ist auch die Frage, wie man eine physikalisch vorhandene serielle Schnittstelle aus einer DomU (also einem Gast-System) heraus benutzen kann. Dazu hier ein Link, wo dann doch ein bisschen was dazu steht: http://wiki.xensource.com/xenwiki/InstallationNotes Die Google-Zauberwörter, die hierzu weiterhelfen, sind xen serial domu.

Leider werden in den Standard-Debian-Kernels die seriellen Schnittstellen im Xen-Kernel ausgeschaltet. Das ist eine normale, empfohlene Xen-Option, weil Xen die Hardware aus der vor-PCI-Zeit nicht anständig aufteilen kann. Insbesondere benutzen die seriellen Schnittstellen feste IRQs, die auch noch andere Aufgaben im System haben können. Das ist wohl nicht richtig zu mappen.

Ein Versuch, per PCI-Mapping den USB-Anschluss in das Gastsystem zu mappen, schlug leider auch fehl. Ich hatte zwar im Gast einen USB-Anschluss und das Einstecken von Geräten wurde bemerkt, allerdings konnte ich weder den USB-Seriell-Adapter benutzen noch einen USB-Stick. Es schien immer noch Übertragungsprobleme zu geben. :-( -- ThomasBayen

Fehlermeldung: xen_net: Memory squeeze in netback driver.#

Immer mal wieder bei der Arbeit mit Xen stiess ich auf diese Meldung, die gerne auch in einem unheimlich schnellen Ablauf über die Konsole oder das Log rattert und dann meistens den Rechner unbenutzbar macht oder einen zum Ausschalten zwingt. Sie taucht immer auf, wenn man "eine Domain zu viel" startet. Das Problem ist scheinbar Speicher, der von der Dom0 (oder anderen) nicht rechtzeitig freigegeben wird, obwohl das möglich wäre. Die schönste Zusammenfassung zum Thema ist die Xen Bugzilla Seite hierzu. Im Grunde sagt aber diese Mail von der Debian Liste kurz und knapp, was zu tun ist. -- ThomasBayen

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-38) was last changed on 21-May-2008 19:17 by PeterHormanns