Xen
Hier wird beschrieben, wie man Xen unter Arch Linux einrichtet.
Was ist Xen?
Sinngemäss nach dem dem Xen Entwickler Team:
"Xen Hypervisor, der leistungsstarke Open Source Industrie Standard für Virtualisierung, bietet ein mächtiges, gut funktionierendes und sicheres Feature Set für die Virtualisierung von x86, x86_64, IA64, PowerPC und anderen CPU Architekturen. Es unterstützt eine grosse Auswahl von Gast Betriebssystemen, unter anderem Windows®, Linux®, Solaris® und verschiedene Versionen von BSD Betriebssystemen."
Der Xen Hypervisor ist eine schlanker Softwarelayer, der eine Computer Architektur emuliert/nachbildet. Er wird vom Boot Loader gestartet und erlaubt es verschiedene Betriebssysteme gleichzeitig auf ihm laufen zu lassen. Ist der Xen Hypervisor einmal geladen, startet er "Dom0" (steht für "Domain 0"), die privilegierte/bevorzugte Domain, die in unserem Fall ein modifizierter Linux Kernel ist. Andere mögliche Dom0 Betriebssysteme sind NetBSD und OpenSolaris. Selbstverständlich muss die Hardware auch vom Kernel unterstützt weren, um Xen auszuführen. Ist Dom0 gestartet, können ein oder mehrere "DomU" Domains gestartet und von Dom0 aus kontrolliert werden.
Den Xen Host einrichten
Benötigte Pakete installieren
Ein Xen Paket ist im AUR verfügbar. xen-tools ist eine Sammlung einfacher Perlskripte, die es ermöglicht unproblematisch neue Gast Xen Domains zu erstellen. xen-tools ist ebenfalls im AUR verfügbar.
GRUB konfigurieren
Grub muss derart konfiguriert werden, dass der Xen Hypervisor gefolgt vom Dom0 Kernel gebootet wird. Hierzu fügt man folgendes zu /boot/grub/menu.lst
hinzu:
title Xen with Arch Linux root (hd0,0) kernel /xen-version.gz dom0_mem=524288 module /vmlinuz26-xen-dom0 root=/dev/sda2 ro console=tty0 module /kernel26-xen-dom0.img
dom0_mem
, console
und vga
können den Bedürfnissen des Nutzers angepasst werden.
Um die DomUs zu starten kann der Standard Arch Kernel verwendet werden. Damit das funktioniert muss xen-blkfront
in die MODULES
Zeile in /etc/mkinitcpio.conf
eintragen werden:
MODULES="... xen-blkfront ..."
Nach einem Reboot startet man in den Xen Kernel. Anschliessend startet man xend:
#rc.d start xend
Es wird empfohlen eine feste Menge Speicher bereitszustellen, wenn man Xen nutzt. Nutzt man IO intensive guests ist man gut damit beraten einen kompletten CPU Kern für Dom0 zu reservieren (pin). Auf der XenCommonProblems Seite im englischen Wiki, unter "Can I dedicate a cpu core (or cores) only for dom0?" findet man weitere Informationen zu diesem Thema.
GRUB2 konfigurieren
Dies funktioniert genauso wie die Konfiguration von GRUB, mit dem Unterschied, das man multiboot
anstelle von kernel
verwendet. Das sieht dann folgendermassen aus:
# (2) Arch Linux(XEN) menuentry "Arch Linux(XEN)" { set root=(hd0,X) multiboot /boot/xen.gz dom0_mem=2048M module /boot/vmlinuz26-xen-dom0 root=/dev/sdaY ro module /boot/kernel26-xen-dom0.gz }
Nach einem erfolgreichen Reboot in den Dom0 Kernel fahren wir wie folgt fort:
DomU Instanzen hinzufügen
Die Grundidee eine DomU hinzuzufügen ist: Den Dom0 Kernel (erlangen), Platz für die virtuelle Festplatte reservieren, eine Konfigurationsdatei für DomU erstellen und letztlich die DomU mit xm zu starten.
## /dev/sdb1 is an example of a block device $ mkfs.ext4 /dev/sdb1 ## format partition $ mkdir /tmp/install $ mount /dev/sdb1 /tmp/install $ mkdir -p /tmp/install/{dev,proc,sys} /tmp/install/var/lib/pacman /tmp/install/var/cache/pacman/pkg $ mount -o bind /dev /tmp/install/dev $ mount -t proc none /tmp/install/proc $ mount -o bind /sys /tmp/install/sys $ pacman -Sy -r /tmp/install --cachedir /tmp/install/var/cache/pacman/pkg -b /tmp/install/var/lib/pacman base $ cp -r /etc/pacman* /tmp/install/etc $ chroot /tmp/install /bin/bash $ vi /etc/resolv.conf $ vi /etc/fstab /dev/xvda / ext4 defaults 0 1 $ vi /etc/inittab c1:2345:respawn:/sbin/agetty -8 38400 hvc0 linux #c1:2345:respawn:/sbin/agetty -8 38400 tty1 linux #c2:2345:respawn:/sbin/agetty -8 38400 tty2 linux #c3:2345:respawn:/sbin/agetty -8 38400 tty3 linux #c4:2345:respawn:/sbin/agetty -8 38400 tty4 linux #c5:2345:respawn:/sbin/agetty -8 38400 tty5 linux #c6:2345:respawn:/sbin/agetty -8 38400 tty6 linux $ exit ## exit chroot $ umount /tmp/install/dev $ umount /tmp/install/proc $ umount /tmp/install/sys $ umount /tmp/install
Falls man nicht von einer Neuinstallation aus startet und rsync von einem existierenden system aus rsync anwenden möchte:
$ mkfs.ext4 /dev/sdb1 ## format lv partition $ mkdir /tmp/install $ mount /dev/sdb1 /tmp/install $ mkdir /tmp/install/{proc,sys} $ chmod 555 /tmp/install/proc $ rsync -avzH --delete --exclude=proc/ --exclude=sys/ old_ooga:/ /tmp/install/ $ vi /etc/xen/dom01 ## create config file # -*- mode: python; -*- kernel = "/boot/vmlinuz26" ramdisk = "/boot/kernel26.img" memory = 1024 name = "dom01" vif = [ 'mac=00:16:3e:00:01:01' ] disk = [ 'phy:/dev/sdb1,xvda,w' ] dhcp="dhcp" hostname = "ooga" root = "/dev/xvda ro" $ xm create -c dom01
Hardware Virtualisierung
Möchte man Hardware in den DomUs virtualisieren, so muss die Hosthardware entweder Intel VT-x oder AMD-V (SVM) Virtualisierung unterstützen. Ob sie das tut findet man heraus indem man
grep -E "(vmx|svm)" --color=always /proc/cpuinfo
auf dem Hostsystem absetzt. Erhält man auf dieses Kommando hin keine Ausgabe, so steht Hardware Virtualisierung nicht zur Verfügung und die Hardware ist nicht im Stande Xen HVM guests auszuführen. Es ist aber auch möglich, dass die Host CPU eine der oben genannten Funktionen unterstützt, diese aber im BIOS deaktiviert sind. Um zu schauen, ob dem so ist begibt man sich während des Bootens in das BIOS Konfigurationsmenu und schaut ob sich dort eine Option mit Bezug auf die Unterstützung von Virtualisierung finden lässt. Existiert eine solche Option, aktiviert man diese, bootet das System erneut und wiederholt das oben genannte grep
Kommando.
Arch als Xen guest (PV Modus)
Für Paravirtualisierung benötigt man einen Kernel in dem Xen guest Unterstützung (DomU) aktiviert ist. Beim Standard x86_64 Linux und kernel26-lts aus core ist die Unterstützung als modules aktiviert. Standard i686 Linux und kernel26-lts hingegen unterstützen aufgrund der voreingestellten HIGHMEM Option (https://bugs.archlinux.org/task/24207?project=1) DomU nicht. Um DomU mit i868 zu nutzen, kann man linux-xen oder kernel26-lts-xen aus dem [1] AUR installieren. Für Arch das Um Arch auf einem XenServer zu betreiben kann man sich wahlweise zusätzlich noch xe-guest-utilities aus dem AUR installieren.
Arch guest (DomU)
Um einen Login über die Konsole zu ermölichen, muss man in /etc/innittab
die Kommentarzeichen vor
h0:2345:respawn:/sbin/agetty -8 38400 hvc0 linux
entfernen. Danach passt man /boot/grub/menu.lst
den eigenen Bedürfnissen an.
Beispiele:
x86_64 linux:
# (0) Arch Linux (DomU) title Arch Linux (DomU) root (hd0,0) kernel /boot/vmlinuz-linux root=/dev/xvda1 ro console=hvc0 initrd /boot/initramfs-linux.img
x86_64 kernel26-lts:
# (0) Arch Linux LTS (DomU) title Arch Linux LTS (DomU) root (hd0,0) kernel /boot/vmlinuz26-lts root=/dev/xvda1 ro console=hvc0 initrd /boot/kernel26-lts.img
i686 linux-xen:
# (0) Arch Linux Xen (DomU) title Arch Linux Xen (DomU) root (hd0,0) kernel /boot/vmlinuz-linux-xen root=/dev/xvda1 ro console=hvc0 initrd /boot/initramfs-linux-xen.img
i686 kernel26-lts-xen:
# (0) Arch Linux LTS Xen (DomU) title Arch Linux LTS Xen (DomU) root (hd0,0) kernel /boot/vmlinuz26-lts-xen root=/dev/xvda1 ro console=hvc0 initrd /boot/kernel26-lts-xen.img
Dann editiert man /etc/fstab
und ändert sd*
in xvd*
(z.B. sda1 wird zu xvda1)
Die Module "xen-blkfront xen-fbfront xenfs xen-netfront xen-kbdfront" müssen nun in die MODULES
Zeile in /etc/mkinitcpio.conf
eintragen werden:
MODULES="... xen-blkfront xen-fbfront xenfs xen-netfront xen-kbdfront ..."
Anschliessend erneuert man die initramfs
:
For x86_64 linux:
mkinitcpio -p linux
x86_64 kernel26-lts:
mkinitcpio -p kernel26-lts
i686 linux-xen
mkinitcpio -p linux-xen
i686 kernel26-lts-xen:
mkinitcpio -p kernel26-lts-xen
Anmerkung: Man kann Xen guest support auch in seinen custom Kernel kompilieren (nicht als Module). Ist dies der Fall, braucht man keines der Xen Module in die /etc/mkinitcpio.conf
einzutragen.
xe-guest-utilities (XenServer Tools)
Um die xe-guest-utilities zu benutzen muss man einen xenfs mount point in /etc/fstab
eintragen:
xenfs /proc/xen xenfs defaults 0 0
dann trägt man xe-linux-distribution
in die DAEMONS
Zeile in der /etc/rc.conf
ein.
Anschliessend beendet man guest und loggt sich auf dem Host als Root ein.
Auf dem Xen host (Dom0)
Ausgabe der <vm uuid>:
# xe vm-list
In den PV Modus wechseln:
# xe vm-param-set uuid=<vm uuid> HVM-boot-policy="" # xe vm-param-set uuid=<vm uuid> PV-bootloader=pygrub
Jetzt kann man seinen VM guest booten und er sollte (hoffentlich) im PV Modus arbeiten.
Anmerkungen
- pygrub zeigt kein Bootmenu an. Lzma komprimierte stock kernel werden von manchen pygrub Versionen nicht unterstützt.(https://bbs.archlinux.org/viewtopic.php?id=118525).
- Um hwclock Fehlermeldungen zu vermeiden, setzt man
HAEDWARECLOCK="xen"
in/etc/rc.conf
(Eigentlich kann man hier jeden Wert, ausser "UTC" und "localtime" eintragen.) - Möchte man zu Hardware VM zurückkehren, setzt man HVM-boot-policy="BIOS order"
- tritt beim Booten von Xen eine Kernel Panic auf und es wird 'use apic="debug" and send error report' vorgeschlagen, kann man
noapic
in die Kernel Zeile inmenu.lst
setzen und es erneut versuchen.
Nützliche Pakete
- Virtual Machine Manager - a desktop user interface for managing virtual machines: virt-manager
- Open source multiplatform clone of XenCenter frontend (svn version): openxencenter-svn
- Xen Cloud Platform frontend: xvp
Siehe auch
- Xen's homepage
- Das Xen Wiki
- Xen kernel patches
- Virtuatopia guide to get Windows Server 2008 working with Xen Arch as Xen guest (PV mode)
Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar. |