LVM und Xen unter Ubuntu 7.04

Der erste Gedanke, warum die Kombination von LVM und Xen für einen Desktop-Rechner interessant sein kann, erschließt sich zu Beginn nicht gleich. Denn wer benötigt schon einen Logical Volume Manager, der einem dynamische Partitionen zur Verfügung stellt und eine Software zur Virtualisierung weiterer Betriebssysteme? Doch wird deren Einsatz genauer betrachtet, kann man selbst reichlich davon profitieren. Warum ich mich selbst dafür entschieden habe und wie die Installation und Konfiguration durchzuführen ist, soll der folgende Artikel etwas näher darstellen.

Der Grund, meinen jetzt schon fast drei Jahre alten Barebone SN95G5 von Shuttle komplett neu zu installieren, liegt daran, dass ich trotz der nun schon lange dauernden Eingewöhnungsphase mit meinem MacBook, mit diversen Eigenheiten nicht zurecht komme. Erwähnt sollen hier in aller Kürze nur zwei sein:

  1. Entwickler haben beim Tastaturlayout des Mac klar das Nachsehen. Es fehlt der bequeme Zugriff auf diverse Zeichen, die für die Programmierung benötigt werden. So sind wichtige Tasten wie {[]}/\~ nur schwer über die deutsche Tastatur erreichbar. Klarer Vorteil für Standard-Benutzer, jedoch ich fühle mich behindert.
  2. Da ich aufgrund meiner Arbeit sehr viel mit der Shell arbeiten muss und auch den Midnight Commander für unverzichtbar halte, ist mir die Bedienung besonders wichtig. Doch hier patzt Mac OS X auch. Es fehlen Tasten für ein flüssiges und effizientes Arbeiten. So gibt es beim Bearbeiten von Dateien unter mc keine Möglichkeit mit Pos 1 an den Anfang bzw. mit Ende an das Ende einer Datei zu springen.

Weiterhin habe ich den Bedarf, Software unter verschiedenen Versionen eines bzw. sogar unter verschiedenen Betriebssystemen zu testen und möchte aufgrund der zu installierenden Bibliotheken nicht mein Desktop-Betriebssystem verwenden. Ebenfalls soll ein LAMP-System innerhalb einer abgesicherten Umgebung laufen, ohne das auftretende Sicherheitslöcher meinen Desktop gefährden. Und zuletzt möchte ich diese Umgebungen leicht auf andere Rechner transferieren können, ohne jedes Mal ein neues System installieren zu müssen.

Leider war mir bereits von Anfang an klar, dass ich mit der aktuellen Konfiguration nur eine Paravirtualisierung erreichen kann. Der eingebaute Prozessor AMD Athlon(tm) 64 Processor 3200+ besitzt keine Pacifica-Erweiterung und für den Einbau eines AMD X2 hätte ich neben dem Board auch das Mainboard und den Speicher wechseln müssen. Da jedoch alle meine Testsysteme auf Linux basieren und sich deren Kernel anpassen lässt, habe ich nicht mehr über eine Aufrüstung nachgedacht.

Die Entscheidung für Xen als Software zur Paravirtualisierung war schnell gefällt. Alternativen wie linux-vserver oder openvz verwenden für die Gastsysteme generell nur den Kernel des Wirtssystems, was deren Einsatz ausschloss. Gleiches gilt für VMware und Virtualbox, die nicht wie Xen unterhalb des Betriebssystemkernels ansetzen und somit langsamer laufen. Ein auch sehr großer Vorteil ist, dass es Xen unter Ubuntu 7.04 als fertiges Paket gibt, das nur noch installiert werden muss. Damit ist Xen eindeutiger Sieger.

Doch wo werden die Daten der Gastsysteme abgelegt? Hier gibt es zwei Möglichkeiten. Entweder es werden Images verwendet, die alle Dateien des Gastes innerhalb einer Datei zusammenfassen, was Geschwindigkeitseinbußen mit sich bringt. Oder es werden eigenständige Partitionen verwendet. Damit wird eine native Schreibgeschwindigkeit erreicht und selbst während der Gast läuft, kann man Einblick in sein Dateisystem erhalten. Normale Partitionen sind dafür jedoch nicht zu empfehlen, da es nicht einfach ist, diese nachträglich in der Größe anzupassen, ohne andere Partitionen zu beeinflussen. Wie die dynamischen Datenträger unter Windows gibt es für Linux den Logical Volume Manager. Mit ihm ist es möglich, mehrere Festplatten zu einer Volume Group (VG) zu verbinden und Logical Volumes (LV) auch plattenübergreifend anzulegen.

Aber genug der Einleitung – kommen wir zum eigentlichen Thema – der Installation von LVM und Xen unter Ubuntu 7.04 (Feisty Fawn)…

Installation von Ubuntu 7.04

Um den LVM unter Ubuntu verwenden zu können, wird die Alternate-CD benötigt, denn die Desktop-CD enthält nicht die notwendigen Pakete! Zum Download für verschiedene Architekturen steht Sie hier bereit und ist etwas größer als die Desktop-CD. Sobald die CD gebrannt ist, kann der Rechner neu gestartet werden und er sollte von der CD booten. Nach Auswahl der Spracheinstellungen startet die Auswahl des ersten Menü-Eintrages den Installationsassistenten. Im Gegensatz zur Desktop-CD kommt hier noch die textbasierte Variante zum Einsatz, was aber keine Einbußen mit sich bringt, da auch mit diesem Installer alle Einstellungen übersichtlich durchgeführt werden können. Nach der Netzwerkkonfiguration und der Eingabe des Rechnernamens kommt der wichtigste Teil – die Partitionierung der Festplatte. Für den ersten Test ist sicherlich die geführte Variante mit Verwendung des LVM hilfreich. Die Größen der notwendigen Partitionen werden dabei automatisch bestimmt. Bei mir endete diese Variante leider in einer normalen Boot-Partition und einem Root-LV, das neben dem Swap-LV die gesamte Physical Volume belegte. Da ich meine Benutzerdaten jedoch getrennt von der Software haben möchte, wählte ich beim zweiten Mal die manuelle Variante. Folgende Partitionierung habe ich gewählt:

Partition Größe Dateisystem Mount Point
/dev/sda1 236M ext3 /boot
/dev/sda2 152GB vlm vg01
/dev/vg01/swap 2GB swap
/dev/vg01/root 6GB ext3 /
/dev/vg01/home 5GB ext3 /home
/dev/vg01/shared 100GB ext3 /shared

Wie zu erkennen ist, wurde nicht die gesamte Größe der Volume Group ausgenutzt, da für die Xen-Gastsysteme noch Platz benötigt wird. Die Boot-Partition muss außerhalb des LVM liegen, da sonst das Booten des Systems fehlschlägt. Bei der Root- und Swap-Partition kann es sich jeder selbst überlegen, ob sie in den LVM gehören. Bei auftretenden Problemen wird die Fehlerbehebung jedoch erschwert, da nicht direkt auf die Partitionen zugegriffen werden kann! Die Installation kann anschließend normal zu Ende geführt und das System neu gestartet werden.

Achtung: Die obige Installations-Prozedur musste ich aufgrund verschiedener Bugs im Installer 5x wiederholen, da er ständig mit Fehlern abgebrochen hat. Auch für das Aktivieren des LVM und das Anlegen eines Logical Volumes brauchte er jeweils ca. 4 Minuten, währendessen der Installer zu hängen schien. Hier sind auf alle Fälle noch Verbesserungen notwendig!

Nun sollte ein lauffähiges System existieren. Für diverse Anpassungen der Oberfläche oder Installation weiterer Treiber sind die Tutorials auf ubuntuusers.de hilfreich, so dass ich nicht weiter darauf eingehen werde.

Installation und Konfiguration von Xen 3

Mit Erscheinen von Ubuntu 7.04 gibt es nun auch zum ersten Mal ein Meta-Paket, dass alle notwendigen Pakete installiert. Für einen Desktop-Rechner kann mit dem folgenden Befehl das Xen-System installiert werden:

# apt-get install ubuntu-xen-desktop

Damit werden die Pakete bridge-utils, libc6-xen, libxen3.0, python-xen3.0, xen-docs-3.0, xen-hypervisor-3.0-i386, xen-ioemu-3.0, xen-tools, xen-utils-3.0, xenman und xen-image-2.6.19-4-generic heruntergeladen, installiert und eingerichtet. Es ist keine weitere Arbeit notwendig. Ein Neustart des Systems sollte Ubuntu jetzt als Wirtssystem an die Domäne 0 (dom0) binden:

# uname -a
Linux marvin 2.6.19-4-generic #2 SMP Thu Apr 5 06:06:18 UTC 2007 i686 GNU/Linux
# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 865 1 r----- 2334.1

Jetzt sollte zuerst Xen an die eigenen Bedürfnisse konfiguriert werden. Bearbeiten sie dazu die Datei /etc/xen/xend-config.sxp, um globale Einstellungen festzulegen. Da die Gastsysteme auf einem Desktop-Rechner meist über nur eine Netzwerkkarte verfügen, ist die Anbindung der Gäste über eine Bridge zu empfehlen. Dazu sollte (network-script network-bridge) auskommentiert und (network-script network-dummy) herausgenommen werden. Mit einem Neustart des xend-Dämons werden die neuen Einstellungen übernommen:

# /etc/init.d/xend restart
Restarting XEN: xend.

Neues Gastsystem erstellen

Das Erstellen von neuen Gastsystemen wird mit den installierten XenTools wesentlich vereinfacht. Sie erstellen auf Wunsch automatisch neue Logical Volumes für das System und dem Swap-Speicher, laden alle für das neue System notwendigen Pakete herunter und installieren sie und richten das System ein. Doch dazu sollten zuerst die Einstellungen angepasst werden:

# /etc/xen-tools/xen-tools.conf
# Output directory for storing loopback images.
##
# dir = /home/xen
# If you don't wish to use loopback images then you may specify an
# LVM volume group here instead
##
lvm = vg01
# Installation method.
##
# copy = /path/to/pristine/image
debootstrap = 1
# rpmstrap = 1
# tar = /path/to/img.tar
# Command definitions.
##
# --copy:
# copy-cmd = /bin/cp -a $src/* $dest
#
# --tar:
# tar-cmd = /bin/tar --numeric-owner -xvf $src
# Disk and Sizing options.
##
size = 5Gb # Disk image size.
memory = 128Mb # Memory size
swap = 128Mb # 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.
# Currently supported and tested distributions include:
#
# sid - Debian
# sarge - Debian
# etch - Debian
# dapper - Ubuntu
# centos4 - CentOS 4
# fedora-core4 - Fedora Core 4 (codname stentz)
# Networking setup values.
##
gateway = 192.168.123.254
netmask = 255.255.255.0
# Uncomment this if you wish the images to use DHCP
##
# dhcp = 1
##
# Misc options
##
# Uncomment the following line if you wish to disable the caching
# of downloaded .deb files when using debootstrap to install images.
##
# cache = no
# Uncomment the following line if you wish to interactively setup
# a new root password for images.
##
passwd = 1
# If you'd like all accounts on your host system which are not present
# on the guest system to be copied over then uncomment the following line.
##
# accounts = 1
# Default kernel and ramdisk to use for the virtual servers
##
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
# The architecture to use when using debootstrap or rpmstrap.
##
# arch=i386
# The default mirror for debootstrap which can be used to install
# Debian Sid, Sarge, and Etch.
##
mirror = http://ftp.us.debian.org/debian/
# A mirror suitable for use when installing the Dapper release of Ubuntu.
##
# mirror = http://gb.archive.ubuntu.com/ubuntu/
# Uncomment if you wish newly created images to boot once they've been
# created.
##
# boot = 1

Die obigen Einstellungen sind auf meine Vorgaben bezogen. Netzwerkeinstellungen und Auswahl des jeweiligen Systems sind selbst anzupassen. Sollte wie in diesem Falle auch debootstrap verwendet werden, um das Basissystem zu installieren, so ist das Paket zuerst zu installieren:

# apt-get install debootstrap

Jetzt kann ein neuer Gast mit Debian Etch als Betriebssystem erstellt werden:

# xen-create-image --hostname web --ip 192.168.123.2

Nach etwa 5min sollten zwei neue Logical Volumes existieren, die das installierte Basissystem und den Swap-Speicher enthalten:

# lvdisplay | grep web
LV Name /dev/vg01/web-disk
LV Name /dev/vg01/web-swap

Der Gast wird mit

xm create web.cfg -c

gestartet und gleichzeitig zu dessen Konsole gewechselt. Nach dem Einloggen mit dem bereits vorgegebenen Passwort, kann das Basissystem angepasst und je nach Bedarf weitere Pakete (z.B. ssh, apache, etc.) installiert werden. Soll der Gast automatisch beim Start des Rechners gestartet werden, so ist ein Sym-Link auf dessen Konfigurationsdatei im Verzeichnis /etc/xen/auto abzulegen.

Ich hoffe, dass durch diese Anleitung doch ein paar Ubuntu-Benutzer die Möglichkeiten von LVM ausnutzen möchten und freue mich auf Feedback und Hinweise.

Update: Die Verwendung von Xen 3.0.3 kann ich leider doch nicht so uneingeschränkt Neueinsteigern in Linux empfehlen. Zum Einen müssen Besitzer eines AMD-Prozessors mit PowerNow-Feature auf die dynamische Anpassung des Prozessortaktes verzichten, solange sie nicht diesen Patch einspielen und Xen selbst kompilieren. Ähnliches trifft auf den Nvidia-Treiber zu, für den zum Bauen des Moduls zuerst die Kernel-Header installiert werden müssen. All dies hat jedoch keinen Einfluss auf die Verwendung von LVM.