QEMU
Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!
QEMU ist ein Prozessor-Emulator, der einen virtuellen Rechner bereitstellt. Für das darin installierte Betriebssystem verhält sich QEMU wie echte Hardware. Dies ist zum Testen und zum gleichzeitigen Ausführen mehrerer Betriebssysteme auf der selben Hardware sehr hilfreich. Zudem bietet QEMU die Möglichkeit, die Virtualisierung durch XEN oder KVM zu beschleunigen (falls ein Prozessor genutzt wird, der dies unterstützt).
Installation
QEMU wird mittels
$ pacman -S qemu
installiert.
Über QEMU
QEMU bietet verschiedene Möglichkeiten der Virtualisierung. Zum einen die Hardware Emulation durch tcg (Tiny-Code-Generator) und Hardware-unterstützte-Virtualisierung von Typ-1-Hypervisor (z.B. Xen) und Typ-2-Hypervisor (z.B. KVM) Standardmäßig nutzt QEMU tcg. Zudem muss die Unterstützung für Xen oder KVM während des Kompilierens explizit aktiviert werden.
Die große Stärke des puren QEMUs ist die Unabhängigkeit vom Typ der CPU. So ist es zum Beispiel möglich auf einer normalen 32Bit CPU ein 64bit Betriebssystem zu installieren indem QEMU die 64bit CPU simuliert. Diese Stärke ist aber auch die große Schwäche da durch das Simulieren die Ausführungsgeschwindigkeit im Vergleich zu anderen Virtualisierungsmethoden sehr langsam ist.
Mit tcg können folgende Prozessor Typen simuliert werden:
qemu-system-alpha qemu-system-arm qemu-system-cris qemu-system-i386 qemu-system-lm32 qemu-system-m68k qemu-system-microblaze qemu-system-microblazeel qemu-system-mips qemu-system-mips64 qemu-system-mips64el qemu-system-mipsel qemu-system-or32 qemu-system-ppc qemu-system-ppc64 qemu-system-ppcemb qemu-system-s390x qemu-system-sh4 qemu-system-sh4eb qemu-system-sparc qemu-system-sparc64 qemu-system-unicore32 qemu-system-x86_64 qemu-system-xtensa qemu-system-xtensaeb
Installation eines Gast-Betriebssystems
Erstellen einer Festplatte für das Gastsystem
Möchte man das Gast-Betriebssystem installieren, so benötigt man einen Container dafür. QEMU liefert ein Programm mit, das einem hilft einen solchen Container zu erstellen:
$ qemu-img create -f qcow2 arch.img 4G
Nun haben wir ein Festplatten-Image arch.img mit einer maximalen Größe von 4GByte. Da qcow2 ein Sparse-Format ist, belegt es nur soviel Platz wie es braucht.
qemu-img
unterstützt viele weitere Formate. Unter anderem auch die Image- Formate anderer Virtualisierungslösungen, wie Vmware oder Virtualbox.
Da QEMU mit qcow2 oder raw am besten funktioniert, kann und sollte man die Fremdformate mit qemu-img
konvertieren.
Mehr Informationen zu qemu-img findet man in der dazu gehörigen Man-Page.
Starten vom Installationsmedium
Wir können das Gastsystem direkt von einem ISO-Image oder von einem physischen Medium installieren. Bei letzterem ersetzen wir den ISO-Dateinamen einfach durch das entsprechende Gerät, wie z.B. /dev/dvd.
$ qemu-system-i386 -hda arch.img -cdrom arch-0.7.2-ftp.iso -boot d
Hierbei bedeutet -boot d, dass wir vom virtuellem CD-ROM-Laufwerk starten wollen.
Starten des Gastsystems
Das Gastsystem lässt sich einfach durch Angabe des Fesplatten-Abbildes starten:
$ qemu-system-* arch.img
Bei mehreren Festplatten wird die -hdX
Option benötigt:
$ qemu-system-* -hda arch.img $ qemu-system-* -hda arch.img -hdb mehr.img -hdc Speicher.img
Standardmäßig startet eine VM mit 128mb RAM. Möchte man diesen Wert erhöhen wird die Option -m
verwendet:
$ qemu-system-* -hda arch.img -m 1024
Die gestartete VM hat 1gb RAM zur Verfügung.
Weitere nützliche Optionen sind:
-smp n
n gibt die Anzahl der für die VM benutzbaren CPU-Kerne an.
-vga TYP
Standard ist die Emulation von cirrus, möglich sind noch: std, vmware, none und qxl. Letzteres sollte mit dem spice-Protokoll genutzt werden, was standardmäßig nicht eingebaut ist. Die entsprechenden Grafiktreiber sollten unter Umständen im Gast-System installiert werden.
Hinweis: Mit vmware lässt sich bei einer Linux-LIVE CD eine höhere bzw. die native Bildschirmauflösung benutzen.
-full-screen
Startet die VM im Vollbild.
Möchte man beim starten des Gast-Systems gleich einen USB-Stick weiterreichen, dann ist diese Option nützlich. Voraussetzung ist, dass das Medium nicht im Host-System gemounted wurde.
-usb -usbdevice host:<VendorID>:<ProductID>
Die entsprechenden Werte findet man mit lsusb. Die -usb Option aktiviert den USB-Treiber, da dies noch nicht per default geschieht. Möchte man ein Image eines USB-Sticks einbinden:
-usb -usbdevice disk:Stick.img
Bedingt durch die QEMU interne Firewall unterliegt das simulierte Netz gewissen Beschränkungen sicherheitstechnischer Art. Am ehesten ist dies zu bemerken, wenn man versucht ping in einem Gast-System aufzurufen. Desweiteren ist es ohne Probleme möglich das Host-System vom Gast aus zu erreichen. Anderst herum jedoch nicht. Um vom Host aus das Gast-System zu erreichen bedient man sich der Port-Umleitung.
-redir tcp:2222::22 -net nic -net user,hostfwd=tcp::2222-:22
Bildet den Host-Port 2222 auf dem Gast-Port 22 ab. Möchte man nun per SSH in das Gast-System erreicht man das durch:
$ ssh -p 2222 <guestuser>@localhost
Bedienung
Durch Klicken mit der Maus in das Qemu-Fenster, kann die Maus im Gast genutzt werden. Durch Drücken von "Strg+Alt" kann der Mauszeiger wieder befreit werden. Mit der Tastenkombination STRG+ALT+F lässt sich zwischen Vollbild- und Fenstermodus wechseln.
Andere Tastenkombinationen sind:
Strg+Alt+1 Oberfläche des Gast-Betriebssystems (Default) Strg+Alt+2 Oberfläche des QEMU-Monitor Strg+Alt+F Vollbild- oder Fenstermodus Strg+Alt++ Vergrößert die Oberfläche Strg+Alt+- Verkleinert die Oberfläche Strg+Alt+U Setzt die Oberfläche auf die Anfangsgröße zurück Strg+Alt+H Hilfe bei Verwendung von -nographic
QEMU-Monitor
Sobald wie VM läuft, kann man mittels der Tasten STRG+ALT+2 in den QEMU-Monitor wechseln, mit dem man verschiedene Aktionen an der laufenden VM durchführen kann. Eine Befehlsübersicht erhält man hier mittels:
help
Möchte man wieder zum Fenster der laufenden VM zurückkehren, ist lediglich die Tastenfolge STRG+ALT+1 erforderlich.
Unter anderem folgende Aufgaben lassen sich lösen:
* Änderungen an der Hardware (Netzwerkkarten, USB, etc) * Verwaltung von Wechselmedien wie CDs/DVDs, etc * Verwaltung von Snapshots * Pausieren, stoppen, herunterfahren, etc des Gast-Systems * Informationen über das Gast-System
USB-Stick
Möchte man im laufenden Betrieb einen USB-Stick einbinden, kann man dies schlecht per CLI-Option erledigen. Folglich wechselt man als erstes in den QEMU-Monitor. Dort erhält man mit
(qemu) info usb
entsprechende Auskünfte, falls ein USB-Medium eingehängt wurde. Infos über entsprechende USB-Medien erhält man mit:
$ lsusb (qemu) info usbhost
Hat man die entsprechenden Daten des USB-Mediums hängt man diese mit
(qemu) usb_add host:<VendorID>:<ProductID>
ein.
Achtung: Falls es zu Zugriffsproblemen kommt, wegen nicht ausreichender Rechte. Es wird oftmals geschrieben einfach die Rechte der entsprechenden /dev/bus/usb und /proc/bus/usb auf 777 zu setzen. Ob man dies möchte ist jedem selbst überlassen
Eingehängte USB-Medien werden mit
usb_del <Device-ID>
wieder ausgeworfen.
QEMU mit KVM Unterstützung
Mit QEMU 1.3 wurde der Fork QEMU-KVM wieder aufgenommen, wodurch QEMU-KVM als separates Paket wegfällt.
Vorbereitung
Durch die Emulation einer vollständigen CPU arbeitet ein System in QEMU um Faktor 5 bis 20 langsamer als auf realer Hardware. Mit KVM ist es möglich, ohne CPU-Emulation Code direkt auf der Host-CPU auszuführen, falls diese die dazu nötigen Hardware-Virtualisierungstechniken unterstützt.
Wenn man systemd nutzt muss man nichts weiter beachten, ansonsten müssen die Kernelmodule kvm und je nach Prozessortyp kvm-intel oder kvm-amd manuell geladen werden. Systemd lädt die entsprechenden Module nach.
$ modprobe kvm kvm-intel kvm-amd
Ebenso sorgt systemd/udev dafür, das man als lokaler Nutzer nicht der Gruppe kvm angehören muss. Mit anderen Init-Systemen dürfte dies unter Umständen aber nötig sein.
Einsatz
Nachdem die passenden Kernelmodule geladen wurden, lässt sich die VM einfach mit
$ qemu-system-{i386,x86_64} -enable-kvm $ qemu-system-{i386,x86_64} -machine type=pc,accel=kvm
starten.
Tipps und Tricks
Erweitern des zuweisbaren Rams
Qemu vergibt standardmäßig 128mb Ram an das emulierte OS, um diese Grenze zu Erweitern gibt die Option "-m XXX" wobei XXX die Ramgröße in mb ist. Wieviel RAM man einstellen kann ist abhängig von /dev/shm
, welches Teil von tmpfs
ist. Dies bedeutet, dass /dev/shm
standardmäßig die Hälfte des physikalischen RAM zur Verfügung hat.
In Systemen wo es noch in der /etc/fstab
einen separaten /dev/shm Eintrag gibt, kann man diesen beliebig erweitern.
none /dev/shm tmpfs defaults,size=XXXM 0 0
Damit die Änderung Wirkung zeigt sollte man /dev/shm
neu einbinden:
$ mount -o remount /dev/shm
Strg+Alt Konflikte
Es kann zu Problemen kommen, wenn man einerseits im Window-Manager die Tastenkombination Strg+Alt+Ziffer verwendet und QEMU am laufen hat. Solange das QEMU Fenster den Fokus hat passiert nichts. Wechselt man aber zum Beispiel in den QEMU-Monitor verliert das Fenster den Fokus und die Tastenkombination des WM greift. Um wieder zur Gast-Oberfläche wechseln zu können muss man die Tastenkombination ein wenig erweitern:
Strg+Alt+Shift+1
Dies ermöglicht einem wieder die Oberfläche des Gastsystems zu erreichen. Um solchen Problemen vorzubeugen gibt es zwei Optionen, mit denen man QEMU starten kann:
-alt-grab -ctrl-grab
Ersteres setzt Strg+Alt+Shift als Wechseloption fest, wobei dies auch ohne Aktivierung funktionieren kann. Die zweite Option legt die Fokustaste auf die rechte Strg-Taste.
Todo
- Allgemeiner auf QEMU eingehen
- Netzwerk
- Neue Ordnung überlegen