QEMU: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
RoundCube (Diskussion | Beiträge)
Formatierung
 
(23 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
==Ein virtueller PC mit QEMU==
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).
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.
[[Bild:qemu-windows-xp.png|thumb|right|400px|Windows XP unter QEMU]]
[[Bild:qemu-windows-xp.png|thumb|right|400px|Windows XP unter QEMU]]


==Installation==
{{Installation|repo=extra|paket=qemu}}
QEMU kann einfach mit [[Pacman]] installiert werden:
pacman -Sy qemu
==Installation eines Betriebssystems==
Die große Stärke des puren qemus ist die Unabhängigkeit vom Type 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 viel CPU Leistung verloren geht.


Folgende CPU typen können mit folgenden Befehlen simuliert werden.
==Ü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-arm
  qemu-system-cris
  qemu-system-cris
qemu-system-i386
qemu-system-lm32
  qemu-system-m68k
  qemu-system-m68k
qemu-system-microblaze
qemu-system-microblazeel
  qemu-system-mips
  qemu-system-mips
  qemu-system-mips64  
  qemu-system-mips64
  qemu-system-mips64el
  qemu-system-mips64el
  qemu-system-mipsel
  qemu-system-mipsel
qemu-system-or32
  qemu-system-ppc
  qemu-system-ppc
  qemu-system-ppc64
  qemu-system-ppc64
  qemu-system-ppcemb
  qemu-system-ppcemb
qemu-system-s390x
  qemu-system-sh4
  qemu-system-sh4
  qemu-system-sh4eb
  qemu-system-sh4eb
  qemu-system-sparc
  qemu-system-sparc
qemu-system-sparc64
qemu-system-unicore32
  qemu-system-x86_64
  qemu-system-x86_64
qemu-system-xtensa
qemu-system-xtensaeb


===Erweitern des zuweisbaren Rams (als ROOT)===
==Grundlegende Bedienung==
===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


Qemu vergibt Standard mäß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. Jedoch bewirkt diese Option alleine nichts, denn zuerst muss die Größe von /dev/shm verändert werden. Denn qemu greift auf /dev/shm zurück um Ramspeicher für das Gast OS zu erhalten.
Nun haben wir ein Festplatten-Image ''arch.img'' mit einer maximalen Größe von 4GByte. Da qcow2 ein [https://de.wikipedia.org/wiki/Sparse-Datei Sparse-Format] {{sprache|de}} ist, belegt es nur soviel Platz wie es braucht.


Dazu editieren wir die Folgende Zeile in unserer /etc/fstab wobei XXX für die gewünschte Größe in MegaByte steht.  
{{ic|qemu-img}} unterstützt viele weitere Formate. Unter anderem auch die Image- Formate anderer Virtualisierungslösungen, wie Vmware oder Virtualbox.
none                  /dev/shm      tmpfs    defaults,size=XXXM            0      0
Da QEMU mit '''qcow2''' oder '''raw''' am besten funktioniert, kann und sollte man die Fremdformate mit {{ic|qemu-img}} konvertieren.


Zur Erklärung, mit dieser Zeile wird Speicher vom type "tmpfs"  nach /dev/shm gemountet welcher Arbeitsspeicher ist, den Qemu dann verwenden kann. Dieser Speicher kann bei System überlast auch in den Swap wandern.
Mehr Informationen zu qemu-img findet man in der dazu gehörigen Man-Page.


Diese Zeile dient zum erneuten mounten von /dev/shm und erspart uns einen System Neustart :D
===Starten vom Installationsmedium===
  mount -o remount /dev/shm
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


===Erstellen einer virtuellen Festplatte===
Hierbei bedeutet ''-boot d'', dass wir vom virtuellem CD-ROM-Laufwerk starten wollen.
Für die Installation eine Betriebsystems erstellen wir zunächst eine virtuelle Festplatte.
qemu-img create -f qcow arch.qcow 4G
Nun haben wir ein Festplatten-Image ''arch.qcow'' mit einer maximalen Größe von 4GByte. Die Datei ist dabei nur so groß, wie der tatsächlich vom Gastsystem benötigte Platz.


===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 -cdrom arch-0.7.2-ftp.iso -boot d arch.qcow
Hierbei bedeutet ''-boot d'', daß wir vom virtuellem CD-ROM-Laufwerk starten wollen.
===Starten des Gastsystems===
===Starten des Gastsystems===
Das Gastsystem läßt sich einfach durch Angabe des Fesplatten-Abbildes starten:
Das Gastsystem lässt sich einfach durch Angabe des Festplatten-Abbildes starten:
  qemu arch.qcow
  $ qemu-system-* arch.img
mit UEFI
$ qemu-system-x86_64 -enable-kvm -bios /usr/share/ovmf/ovmf_x64.bin arch.img
mit UEFI und EFI-Eintragungen mit efistub oder rEFind
$ cp /usr/share/ovmf/ovmf_x64.bin arch_x64.bin
$ qemu-system-x86_64 -enable-kvm -pflash arch_x64.bin arch.img
 
Bei mehreren Festplatten wird die {{ic|-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 {{ic|-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.
 
==Weiterführende Themen==
===Tiefergehende 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 die 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 Peripherie===
Es gibt verschiedene Möglichkeiten reale oder virtuelle USB Geräte, wie Speichersticks oder Abbilder ebensolcher, an die VM weiterzureichen. Dies kann durch Kommandozeilen Optionen oder dem QEMU-Monitor erreicht werden.
Eine wichtige Voraussetzung ist, dass die Medien, die eingebunden werden sollen, nicht im Host-System eingebunden sein dürfen.
Desweiteren benötigt man die ''VendorID'' und die ''ProductID'' des Gerätes. Diese bekommt man mit {{ic|lsusb}}.
 
$ lsusb
(...)
Bus 001 Device 005: ID 0c76:0005 JMTek, LLC. Transcend Flash disk
(...)
Die VendorID ist ''0c76'' und die ProduktID ''0005''
 
Soll der Stick gleich beim Starten des Gast-Systems eingebunden werden, geht man wie folgt vor:
$ qemu-system-* -hda <Image> -usb -usbdevice host:<VendorID>:<ProductID>
Die {{ic|-usb}} Option startet den USB-Treiber, da dieser noch nicht standardmäßig geladen wird. Nachfolgend wird das Device angegeben.
Möchte man ein Abbild einhängen, sieht dies so aus:
$ qemu-system-* -hda <Image> -usb -usbdevice disk:Stick.img
 
Möchte man im laufenden Betrieb einen USB-Stick einbinden oder auswerfen benutzt man den QEMU-Monitor.
Dort erhält man mit
(qemu) info usb
Auskünfte über vorhandene USB-Geräte. Unter anderem die Device-ID, wenn man ein Gerät aushängen möchte.
Benötigt man die IDs vom Stick, muss man die VM nicht verlassen:
(qemu) info usbhost
Damit werden einem dieselben Informationen geliefert wie mit {{ic|lsusb}}.
Den entsprechenden Stick hängt man 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.
 
===Netzwerk===
====Allgemeines====
Möchte man im Gast-System Netzwerkzugang benötigt man Netzwerkkarten. Diese werden mit {{ic|-net nic}} hinzugefügt. Für mehrere Karten, gibt man diese Option mehrfach an.
Kombinieren kann man dies mit {{ic|-net user}}. Dadurch wird ein virtuelles Netzwerk ohne Admin-Rechte im Host-Rechner gestartet.
Dieses hat standardmäßig folgende Daten:
 
Virtuelles Netzwerk (10.0.2.0) mit Firewall (Blockiert ICMP(ping, etc), jeglichen Zugriffe von außen in die VM)
DHCP-Server (10.0.2.2) welcher dem Gast die IP 10.0.2.15 zuweist.
Gateway (10.0.2.2)
Unterstützt das Gast-System DHCP braucht man nichts weiter einzurichten. Ansonsten bedient man sich der Angaben um eine Verbindung nach außen herzustellen.
 
Standardmäßig wird eine Netzwerkkarte plus Netzwerk im Usermode emuliert, weswegen man diese Kombination von Optionen nicht anzugeben braucht. Möchte man kein Netzwerk haben gibt man {{ic|-net none}} an.
 
Vollständigkeitshalber sei erwähnt, dass man alle Werte anpassen kann.
-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
Welche Netzwerkkartenmodelle verfügbar sind findet man mit
$ qemu-system-* -net nic,model=?
heraus. Es kann unter Umständen vorkommen, dass die Standard-Netzwerkkarte nicht vom Gast-System erkannt wird, weswegen man ein anderes Modell ausprobieren sollte.
 
====Vom Host in den Gast====
Bedingt durch die QEMU interne Firewall unterliegt das simulierte Netz gewissen Beschränkungen sicherheitstechnischer Art. So ist es zwar ohne weiteres möglich das Host-System vom Gast aus zu erreichen. Anders 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
 
==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


==Bedienung==
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.
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.
==Beschleunigung mit kqemu oder kvm==
Durch die Emulation einer vollständigen CPU arbeitet ein System in QEMU um Faktor 5 bis 20 langsamer als auf realer Hardware. Mit dem Kernel-Modul ''kqemu'' ist es möglich, ohne CPU-Emulation Code direkt auf der Host-CPU auszuführen. Laut Projekt liegt der Performance-Verlust dann bei maximal Faktor 2.


Alternativ ist in aktellen Kernel ab 2.6.20 mit den Modulen ''kvm-intel'' bzw ''kvm-amd'' bereits ein Beschleuniger für Prozessoren mit Virtualisierungsfunktionen vorhanden. Nach dem laden des passenden Moduls muss legendlich eine angepasste und im qemu-Paket bereits mitgelieferte Version von qemu ''qemu-kvm'' benutzt werden. Mehr Informationen zu KVM finden sich unter [http://kvm.qumranet.com/kvmwiki]
===Einsatz===
===Installation von kqemu===
Nachdem die passenden Kernelmodule geladen wurden, lässt sich die VM einfach mit
Das Paket ''kqemu'' kann einfach mit [[Pacman]] installiert werden:
  $ qemu-system-{i386,x86_64} -enable-kvm
pacman -Sy kqemu
  $ qemu-system-{i386,x86_64} -machine type=pc,accel=kvm
Wer nicht den Standard-Kernel einsetzt, muß eine entsprechend andere Version von ''kqemu'' wählen: z.B. ''kqemu-ck''. Nach der Installation sollte man noch folgende Zeile in ''/etc/modprobe.conf'' einfügen, um ''kqemu'' auch ohne ''root''-Rechte nutzen zu können.
starten.
options kqemu major=0
Nachdem das Modul mit ''modprobe kqemu'' geladen wurde, ist es auch schon einsatzbereit. Um dies bereits beim Systemstart zu laden, kann man ''kqemu'' in die [[rc.conf]] eintragen.


===Start mit kqemu===
==Manager & GUIs==
Ab sofort wird kqemu automatisch für Code im User-Mode genutzt. Soll zusätzlich auch Code im Kernel-Mode auf der Host-CPU ausgeführt werden, so muß man den Parameter ''-kernel-kqemu'' beim Start von qemu mit angeben. ''-no-kqemu'' deaktiviert den Einsatz von kqemu.  
libvirt/virsh: CLI Tool um Skripte besser anbringen zu können.


'''Vorsicht''': Das Modul ist noch in der Entwicklung und funktioniert mit manchen Gast-Systemen wie z.B. Windows 95 nicht im Kernel-Mode. Die Installation eines Betriebsystems sollte man besser ohne ''-kernel-kqemu'' machen.
virt-manager: Primär für Systemadmins


'''Hinweis für Arch64''': Auf einem 64-Bit-System muß ''qemu'' mit ''qemu-system-x86_64'' gestartet werden, um kqemu einzusetzen.
oVirt: Ähnlich wie virt-manager. Benötigt eine JRM


==nützliche Literatur==
gnome-boxes: Primär für casual Desktop User.
* [http://fabrice.bellard.free.fr/qemu/ Projektseite von QEMU]
 
* [http://www.linuxforen.de/forums/showthread.php?t=141201 Deutsches HOWTO von Stefan Becker]
kvm-tool: Basic CLI Tool. Aktuell eher Konzept und nicht sehr fortgeschritten
* [http://de.wikipedia.org/wiki/QEMU Wikipedia-Artikel]
 
[[Kategorie:Tipps und Tricks]]
qemulator bzw sein Nachfolger virtualbricks, qemu-launcher
[[Kategorie:Hardware]]
 
==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 {{ic|/dev/shm}}, welches Teil von {{ic|tmpfs}} ist. Dies bedeutet, dass {{ic|/dev/shm}} standardmäßig die Hälfte des physikalischen RAM zur Verfügung hat.
 
In Systemen wo es noch in der {{ic|/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 {{ic|/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.
 
==Weblinks==
* [http://wiki.qemu.org/Main_Page Projektseite und Wiki von QEMU] {{sprache|en}}
* [http://qemu-buch.de/de/index.php/Hauptseite Wikibook "QEMU und KVM"] {{sprache|de}}
* [http://www.linuxforen.de/forums/showthread.php?t=141201 Deutsches HOWTO von Stefan Becker] {{sprache|de}} (nicht top-aktuell)
* [https://de.wikipedia.org/wiki/QEMU Wikipedia-Artikel] {{sprache|de}}
* [http://www.linux-kvm.org/page/Main_Page KVM-Wiki] {{sprache|en}}
 
[[Kategorie:Virtualisierung]]
[[Kategorie:Unvollständig]]
[[Kategorie:Unvollständig]]
[[en:QEMU]]

Aktuelle Version vom 15. Juli 2019, 21:26 Uhr

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).

Windows XP unter QEMU

Installation

Das Programm ist als qemu in extra verfügbar, und kann von dort mittels Pacman installiert werden.

pacman -S qemu

Ü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

Grundlegende Bedienung

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 Festplatten-Abbildes starten:

$ qemu-system-* arch.img

mit UEFI

$ qemu-system-x86_64 -enable-kvm -bios /usr/share/ovmf/ovmf_x64.bin arch.img

mit UEFI und EFI-Eintragungen mit efistub oder rEFind

$ cp /usr/share/ovmf/ovmf_x64.bin arch_x64.bin
$ qemu-system-x86_64 -enable-kvm -pflash arch_x64.bin 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.

Weiterführende Themen

Tiefergehende 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 die 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 Peripherie

Es gibt verschiedene Möglichkeiten reale oder virtuelle USB Geräte, wie Speichersticks oder Abbilder ebensolcher, an die VM weiterzureichen. Dies kann durch Kommandozeilen Optionen oder dem QEMU-Monitor erreicht werden. Eine wichtige Voraussetzung ist, dass die Medien, die eingebunden werden sollen, nicht im Host-System eingebunden sein dürfen. Desweiteren benötigt man die VendorID und die ProductID des Gerätes. Diese bekommt man mit lsusb.

$ lsusb
(...)
Bus 001 Device 005: ID 0c76:0005 JMTek, LLC. Transcend Flash disk
(...)

Die VendorID ist 0c76 und die ProduktID 0005

Soll der Stick gleich beim Starten des Gast-Systems eingebunden werden, geht man wie folgt vor:

$ qemu-system-* -hda <Image> -usb -usbdevice host:<VendorID>:<ProductID>

Die -usb Option startet den USB-Treiber, da dieser noch nicht standardmäßig geladen wird. Nachfolgend wird das Device angegeben. Möchte man ein Abbild einhängen, sieht dies so aus:

$ qemu-system-* -hda <Image> -usb -usbdevice disk:Stick.img

Möchte man im laufenden Betrieb einen USB-Stick einbinden oder auswerfen benutzt man den QEMU-Monitor. Dort erhält man mit

(qemu) info usb

Auskünfte über vorhandene USB-Geräte. Unter anderem die Device-ID, wenn man ein Gerät aushängen möchte. Benötigt man die IDs vom Stick, muss man die VM nicht verlassen:

(qemu) info usbhost

Damit werden einem dieselben Informationen geliefert wie mit lsusb. Den entsprechenden Stick hängt man 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.

Netzwerk

Allgemeines

Möchte man im Gast-System Netzwerkzugang benötigt man Netzwerkkarten. Diese werden mit -net nic hinzugefügt. Für mehrere Karten, gibt man diese Option mehrfach an. Kombinieren kann man dies mit -net user. Dadurch wird ein virtuelles Netzwerk ohne Admin-Rechte im Host-Rechner gestartet. Dieses hat standardmäßig folgende Daten:

Virtuelles Netzwerk (10.0.2.0) mit Firewall (Blockiert ICMP(ping, etc), jeglichen Zugriffe von außen in die VM)
DHCP-Server (10.0.2.2) welcher dem Gast die IP 10.0.2.15 zuweist.
Gateway (10.0.2.2)

Unterstützt das Gast-System DHCP braucht man nichts weiter einzurichten. Ansonsten bedient man sich der Angaben um eine Verbindung nach außen herzustellen.

Standardmäßig wird eine Netzwerkkarte plus Netzwerk im Usermode emuliert, weswegen man diese Kombination von Optionen nicht anzugeben braucht. Möchte man kein Netzwerk haben gibt man -net none an.

Vollständigkeitshalber sei erwähnt, dass man alle Werte anpassen kann.

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]

Welche Netzwerkkartenmodelle verfügbar sind findet man mit

$ qemu-system-* -net nic,model=?

heraus. Es kann unter Umständen vorkommen, dass die Standard-Netzwerkkarte nicht vom Gast-System erkannt wird, weswegen man ein anderes Modell ausprobieren sollte.

Vom Host in den Gast

Bedingt durch die QEMU interne Firewall unterliegt das simulierte Netz gewissen Beschränkungen sicherheitstechnischer Art. So ist es zwar ohne weiteres möglich das Host-System vom Gast aus zu erreichen. Anders 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

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.

Manager & GUIs

libvirt/virsh: CLI Tool um Skripte besser anbringen zu können.

virt-manager: Primär für Systemadmins

oVirt: Ähnlich wie virt-manager. Benötigt eine JRM

gnome-boxes: Primär für casual Desktop User.

kvm-tool: Basic CLI Tool. Aktuell eher Konzept und nicht sehr fortgeschritten

qemulator bzw sein Nachfolger virtualbricks, qemu-launcher

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.

Weblinks