Sprungmarken

Videoportal der FAU

Die letzten Meldungen

Novell Serverwartung MOLMED am Dienstag, 22 Mai von 8 Uhr bis ca. 11 Uhr

16. Mai 2012

Am Dienstag, 22 Mai findet von 8 Uhr bis voraussichtlich 11 Uhr eine dringende Serverwartung des Novell-Servers “MOLMED” statt. In der genannten Zeit ist der Zugriff auf die Volumes “USERTEMP” und “SYS” nicht möglich.
Weiterlesen...

Terminänderung – Vortrag “Einführung von fau.de-Maildomains und neuen Mail-/Groupware-Komponenten für die FAU” verschoben

15. Mai 2012

Aufgrund von Terminüberschneidungen mussten im Rahmen der Vorlesung “PRAXIS DER DATENKOMMUNIKATION” (Netzwerkausbildung) Termine getauscht werden.
Weiterlesen...

RRZE-Betrieb am „Berch“-Dienstag

15. Mai 2012

Am Dienstag, den 29.05.2012, wird das RRZE ab 12 Uhr geschlossen.
Weiterlesen...

Meldungen nach Thema

 

Virtualisierung mit XEN

Prinzipiell gibt es bei Xen zwei unterschiedliche Domains: Die Domain 0 existiert immer und stellt den anderen, unprivilegierten Domains (Domain U (unprivileged, da kein direkter HW-Zugriff erfolgen kann) Betriebsmittel wie Speicher oder Platten zur Verfügung. In diesen Domains läft jeweils ein modifizierter Kernel der für die jeweilige Umgebung angepaßt wurde. Es ist aber auch möglich einen Kernel zu kompilieren, der gleichzeitig Support für beide Typen beinhaltet. Auf diese Weise ist es z.B. bei Open SuSE 10.1 gelöst, die als Basis für den folgenden Artikel diente.

Installieren von Xen

	linux ~# apt-get install xen kernel-xen kernel-xen-nongpl
	oder:
	linux ~# smart install xen kernel-xen kernel-xen-nongpl
	

Um den Xen Kernel mit Linux zu booten kopiert man die bisherige Grub Konfigurationsdatei (/boot/grub/menu.lst) und editiert die original Konfigurationsdatei so das ein neuer Eintrag für Xen entsteht. Unter Open SuSE 10.1 kann dieser Schritt ausgelassen werden da die Einträge in die Grub Konfigurationsdatei bereits während der Installation von Xen erstellt werden.

	color white/blue black/light-gray
	default 0
	timeout 8
	gfxmenu (hd0,5)/boot/message

	title SUSE LINUX 10.1
    	kernel (hd0,5)/boot/vmlinuz root=/dev/hda6 
    	initrd (hd0,5)/boot/initrd

	### Neuer Eintrag
	title Xen
    	kernel (hd0,5)/boot/xen.gz dom0_mem=524288
    	module (hd0,5)/boot/vmlinuz-xen root=/dev/hda6
    	module (hd0,5)/boot/initrd-xen
	
	

xen.gz ist der Xen Kernel, die Option dom0_mem gibt den Speicherplatz (in kBytes) an, der für die Domain 0 reserviert wird. Der Wert sollte maximal die Größe des den gesamten physikalischen Speichers des Systems abzüglich 64 MByte (65536 kByte) für Xen selbst betragen.

Bei diesem Vorgehen ist zu beachten, dass die Domain 0 den gesamten verfügbaren Speicher für sich in Anspruch nimmt, d.h. für andere unprivilegierte Domains ist kein Speicher mehr verfügbar.

Im YaST von SuSE gibt es zwar einen Menüpunkt der das erstellen eine Virtuellen Maschine ermöglicht, allerdings werden wir in dieser Anleitung hauptsächlich auf die Erstellung einer Virtuellen Maschine von Hand eingehen. Um eine Virtuelle Maschine zu erstellen benötigen wir als erstes ein Festplattenimage welches wir uns mit den folgenden Kommandos erstellen:

	linux ~# dd if=/dev/zero of=/xen/demo1/sda bs=1M count=1 seek=4095
	

Da wir ein richtiges Plattenimage erstellen wollen wird der Imagedatei nun eine loopback device zugewiesen das mittels fdisk wie jede normale festplatte partitioniert werden kann (z.B mit einer Swap- und einer /-Partition).

	linux ~# losetup /dev/loop0 sda
	linux ~# fdisk /dev/loop0
 	 ...
	linux ~# fdisk -l /dev/loop0

	Disk /dev/loop0: 4294 MB, 4294967296 bytes
	255 heads, 63 sectors/track, 522 cylinders
	Units = cylinders of 16065 * 512 = 8225280 bytes

      	Device Boot      Start         End      Blocks   Id  System
	/dev/loop0p1               1          63      506016   82  Linux swap / Solaris
	/dev/loop0p2              64         522     3686917+  83  Linux
	

Nachdem das Festplattenimage erstellt wurde stellt sich die Frage wie man denn nun auf die einzelnen Partitionen zugreifen kann um sie für eine Installation in ein entsprechendes Verzeichnis zu mounten. Mit Hilfe des im Paket multipath-tools enthaltenen Tools kpartx ist dies über inen kleinen Umweg möglich. Diese Tool liest die Partitionstabelle des Block-Devices und erstellt für alle erkannten Partitionen entsprechende Geräte-Dateien unter /dev/mapper/:

	linux ~# kpartx -a -p "-part" -v /dev/loop0
	add map loop0-part1 : 0 1012032 linear /dev/loop0 63
	add map loop0-part2 : 0 7373835 linear /dev/loop0 1012095
  

Mit diesen Partitionen kann man jetzt wie gewohnt arbeiten (z.B. Dateisysteme anlegen und diese anschließend mounten):

	linux ~# mkreiserfs -f /dev/mapper/loop0-part1
	...
	linux ~# mount /dev/mapper/loop0-part1 /tmp/install
  

Die einfachste Variante ein so erstelltes Platten-Image mit einem passenden System zu füllen erfolgt über den YaST. Dort wählt man Software, Installation in Verzeichnis. Unter Zielverzeichnis gibt man den Pfad an unter dem man das /-Dateisystem des eben erstellten Images gemountet hat (in unserem Beispiel /tmp/install), Image erstellen auf nein setzen. Nachdem man die Software-Auswahl getroffen hat und das Zielverzeichnis für die Installation in ein Verzeichnis angegeben hat kann YaST mit der Arbeit beginnen und die gewünschten Pakete installieren. Am Ende dieses Schrittes existiert eine Linux Installation in einem Verzeichniss. Um letzten endes mit dem Image arbeiten zu können muss das Verzeichnis noch ungemountet und die Mappings, die kpartx angelegt hat entfernt werden.

	linux ~# umount /tmp/install
	linux ~# kpartx -d -p "-part" -v /dev/loop0
	

Bevor diese Installation unter Xen gestartet wird muss noch die virtuelle Hardware festgelegt werden. Dazu zählen neben Hauptspeicher und Festplatten auch Netzwerkkarten. Die Konfiguration dazu wird im Verzeichnis /etc/xen/ abgelegt und hat in den meisten Fällen den Namen der darin definierten Domäne:

	kernel = "/boot/vmlinuz-xen"
	ramdisk = "/boot/initrd-xen"
	memory = 128
	name = "demo1"
	disk = [ "file:/xen/demo1/sda,sda1,w", "file:/xen/demo1/sda,sda2,w" ]
	root = "/dev/sda1 ro"
	extra = "usessh=1 3"
	nics = 1
	vif = [ "mac=aa:00:00:48:12:4f, bridge=xenbr0" ]
	# dhcp = "dhcp"
	

Die Bridge xenbr0 wird dabei von Xen automatisch erzeugt, und die Standard-Netzwerkkarte eth0 ist Bestandteil dieser Bridge (wenn auch jetzt mit neuem Namen peth0):

	linux ~# btctl show
	xenbr0          8000.feffffffffff       no      peth0
	

Die MAC-Adressen für Xen sollte man aus dem eigens dafür reservierten Bereich generieren (00:16:3e:xx:xx:xx).

Der Kernel bzw. die Ramdisk müssen alle Treiber enthalten, die von der virtuellen Maschine gebraucht werden, also z.B. den Treiber für Festplatten-Controller (z.B. ide-disk) oder Root-Filesystem (z.B. reiserfs). Bei SuSE kann man diese in /etc/sysconfig/kernel der Variable INITRD_MODULES hinzufügen, um danach mit mk_initrd bzw. bei neueren Versionen mit mkinitrd eine neue Initial Ramdisk zu erstellen.

Ein Link in /etc/xen/auto/ auf diese Dateien sorgt dafür dass der Dienst xendomains bei Reboots diese Domänen automatisch startet (sofern xendomains aktiviert ist).

Zum Testen startet man die Domain jedoch erstmal von Hand:

	linux ~# xm create /etc/xen/demo1
	Using config file "/etc/xen/demo1".
	

Wird dieser Aufruf mit der Fehlermeldung

	Error: Error creating domain: (12, 'Cannot allocate memory')
	

beantwortet, so reicht der freie Speicher nicht mehr aus um die Anforderungen der Domain zu erfüllen. Um Speicher zwischen den einzelnen Domains dynamisch aufteilen zu können wurde in Xen 2.x das Balloon-Konzept eingeführt: Mit dessen Hilfe kann man den einzelnen Domains in der Summe mehr Hauptspeicher zuordnen, als real vorhanden ist. Ein Pseudo-Prozess balloon kann in jeder Domain Speicher für sich reservieren, in Wirklichkeit stellt er sie aber dem Xen System für andere Domains zur Verfügung.

Mit den folgenden Kommandos kann man sich die momentane Speicheraufteilung betrachten, anpassen und anschließend eine Domain neu starten:

	linux ~# xm list
	Name              Id  Mem(MB)  CPU  State  Time(s)  Console
	Domain-0           0      443    0  r----    922.9
	linux ~# xm balloon Domain-0 256
	linux ~# xm list
	Name              Id  Mem(MB)  CPU  State  Time(s)  Console
	Domain-0           0      256    0  r----    923.5
	

Ab Version 3.x hat sich das etwas geändert, hier sieht der gleiche Ablauf so aus:

	linux ~# xm list
	Name                              ID Mem(MiB) VCPUs State  Time(s)
	Domain-0                           0     443     1 r-----    922.9
	linux ~# xm  mem-set Domain-0 256
	linux ~# xm list
	Name                              ID Mem(MiB) VCPUs State  Time(s)
	Domain-0                           0     256     1 r-----    923.5
	

Eine (vorkonfigurierte) virtuelle Maschine startet man dann mit

	linux ~# xm create /etc/xen/demo1
	Using config file "/etc/xen/demo1".
	Started domain demo1, console on port 9604
	linux ~# xm list
	Name              Id  Mem(MB)  CPU  State  Time(s)  Console
	Domain-0           0      256    0  r----   1077.4
	demo1              6       64    1  r----      2.3    9606
	linux ~# xm consoles
	Dom Port  Id Connection
	  4 9604  16
	linux ~# xm console demo1
	************ REMOTE CONSOLE: CTRL-] TO QUIT ********
	...
	************ REMOTE CONSOLE EXITED *****************
	

Man kann sich den letzten Schritt auch sparen indem man sich gleich beim Starten der virtuellen Maschine an die Console hängt:

	linux ~# xm create /etc/xen/demo1 -c
	...
	

Eine Konsole wird mit der Tastenkombination Ctrl-] geschlossen.

Domänen kann man nicht nur über die Konsole herunterfahren, sondern auch aus der Domain 0 heraus. Die Option shutdown entspricht dabei dem System-Kommando shutdown -h now, währen die Option destroy in ihren Auswirkungen dem physikalischen Ausschalten eines Rechners gleicht:

	linux ~# xm shutdown demo1
	linux ~# xm destroy demo1
	

Weitere Kommandos:

	linux ~# xm save demo1 /xen/demo1.xen
	linux ~# xm restore /xen/demo1.xen
	linux ~# xm pause demo1
	linux ~# xm migrate demo1 linux2.mydomain.de
	linux ~# xm migrate --live demo1 linux2.mydomain.de
	

Die meisten Probleme die beim Einrichten von Xen auftreten können sind im Externer Link:  Xensource Wiki beschrieben. Weitere Links:

Vanderpool und Pacifica

Die neueste bzw. nächste Generation von CPUs der großen Hersteller werden mit Virtualisierungsfunktionen ausgeliefert. Bei Intel trägt diese den Codenamen Vanderpool, beim Konkurrenten AMD Pacifica. Mit Hilfe dieser Technik können dann auch unmodifizierte Gastsysteme unter Xen laufen. In der Dokumentation fehlen jedoch leider noch detailierte Hinweise darauf, wie man ein solche System konfiguriert. Im folgenden befinden sich zwei Konfigurationsdateien die es ermöglichen ein unmodifiziertes Windows unter Xen laufen zu lassen. Vorraussetzung hierfür ist ein Prozessor mit VT Technologie sowie Xen ab Version 3.0.2.

Hier die Konfigurationsdatei um die Installation von Windows einzuleiten in dem von CD gebootet wird:

	import os, re
	arch = os.uname()[4]
	if re.search('64', arch):
    	arch_libdir = 'lib64'
	else:
    	arch_libdir = 'lib'
	
	kernel = "/usr/lib/xen/boot/hvmloader"
	builder='hvm'
	memory = 128
	name = "winxp"
	vif = [ 'type=ioemu, bridge=xenbr0' ]
	disk = [ 'file:/tmp/install,ioemu:sda,w' ]
	device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
	cdrom = '/dev/cdrom'
	boot='d'
	sdl=1
	vnc=0
	vncviewer=0
	stdvga=0
	serial='pty'
	ne2000=0
	audio=1
	

Um die Windowsinstallation zu booten muss bei boot die Option auf c gestellt werden um von dem Festplattenimage zu booten.

	import os, re
	arch = os.uname()[4]
	if re.search('64', arch):
    	arch_libdir = 'lib64'
	else:
    	arch_libdir = 'lib'
	
	kernel = "/usr/lib/xen/boot/hvmloader"
	builder='hvm'
	memory = 128
	name = "winxp"
	vif = [ 'type=ioemu, bridge=xenbr0' ]
	disk = [ 'file:/tmp/install,ioemu:sda,w' ]
	device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
	cdrom = '/dev/cdrom'
	boot='c'
	sdl=1
	vnc=0
	vncviewer=0
	stdvga=0
	serial='pty'
	ne2000=0
	audio=1
	

Vor dem Erstellen der virtuellen Maschine sollte unbedingt geprüft werden, ob der zugewiesene Speicher auch frei ist. Ist dies nicht der Fall, bedanken sich ältere Versionen von Xen mit einem Crash der Domain0.

In der neuen Version 3.0.3 von Xen hat sich wieder einmal einiges an der Konfiguration geändert. So wurde z.B. die Angabe von CDROM und Festplatten-Laufwerken einheitlich gestaltet. Was unter 3.0.2 noch

...
disk = [ 'file:/tmp/install,ioemu:sda,w' ]
cdrom = '/dev/cdrom'
...
  

hieß, wir jetzt so geschrieben:

...
disk = [ 'file:/tmp/install,ioemu:sda,w', 'phy:cdrom, hdc:cdrom, r' ]
...
  

Letzte Änderung: 13. Maerz 2012, Historie

zum Seitenanfang

Startseite | Kontakt | Impressum

RRZE - Regionales RechenZentrum Erlangen, Martensstraße 1, D-91058 Erlangen | Tel.: +49 9131 8527031 | Fax: +49 9131 302941

Inhaltenavigation

FAU - Friedrich-Alexander-Universität
UnivIS - Informationssystem der Friedrich-Alexander-Universität Erlangen Nürnberg

Zielgruppennavigation

  1. Studierende
  2. Beschäftigte
  3. Einrichtungen
  4. IT-Beauftragte
  5. Presse & Öffentlichkeit