ubuntuusers.de » Wiki » QEMU

QEMU

QEMU {en} ist ein freier Emulator und Virtualisierer. Mit ihm ist es möglich, ein anderes Betriebssystem in einem Fenster zu booten und so zu benutzen, als sei es normal gestartet worden. Eine grundsätzliche Einführung zu diesem Thema findet man im Artikel Virtualisierung.

Einige Merkmale von QEMU sind:

  • läuft in Kombination mit KVM fast mit nativer Geschwindigkeit

  • kann bis zu vier virtuelle Festplatten einbinden

  • man benötigt für den Gast keine Gasterweiterungen (wie bei VirtualBox oder VMware notwendig)

  • sehr viele Optionen zum Starten des Gastsystems, wie z.B. Multiprozessor-Emulation auch bei Einprozessor-Systemen

  • kann auch andere Prozessorarchitekturen wie z.B. PowerPC oder ARM emulieren

QEMU ist auch für andere Plattformen {en} wie Windows und MacOS erhältlich.

Installation

QEMU installieren

Man muss bis einschließlich Jaunty 9.04 lediglich das folgende Paket installieren [1]:

  • qemu (universe)

Ab Karmic 9.10 wird QEMU in Kombination mit KVM „geliefert“, das Paket heißt:

  • qemu-kvm

Dieses Paket enthält allerdings „nur“ die Emulation von x86 (32 + 64 bit) Maschinen. Möchte man andere Hardware-Plattformen emulieren, so braucht man auch das Paket

  • qemu-kvm-extras

Grafische Oberflächen für QEMU

Dieser Artikel beschreibt die Einrichtung und Startparameter für QEMU ausschließlich über ein Terminal[3]. Der Vollständigkeit halber seien hier aber noch einige grafische Programme für QEMU aufgeführt, die den Einstieg in QEMU wesentlich erleichtern.

Für GNOME:

  • qemu-launcher (universe)

  • qemulator (universe)

  • qemuctl (universe)

  • virt-manager

Für KDE4:

  • qtemu (universe) - Ab Kubuntu Hardy Heron (mit KDE4)

  • aqemu (universe) - Ab Kubuntu Lucid Lynx

Wiki/Icons/develop.png

Geschwindigkeit

Um die Geschwindigkeit des Gastsystems zu erhöhen, gibt es zwei Möglichkeiten:

  1. Hardwarevirtualisierung: Hierbei kommuniziert QEMU direkt mit dem Kernel, so dass das Gastsystem annähernd mit der Geschwindigkeit des Wirtssystems läuft. Wie man herausfindet, ob der Prozessor Hardwarevirtualisierung unterstützt, steht im Artikel KVM.

    Hinweis:

    Wer das Paket qemu-kvm installiert hat, kann anders als im Artikel KVM beschrieben QEMU einfach über den Befehl "qemu [OPTIONEN]" starten und muss nicht die Variante "kvm [OPTIONEN]" benutzen. Allerdings kann es dann Probleme mit einem 64 Bit Gast-Betriebssystem geben.

  2. Unterstützt der Prozessor keine Hardwarevirtualisierung kann kqemu - zumindest bis Ubuntu 9.04 Jaunty - als Beschleuniger genutzt werden. Hinweise dazu findet man unter QEMU/kqemu.

Wiki/Icons/download_manager.png

Installation eines Betriebssystems

Alle folgenden Befehle werden in einem Terminal [3] eingegeben.

Virtuelle Festplatte einrichten

Um ein Betriebssystem in einer Virtuellen Maschine installieren zu können, muss als erstes der Container (eine virtuelle Festplatte, angelegt als Datei) erstellt werden:

qemu-img create BOOTSYSTEM.img 10G 

Anstatt BOOTSYSTEM sollte man einen geeigneten Namen wählen. In diesem Fall erstellt man einen 10 GB großen Container im raw-Format. Man kann die Größe des Containers auch in MB angeben, also bezogen auf das obige Beispiel 10000M statt 10G.

Mit diesem Befehl wird direkt ein Container der vollen Größe angelegt, d.h. die virtuelle Festplatte belegt unabhängig von der Belegung immer 10 GB. Möchte man, dass der Container dynamisch mit wächst (bzw. schrumpft), so verwendet man besser das Format "qcow2". Dazu ist die Option -f qcow2 notwendig:

qemu-img create -f qcow2 BOOTSYSTEM.img 10G 

Der "leere" Container ist dann nur wenige 100 KB groß, wird aber dynamisch angepasst.

Installation von CD oder CD-Image

Wenn der Container erstellt ist, kann man nun ein Betriebssystem darin installieren. Es sollte dabei von vornherein bedacht werden, welche Speicheranforderungen das zu installierende System hat. Entsprechend wird QEMU mit der Option -m SPEICHERGRÖẞE gestartet. Richtwerte können der Tabelle in Gastsystem entnommen werden.

Weitere Hinweise zur Installation verschiedener Windowsversionen stehen im Artikel QEMU/Windows installieren.

Start des Installationsvorgangs mittels CD-ROM-Laufwerk, es wird dem Gastsystem 256MB Speicher zur Verfügung gestellt:

qemu -hda BOOTSYSTEM.img -cdrom /dev/cdrom -boot d -m 256 

Das -boot d bedeutet, dass QEMU von CD-ROM booten soll.

Wenn die Installations-CD als ISO-Image vorliegt, geht das analog dazu:

qemu -hda BOOTSYSTEM.img -cdrom DATEINAME.iso -boot d -m 256 

Nach erfolgreicher Installation muss die Option -boot d weggelassen werden, damit anstatt vom CD-ROM-Laufwerk von der virtuellen Festplatte im Container gebootet wird.

Wiki/Icons/globe.png

QEMU Umgebung

Während das Betriebssystem installiert wird, sollte man sich mit der Umgebung von QEMU etwas vertraut machen.

Tastenkombinationen

Tastenkombination von QEMU
TastenErklärung
Strg + AltMaus aus dem QEMU-Fenster befreien
Strg + Alt + 2vom Gast in den QEMU-Monitor wechseln
Strg + Alt + 1vom QEMU-Monitor ins Gast-Betriebssystem wechseln
Strg + Alt + Fzwischen Fenster- und Vollbildmodus wechseln

QEMU-Monitor

Der Monitor von QEMU (manchmal auch QEMU-Konsole genannt) bietet eine Reihe von Möglichkeiten zur Verwaltung und Steuerung der virtuellen Maschine. So kann hierüber auch der Wechsel von CD-ROM-Medien oder Disketten erfolgen.

Einige davon sind:

Befehle für den QEMU-Monitor
BefehlErklärung
info GERÄTgibt Infos über das virtuelle Gerät aus; mögliche Geräte sind u.a. block (Festplatte[n], CD-ROM), snapshot, usb und network
change GERÄT GERÄTEDATEI Tauscht ein Wechselmedium (CD/DVD, Diskette) aus (siehe: Wechseldatenträger)
commitschreibt einen Snapshot, sofern QEMU mit der Option -snapshot gestartet wurde
screendump DATEIerstellt ein Bildschirmfoto, wobei das recht ungewöhnliche Dateiformat ppm verwendet wird. Beispiel: screendump BILDNAME.ppm
help [befehl]zeigt eine Hilfe für alle Befehle oder nur für den Befehl befehl

Eine vollständige Übersicht über die Befehle der QEMU-Konsole findet man im QEMU-KVM-Buch {de}.

Wechseldatenträger

QEMU kann während der Virtualisierung nicht automatisch feststellen, ob eine CD oder Diskette eingelegt oder gewechselt wurde. Dies wird über den QEMU-Monitor erledigt. Im QEMU-Monitor erkundigt man sich über den Befehl info block zuerst, welche Geräte angeschlossen sind und wie sie heißen:

info block
ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=0 drv=host_cdrom encrypted=0
ide0-hd0: type=hd removable=0 file=/PFAD/ZUM/CONTAINER.img ro=0 drv=qcow2 encrypted=0
... 

In diesem Beispiel heißt das CD-ROM-Gerät ide1-cd0 und die Gerätedatei /dev/cdrom. Entsprechend wird QEMU durch die Eingabe von

change ide1-cd0 /dev/cdrom 

mitgeteilt, dass eine CD eingelegt/gewechselt wurde, und man kann mit dem Gastsystem darauf zugreifen. Bei dem Wechsel von Disketten müssen die Optionen entsprechend angepasst werden.

Netzwerk

Hat man sein Netzwerk per DHCP konfiguriert, sollten Internet und Netzwerk automatisch funktionieren.

Wer sein Netzwerk per statischer IP-Adressierung konfiguriert hat, muss ein paar kleinere Einstellungen vornehmen, um dem Gast den Internetzugang zu ermöglichen.

Als erstes wird die Netzwerkkonfiguration des Wirtssystems angepasst. Dazu muss man eine Netzwerkbrücke erstellen, Näheres ist unter Netzwerkbrücke zu finden.

Nachdem die Netzwerkbrücke eingerichtet ist, startet man die VMs mit folgenden zusätzlichen Parametern:

qemu -hda image.img -boot c -net nic,macaddr=00:00:00:00:00:00 -net tap 

Bei macaddr muss eine gültige beliebige MAC-Adresse angegeben werden. Jede VM sollte mit einer anderen MAC-Adresse gestartet werden, da es sonst zu Problemen kommt. Jetzt kann man in den verschiedenen VMs ganz normal wie bei einem normalen Rechner das Netzwerk einrichten.

Wiki/Icons/home.png

Zugriff vom Gast auf bestehende Daten

QEMU kann, bis auf eine Ausnahme, nicht ohne weiteres auf Partitionen oder Verzeichnisse des Wirtssystems zugreifen. Um die Daten des Wirtssystems lesen zu können, bedarf es ein wenig Vorbereitung. Jede Methode hat ihre Vor- und Nachteile.

Partitions-Abbild

Per Shell/dd können ganze Partitionen in eine .img Datei kopiert und als zweite Festplatte in QEMU eingebunden werden:

qemu -hda BOOTSYSTEM.img -hdb PFAD/ZUR/PARTITIONSKOPIE.img -m 256 

Ausgesuchte Daten in einer Iso-Datei

Mit einem Brennprogramm können Verzeichnisse und Daten von verschiedenen Partitionen in einer ISO-Datei abgespeichert werden. Diese lässt sich als CD-ROM in QEMU einbinden:

qemu -hda BOOTSYSTEM.img -cdrom PFAD/ZUR/ISODATEI.iso -m 256 

Datenaustauschpartition

Es ist auch möglich, QEMU direkt mit der Angabe einer Partition zu starten. Diese Partition unterliegt allerdings gewissen Einschränkungen:

  1. Die Größe der Partition beträgt maximal 504MB

  2. Sie muss mit Fat16 formatiert sein

Eingebunden wird sie beim Start von QEMU mit:

qemu -hda BOOTSYSTEM.img -hdb fat:EINHÄNGEPUNKT -m 256 

Für einen (experimentellen) schreibenden Zugriff siehe die QEMU Dokumentation {en}.

Zwei Probleme können dabei auftreten (Wirt: Ubuntu 8.04, Gast: Ubuntu 8.04):

  1. Änderung an den Dateien im Wirtssystem wurden erst nach einem unmount und einem erneuten mount sichtbar.

  2. Es trat der Fehler "exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2" auf und führte zum Einfrieren des Gastsystems. Die Lösung ist im Bugreport #104581 beschrieben. Danach muss die Platte aber mit /dev/hdb1 eingebunden werden.

Per Samba

Ist im Host-System ein Sambaserver installiert, kann man mit QEMU auch auf dessen Freigaben per Netzwerk zugreifen:

  1. Freigaben im Host-System einrichten. Sie müssen mit Lese- und Schreibrecht versehen sein.

  2. Beim Aufruf von QEMU muss zusätzlich die Option -net nic,vlan=0 -net user,smb=/smbserver/ verwendet werden:

    qemu -hda BOOTSYSTEM.img -m 256 -net nic,vlan=0 -net user,smb=/smbserver/ 
  3. Der Zugriff vom Gast erfolgt über die URL 10.0.2.2:

    1. Windows: In der Adressleiste (z.B. vom Arbeitsplatz) einfach die URL \\10.0.2.2 eingeben

    2. Ubuntu: In der Adressleiste (z.B. von Nautilus oder Dolphin) einfach die URL smb://10.0.2.2 eingeben

samba_win.png
Windows

samba_ubuntu.png
Ubuntu

Wiki/Icons/settings.png

Optionen

Startoptionen

Unter den zahlreichen Startoptionen können besonders folgende nützlich sein:

Optionen von QEMU
OptionErklärung
-hda Datei gibt das Image der primären Festplatte an. Weitere Platten können mit -hdb, -hdc und -hdd angegeben werden.
-fda Datei gibt Diskettenlaufwerke an. Man kann das reale Diskettenlaufwerk verwenden, wenn man /dev/fd0 als Dateiname angibt.
-cdrom Datei gibt das zu verwendende CD-Laufwerk an. Es kann ein Gerät wie /dev/cdrom oder eine Imagedatei angegeben werden.
-boot Laufwerksbuchstabe gibt an, von welchem Laufwerk gestartet werden soll. a steht für Diskette, c für Festplatte, d für CD-ROM und n für einen Netzwerk-Boot
-m Speichergröße gibt den zu verwendenden Arbeisspeicher in MB an. Vorbereitung dazu s.o.
-usb USB wird mit emuliert bzw. die Schnittstellen des Wirts stehen zur Verfügung
-vga std es wird eine generische VGA Karte emuliert; diese Option wird nur benötigt, wenn die Auflösung >= 1280x1024 sein soll / muss
-soundhw KARTE es wird die Soundkarte KARTE emuliert; zur Auswahl stehen: sb16, es1370 und all
-smp X es werden X CPU in der virtuellen Maschine genutzt, die Anzahl der virtuellen CPUs kann höher sein als die der realen des Wirts
-kernel-kqemu Bewirkt eine massive Geschwindigkeitsverbesserung (benötigt korrekt konfiguriertes kqemu >=1.3.0preX und qemu >=0.8.1, siehe auch "Full Virtualization Mode" {en} ). Funktioniert aber nicht immer.
-vnc :X Die Ausgabe des Bildschirms erfolgt per VNC auf Display X und nicht auf den normalen Bildschirm des Wirts, Details siehe auch hier
-snapshot Dies bewirkt, dass Änderungen nicht in das Festplattenimage geschrieben, sondern in einer temporären Datei gespeichert werden. Erst mit den Tasten Strg + Alt + S oder dem Kommando commit in der QEMU-Konsole werden die Änderungen übernommen.
-k XX setzt das Tastaturlayout auf den angegebenen Wert XX z.B. -k de für deutsch, -k en für englisch, etc... (Hilfreich bei Problemen mit der Eingabe und Sonderzeichen in Verbindung mit VNC)
-redir tcp:X::Y Leitet die TCP-Verbindung von Port X des Wirtes auf den Port Y des Gastsystems um. D.h. -redir tcp:8008::80 macht einen Apache-Server (bei Standardkonfiguration) des Gastsystems unter http://localhost:8008 auf dem Wirt sichtbar. Oder -redir tcp:8022::22 erlaubt ssh-Zugriff (bei Standardkonfiguration) auf das Gastsystem vom Wirt via ssh -p 8022 localhost.

Dies ist nur ein (sehr) kleiner Ausschnitt der Optionen. Besonders im Bereich der Netzwerk-Optionen gibt es sehr viele Möglichkeiten. Eine vollständige Übersicht findet man in den Manpages oder auf der Doku-Seite {en} von QEMU.

Andere Architekturen emulieren

QEMU ist nicht auf die Virtualisierung / Emulation von x86 Prozessoren beschränkt, es können auch eine Vielzahl von anderen Architekturen emuliert werden. Welche dies aktuell sind kann man hier {en} nachschauen.

Die allgemeine Syntax ist

qemu-system-ARCHITEKTUR [OPTIONEN] 

wobei ARCHITEKTUR entsprechend ersetzt werden muss. Details zur emulierten Hardware und Nutzung findet man hier {en}.

Reine Prozessemulation

QEMU beherrscht auch die "reine" Prozessemulation, auch "User-Space-Emulation" genannt. D.h. dass anstatt eines kompletten Systems wird "nur" ein einzelnes Programm ("Binary") im Emulations-Modus ausgeführt. Die Prozess-Emulation für ein 32-bit i386 System wird z.B. mit folgendem Befehl aufgerufen:

qemu-i386 PROGRAMMNAME 

Die Emulation funktioniert natürlich nur, wenn das Programm keine weiteren Bibliotheken dynamisch nachlädt.

Außer der i386-Emulation beherrscht QEMU u.a. auch die Prozessemulation für SPARC, PPC, ARM und einige mehr. Detaillierte Informationen findet man in der QEMU-Dokumenation {en}.

Experten-Info:

Wer Wine unter einem 64bit-Betriebssystem mit QEMU emulieren will, sollte sich das ansehen: Wine HOWTO {en}

QEMU per VNC

Wie weiter oben bereits erwähnt kann man die virtuelle Maschine auch so starten, dass diese per VNC (und nicht über den lokalen Rechner) erreichbar ist, eben mit der Option -vnc X, wobei X das Display ist. Startet man QEMU also z.B. über

qemu -hda image.img -vnc :1 

so ist die virtuelle Maschine danach über einen VNC-Client via Port 5901 (5900 + Displaynummer) erreichbar.

Hinweis:

Die Verbindung läuft per Voreinstellung komplett unverschlüsselt und ohne Authentifizierung. Dies ist aber auch möglich; Details hierzu findet man an dieser Stelle {en} auf der QEMU Homepage.

QEMU-Festplattenimages unter Linux einbinden

Das Einbinden von QEMU-Images wird in der FAQ {en} mit einem Link auf DmUserspace {en} beantwortet. Damit lassen sich auch nur qcow-Partitionen mounten.

Alternativ über NBD mounten

Qemu bietet die Möglichkeit, die Images über das Netzwerk anzubieten, dass lässt sich aber auch prima missbrauchen ums sie auf dem eigenen Rechner einzubinden. Aber Achtung! das Image darf dabei nicht von Qemu oder einem anderen Programm in Benutzung sein.

Zuerst muss NBD geladen werden:

sudo modprobe nbd 

Sollte man sehr viele Partitionen im Image haben kann es nötig sein zusätzlich die Anzahl der Partitionen zu erhöhen:

sudo modprobe nbd max_part=63 

Jetzt wird das Image in eine Art Loopdevice gemapped, pfad/zu/qemu.img natürlich entsprechend anpassen und sollte /dev/nbd0 schon vergeben sein kann man auch diese Zahl anpassen.

sudo qemu-nbd --connect=/dev/nbd0 pfad/zu/qemu.img 

Mit folgendem Befehl kann man sich die Partitionen anzeigen lassen:

fdisk -l /dev/nbd0 

Und so mountet man das Image:

sudo mount /dev/nbd0p1 /mnt 

Wenn man fertig ist sollte man das Image wieder freigeben. Zahlen gegebenenfalls anpassen.

sudo umount /dev/nbd0p1
sudo qemu-nbd -d /dev/nbd0 

Wiki/Icons/hint.png

Problemlösungen

Virtuelle Maschine bekommt nicht genug RAM

Startet man QEMU mit der Option -m XXX aber die virtuelle Maschine bekommt trotzdem nicht genug Speicher, dann kann man in der /etc/fstab folgende Ergänzung vornehmen [4]:

# /dev/shm Vergrößern für Qemu
#
none            /dev/shm        tmpfs   defaults,size=528M

Hier steht nun "size=528M", weil das tmpfs immer etwas größer sein sollte, als der tatsächlich für den Gast benötigte RAM.

Ohne neu booten zu müssen, kann man das tmpfs gleich neu einbinden [3]:

sudo mount -o remount /dev/shm 

Wenn man nun QEMU startet, kann man mit dem Befehl

df|egrep 'shm|File' 

überprüfen, wie viel des virtuellen RAM genutzt wird.

Hinweis:

Man sollte darauf achten, dass man QEMU nicht mehr RAM zuweist als dem Wirt-Rechner, da QEMU dann instabil laufen könnte. Außerdem sollte man dem Wirt-System genügend RAM lassen, dass es noch flüssig läuft. Im Falle von Ubuntu bzw. Kubuntu sind dies 256 MB RAM, bei Xubuntu 192 MB.

Diese Revision wurde am 10. Juli 2010 um 08:44 Uhr von Oerb erstellt.
Dieser Seite wurden folgende Begriffe zugeordnet: Emulation und Virtualisierung, KVM

Passwort vergessen?