disk = [ 'file:/xen/gast1.img,/dev/hda,w','tap:aio:/xen/data1.img,/dev/sda,w','phy:/dev/sdc1,/dev/sdc,w' ]
Vdev BE handle state evt-ch ring-ref BE-path 51712 0 0 4 7 770 /local/domain/0/backend/tap/2/51712 5632 0 0 4 9 795 /local/domain/0/backend/vbd/2/5632 2048 0 0 4 8 842 /local/domain/0/backend/tap/2/2048
/dev/hda 768 /dev/hdb 832 /dev/sda 2048 /dev/sdb 2064 /dev/xvda 51712 /dev/xvdb 51728
0000:05:05.0 SCSI storage controller: LSI Logic / Symbios Logic LSI1068 (rev 01) 0000:08:04.0 Ethernet controller: Broadcom Corporation Broadcom BCM5715 Gigabit Ethernet (reva3)
title Xen -- openSUSE 11.2 - 2.6.31.12-0.2 root (hd0,0) kernel /boot/xen.gz dom0_mem=2048M noreboot module /boot/vmlinuz-2.6.31.12-0.2-xen root=/dev/sda1 pciback.hide=(0000:05:05.0)(0000:08:04.0) module /boot/initrd-2.6.31.12-0.2-xen
# xm pci-list-assignable-devices 0000:05:05.0 0000:08:04.0
XEN unterstützt unterschiedliche Arten von Speicher-Hardware, um die anfallenden Daten der Gastbetriebssysteme und Anwendungen zu speichern. Da XEN an vielen Stellen normale Betriebssystembefehle und Treiber verwendet, wird hier quasi alles unterstützt, was das Betriebssystem selbst auch ohne Virtualisierung unterstützt. Die Entscheidung, welches Speichermedium genutzt wird, hängt natürlich von unterschiedlichen Faktoren ab, wie z. B. der Art des Backup, Einsatz im Cluster, Nutzung der Funktionen der Live-Migration, Möglichkeit der Vergrößerung der Dateisysteme, und so weiter. Folgende Übersicht zeigt die generell unterstützten Verfahren:
Es ist vollkommen unabhängig davon, ob ein Gast nun ein Datei-Image, eine komplette Partition oder ein anderes blockorientiertes Gerät zugewiesen bekommt. Innerhalb des Gastes wird eine Gerätedatei benötigt, um auf das entsprechende Gerät zuzugreifen. Arbeitet man mit klassischen Konfigurationsdateien, würde ein Eintrag in der Konfigurationsdatei des Gastes – wie in Abbildung 1 dargestellt – dem Gastsystem drei Festplatten auf drei verschiedene Arten und Weisen zur Verfügung gestellt.
Mit phy wird dem Gast eine physikalische Festplatte der Domain 0 zur Verfügung gestellt. In diesem Beispiel wird dem Gast die Partition /dev/sdc1 als Festplatte /dev/sdc zur Verfügung gestellt. Mit file und tap:aio werden dem Gast dateibasierte Images zur Verfügung gestellt, mit dem Unterschied, dass bei tap:aio durch die Domain 0 kein Caching vorgenommen wird. Unabhängig davon, ob man eine Festplatte als /dev/hda oder /dev/sda zur Verfügung stellt, wird innerhalb des Gastes immer der xenblk-Treiber für den Zugriff auf die virtuelle Festplatte genutzt.
Damit der Administrator die virtuellen Festplatten auch als solche erkennt, gibt es die Möglichkeit, spezielle XEN-eigene Gerätenamen innerhalb des Gastes zu nutzen. Taucht bei einem df –k der Gerätename /dev/xvda1 auf, ist es für den Administrator sehr einfach zu erkennen, dass es sich hierbei um eine virtualisierte Festplatte innerhalb eines XEN-Gastes handelt. Hierfür haben sich die Entwickler eine eigene Major-Nummer innerhalb des Linux Kernels reservieren lassen. Die Major Nummer 202 steht demnach für „XEN Virtual Block Device“. Mit der Minor-Nummer 0 beginnt das Gerät /dev/xvda, bei der Minor-Nummer 16 das Gerät /dev/xvdb. Pro Festplatte können hier bis zu 15 Partitionen angelegt werden. Mit Minor-Nummer 240 beginnt die letzte Gerätedatei /dev/xvdp.
XEN wäre nicht XEN, wenn die Festplattenverwaltung nicht auch online funktionieren würde. Für die Festplattenverwaltung von XEN-Gästen haben die Entwickler drei Befehle zur Verfügung gestellt:
Soll einem Gastsystem nun online eine zusätzliche Festplatte zugewiesen werden, kann dies einfach mit dem Befehl xm block-attach server1 file:/xen/cdrom.iso /dev/xvdc r bewerkstelligt werden. In diesem Fall bekommt der Gast server1 ein ISO-Image als Gerät /dev/xvdc zur Verfügung gestellt. Der Zugriff ist hierbei nur lesend (r) gestattet. Mit xm block-list server1 können alle Festplatten, die einem Gastsystem zugewiesen sind, angezeigt werden (siehe Abbildung 2). Leider haben die Entwickler vergessen, diesem Befehl eine für den Administrator lesbare Ausgabe zu spendieren, so dass dieser sofort erkennen könnte, um welche Geräte es sich bei 51712, 5632 oder 2048 handelt. Mit etwas Mathematik kommt man hier zu einer Lösung: Das Gerät /dev/sda hat die Major- Nummer 8 und die Minor-Nummer 0. Rechnet man nun (8 * 256) + 0 kommt man auf 2048. Vdev 2048 ist also das Gerät /dev/sda innerhalb des Gastes. Abbildung 3 zeigt häufig verwendete Geräte. Mit dem Befehl xm block-detach server1 2048 kann das Gerät dem Gastsystem wieder entzogen werden. Arbeitet man mit dem in der letzten ORDIX News beschriebenen Xenstore, ist nach xm block-attach, oder xm block-detach auch keine Konfigurationsdatei mehr anzupassen. Die Festplattenzuweisung ist dann sofort ohne Anpassung von Konfigurationsdateien, dauerhaft zugewiesen.
Häufig benötigen XEN-Gäste sehr viele Festplattengeräte. Wählt man den bisher beschriebenen Weg, muss eine Festplatte, die auf der Domain 0 existiert, immer per Konfigurationsdatei oder Xenstore zugewiesen werden. Der Gast nutzt dann zum Zugriff den Treiber xenblk. Unter XEN existiert nun auch die Möglichkeit, PCI-Geräte an Gäste durchzureichen. Wurde ein SCSI Controller oder ein anderes PCI Gerät einem Gastsystem zugewiesen, ist der Zugriff auf das Gerät nur noch von diesem und nicht mehr von Domain 0 möglich. Zu beachten ist hierbei, dass ein PCI Controller immer nur von einer Domain genutzt werden kann. Da der Linux Kernel beim Starten der Domain 0 aber die Angewohnheit hat, für alle gescannten Geräte den Treiber zu laden, muss dies zukünftig unterbunden werden. Hierzu muss zuerst die PCI-ID des Gerätes herausgefunden werden, die dem Gast zugewiesen werden soll. Führt man den Befehl lspci –D in der Domain 0 aus, sind die notwendigen Werte schnell ermittelt. Abbildung 4 zeigt eine gekürzte Ausgabe dieses Befehls. Abbildung 5 zeigt die notwendige Anpassung des Bootmanager Grub, die das Initialisieren der Geräte durch die Domain 0 unterbindet.
Wichtig ist hierbei, dass der pciback-Treiber schon beim Booten der Domain 0 mit Hilfe der Initial Ramdisk geladen wird. Dies wird je nach eingesetztem Linux-Derivat unterschiedlich realisiert.
Bei SuSE-Derivaten ist das Setzen der Variable INITRD_MODULES="pciback" in der Datei /etc/sysconfig/kernel mit anschließendem Aufruf des Befehls mkinitrd zielführend. Wird mit aktiviertem pciback-Treiber nun der Befehl xm pci-list-assignable-devices aufgerufen, werden die möglichen Geräte, die für Gäste zur Verfügung stehen, angezeigt. Abbildung 6 zeigt die Ausgabe des Befehls. Mit xm pci-attach server1 0000:05:05.0 kann der SCSI Controller dem Gast online zugewiesen werden. xm pci-list server1 zeigt die von einem Gast verwendeten PCI-Geräte an und xm pci-detach server1 0000:05:05.0 entfernt ein PCI-Gerät wieder von einem Gast. Und da XEN immer wieder für eine Überraschung gut ist, kann ein Gastsystem, das mit dem Schalter blkif=yes gestartet wurde, auch wieder als Block Device Backend fungieren und anderen Gästen Festplatten zur Verfügung stellen.
Arbeitet man mit dateibasierten Gästen, bringt das RPM-Paket qemu ein sehr praktisches Werkzeug namens qemu-img mit. Mit diesem Befehl kann der Administrator dateibasierte Images in unterschiedlichen Formaten erstellen. Aber was noch viel praktischer ist, er kann sie auch konvertieren. Beispielsweise erstellt qemu-img create –f raw /xen/data1 8G ein Image im raw-Format. Mit qemu-img convert –O raw /xen/server1.vmdk /xen/server1.raw kann ein VMware-Gast in das raw-Format umgewandelt werden. In der aktuellen Version werden alle namhaften Image-Formate unterstützt, so dass ohne Neuinstallation der Gäste von einer Virtualisierungslösung zu einer anderen gewechselt werden kann.
XEN kann mittlerweile auch direkt mit VMware Images umgehen, ohne das Format vorher zu konvertieren. Mit xm block-attach server1 tap:vmdk:/xen/data2.vmdk w kann einem Gast direkt eine vmdk-Datei als Speichermedium zur Verfügung gestellt werden. Besonders interessant ist auch das qcow2-Format, mit dem man Snapshots von Festplatten erstellen kann.
Für ein Desaster Recovery oder ein Backup kann es sinnvoll sein, direkt von der Domain 0 auf die Festplatten eines Gastsystems zugreifen zu können. Befindet sich nur eine einzige Partition mit Dateisystem auf dem Image, kann dieses meistens einfach gemountet werden. Häufig sind aber mehrere Dateisysteme oder aber auch eine Mischung aus Dateisystem und Swap auf einem Festplattenabbild. Abbildung 7 zeigt ein Beispiel eines derart partitionierten Festplatten-Images. Soll nun auf die dritte Partition mit dem EXT3-Dateisystem zugegriffen werden, kann dies mit dem Hilfswerkzeug kpartx bewerkstelligt werden. kpartx –a /xen/server1.raw stellt für jede Partition, die sich auf dem Datei-Image befindet unterhalb des Verzeichnisses /dev/mapper des Host-Betriebssystems eine Gerätedatei zur Verfügung. Diese kann dann eingebunden werden. kpartx –l/xen/server1.raw zeigt an, was der Befehl mit -a ausführen würde. Und kpartx –d/xen/server1.raw löscht die bereitgestellten Gerätedateien wieder.
Am elegantesten ist die Administration von Festplatten der virtuellen Gäste beim Einsatz des Linux Logical Volume Managers (LVM). Hier kann der Administrator viele Festplatten schon unter Domain 0 zu einem Volume verknüpfen. Bei einer Vergrößerung des Dateisystems muss nur das Volume vergrößert, nicht aber die Gastkonfiguration angepasst werden. Ein weiterer Vorteil liegt in der Erweiterbarkeit. Volumes und Dateisysteme können während des laufenden Betriebs online vergrößert werden, so dass es zu keinen Ausfallzeiten kommt. Eine besonders praktische Funktion des LVM ist das Anlegen von Snapshots. Ein Snapshot ist eine Momentaufnahme des aktuellen Volume-Zustandes.
Mountet man einen Snapshot, kann man hiervon in aller Ruhe ein Backup erstellen, ohne dass Dateien, die sich während des Backup verändern, negativen Einfluss darauf haben. Ein Snapshot eines bestehenden Volume kann unkompliziert mit dem Befehl lvcreate -s -L 2G -n server1-backup /dev/datavg/server1 erstellt werden. Die angegebene Größe 2G entspricht hierbei jetzt aber nicht der Originalgröße des Volume. Im Gegensatz zu anderen Volume Managern ist ein LVM Snapshot keine Komplettkopie des Originals. Es wird vielmehr ein partieller Plattenplatz zur Verfügung gestellt, um die Änderungen zu speichern. In diesem Beispiel können auf dem Original 2 GB Daten geändert werden, bis der Snapshot ungültig wird. Der Snapshot kann nun gemountet, mit lvextend vergrößert und nach dem Backup mit lvdelete wieder gelöscht werden. Wenn das LVM Volume partitioniert ist, kommt wieder kpartx zum Einsatz, das uns für die einzelnen Partitionen erneut Gerätedateien zur Verfügung stellt.
Festplattenverwaltung mit XEN ist eine relativ simple Angelegenheit, da XEN hier größtenteils Bordmittel des eingesetzten Betriebssystems nutzt. Der Vorteil, neue Festplatten einem Gast online hinzuzufügen oder zu entfernen, vermindert die Downtime eines Gastes. Benötigt ein Gast dedizierten Storage, ist dies mit der Möglichkeit des direkten Zugriffs von Hardware-Geräten an den Gast schnell zu implementieren. Die aktuelle Version 4.0 von XEN bietet noch weitere neue Funktionen, über die wir in Zukunft weiter berichten werden. Die Entwickler scheinen sich nun auch besonnen zu haben, XEN passend zum aktuellen Linux Kernel zu entwickeln und nicht mehr an der Kernelversion 2.6.18 festzuhalten.
Christian Fertsch (info@ordix.de).