Qemu

QEMU ist eine virtuelle Maschine u. a. für die Betriebssysteme Linux, Windows, FreeBSD, NetBSD, OpenBSD und Mac OS X und wird u.a. von den Virtualisierungslösungen kvm und Xen (hier für die Vollvirtualisierung) benutzt.

Beschleunigungsmodul für QEMU unter GPL gestellt

Einige Merkmale von QEMU sind:

  • 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
  • läuft in Kombination mit KVM fast mit nativer Geschwindigkeit
  • kann auch andere Prozessorarchitekturen wie z.B. PowerPC oder ARM emulieren

Quelle dieses Artikels in großen Teilen der Qemu-Artikel von ubuntuusers.

QEMU installieren

Man muss lediglich das folgende Paket installieren:

  • qemu (universe)

Beschleuniger-Modul kqemu installieren

Falls KVM zum Start verwendet wird, bringt kqemu keinen Nutzen. Man sollte kqemu daher nur in Betracht ziehen, wenn die CPU keine Hardwarevirtualisierung unterstützt. Wie man prüft ob die eigene CPU Hardwarevirtualisierung unterstützt, kann man hier nachlesen.

Emulierte Anwendungen laufen immer langsamer als im nativen Betrieb. Um QEMU einen „Turbo“ zu spendieren, gibt es den „QEMU Accelerator“, auch kqemu genannt. Diese Erweiterung ist seit der Version 1.3.0pre10 unter der GPL lizenziert. Vorherige Versionen des Moduls dürfen trotzdem kostenlos genutzt werden. Durch die Verwendung von kqemu wird QEMU erst vom Emulator zum Virtualisierer, d.h. auch, dass das Betriebssystem in der virtuellen Maschine deutlich schneller läuft. Zur Nutzung des Moduls muss QEMU aus den Quellen kompiliert werden. Dies ist aber unter Verwendung des module-assistant recht einfach. Neben dem module-assistant benötigt man nur noch die Pakete

  • kqemu-common (universe)
  • kqemu-source (universe)

Dann kann man das Kernelmodul mit dem module-assistant erstellen und installieren.

sudo module-assistant prepare
sudo module-assistant auto-install kqemu

kqemu-Modul laden

Das Kernelmodul sollte mit einem zusätzlichen „major“-Parameter geladen werden.

sudo modprobe kqemu major=250

In den /var/log/messages sollte nun eine Erfolgsmeldung auftauchen.

System-Log anzeigen lassen mit:

tail /var/log/messages

Die Meldung heißt:

Jun 15 09:38:17 localhost kernel: KQEMU installed, max_instances=4 max_locked_mem=129560kB.

Eventuell erhält man beim Start von QEMU dennoch die Fehlermeldung:

Could not open '/dev/kqemu' - QEMU acceleration layer not activated

In diesem Fall muss man noch die zwei folgenden Befehle ausführen:

sudo mknod /dev/kqemu c 250 0 
sudo chmod 666 /dev/kqemu

Unterstützt der Prozessor Hardwarevirtualisierung und wird entsprechend das Kernelmodul kvm geladen, so wird diese automatisch genutzt. Eine Installation von kqemu ist dann nicht notwendig. Die virtuelle Maschine läuft dann annähernd mit der Geschwindigkeit des Wirtsystems. Weitere Informationen findet man im Artikel zu KVM.

QEMU wird über die Kommandozeile gestartet (sofern man keine grafische Oberfläche verwendet).

Die allgemeine Syntax lautet:

qemu [OPTONEN]

wobei man mindestens eine Option mitgeben muss, nämlich die eines Laufwerks, von dem QEMU booten soll. Also im einfachsten Fall mit einer virtuellen Festplatte lautet der Befehl

qemu -hda IMAGE.img

Dazu muss natürlich zuerst eine virtuelle Platte eingerichtet werden.

Virtuelle Festplatte einrichten

Zuerst muss man einmal ein Image für die Festplatte erstellen:

qemu-img create DATEINAME.img 10GB

In diesem Fall erstellt man ein 10 GB großes Festplattenimage. Man kann die Größe des Images auch in MB angeben, also bezogen auf das obige Beispiel „10000MB“ statt „10GB“.

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

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

Das „leere“ Image ist dann nur wenige 100 KB groß, wird aber dynamisch angepasst.

Installation von CD oder CD-Image

Wenn ein Festplatten-Image erstellt ist, kann man nun ein Betriebssystem installieren.

In diesem Fall wird das CD-ROM-Laufwerk als Laufwerk des emulierten PCs eingesetzt:

qemu -hda DATEINAME.img -cdrom /dev/cdrom -boot d

Das -boot d bedeutet, dass QEMU von CD-ROM starten soll, und ist eine kuriose Reminiszenz an die Windows-Laufwerksbuchstaben. Wenn man es weglässt, wird von der Festplatte gebootet (entspricht „boot -c“).

:!: Hinweis: Falls man Windows XP installieren will, sollte man aus Kompatibilitätsgründen darauf achten, QEMU für die Installation mit dem Parameter „-no-acpi“ zu starten. Ansonsten ist die kqemu-Beschleunigung sehr instabil (Quelle } ).

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

qemu -hda DATEINAME.img -cdrom DATEINAME.iso -boot d

Optionen

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

Optionen von QEMU
Option Erklä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 „e“ 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
„-std-vga“ es wird eine generische VGA Karte emuliert; diese Option wird nur benötigt, wenn die Auflösung >= 1280×1024 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 virtuelle 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" ). 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.
„-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“.

Per Voreinstellung verwendet die virtuelle Maschine (unter Ubuntu) „NAT“ für die virtuelle Netzwerkschnittstelle, d.h. die Netzwerk- / Internetverbindung wird an die virtuelle Maschine „durchgereicht“.

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 von QEMU.

Tastenkombinationen

Des Weiteren sind noch einige Tastenkombination für den Betrieb von QEMU nützlich bzw. notwendig:

Tastenkombination von QEMU
Tasten Erklärung
Strg + Alt Maus aus dem QEMU-Fenster befreien
Strg + Alt + 2 vom Gast in den QEMU-Monitor wechseln
Strg + Alt + 1 von Konsole ins Gast-Betriebssystem wechseln
Strg + Alt + F zwischen 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.

Einige davon sind:

Befehle für den QEMU-Monitor
Befehl Erklärung
„info GERÄT“ gibt Infos über das virtuelle Gerät aus; mögliche Geräte sind u.a. „snapshot“, „usb“ und „network“
„commit“ schreibt einen Snapshot, sofern QEMU mit der Option „-snapshot“ gestartet wurde
„screendump DATEI“ erstellt ein Bildschirmfoto, wobei das recht ungewöhnliche Dateiformat ppm verwendet wird

Eine vollständige Übersicht über die Befehle der QEMU-Konsole findet man im QEMU-Handbuch

Schnelleinstieg: PowerPC emulieren

  1. Qemu installieren:
    apt-get install qemu
  2. Image erstellen:
    qemu-img create -f qcow2 debian_powerpc.qcow2 2G
  3. Debian-CD für PPC runterladen:
    wget http://cdimage.debian.org/cdimage/archive/5.0.8/powerpc/iso-cd/debian-508-powerpc-netinst.iso
  4. Debian Installieren:
    qemu-system-ppc -hda debian_powerpc.qcow2 -boot d -cdrom debian-508-powerpc-netinst.iso
  5. nach der Installation kann das System ohne ISO-CD-ROM gestartet werden:
    qemu-system-ppc -hda debian_powerpc.qcow2

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, 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 auf QEMU Homepage.

Screenshots vom emulierten System machen

QEMU kann Screenshots erstellen: Dazu mit Alt + Strg + 2 in die QEMU-Konsole wechseln und dort „screendump bildname.ppm“ eintippen.

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

Die allgemeine Syntax ist

qemu-system-ARCHITEKTUR [OPTIONEN]

wobei „ARCHITEKTUR“ entsprechend ersetzt werden muss. Details zur emulierten Hardware und Nutzung findet man hier.

Reine Prozessoremulation

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.

Experten-Info:

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

QEMU-Festplattenimages unter Linux einbinden

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

Um QEMU unter GNOME zu konfigurieren, gibt es drei GUI-Tools in den offiziellen Paketquellen:

  • qemu-launcher (universe, erst ab Feisty verfügbar)
  • qemulator (universe)
  • qemuctl (universe, erst ab Feisty verfügbar)

Für alle anderen Ubuntu-Versionen ist das Programm hier verfügbar: Qemu-Launcher, das Programm qemuctl erhält man auf dieser Homepage. Bei dem Programm Qemulator gibt es jedoch Probleme mit Sonderzeichen und Leerzeichen im Dateiname der Images.

Ein Java-GUI gibt es hier: JQEMU

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:

# /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:

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.

Windows installieren

Informationen hierzu findet man im Artikel QEMU/Windows installieren.

Booten von LiveCD funktioniert nicht

Unter Ubuntu 7.10 Gutsy Gibbon kann es u. U. dazu kommen, dass LiveCD's den Bootvorgang mit einer Fehlermeldung abbrechen. Hierfür ist die BIOS-Emulation von qemu verantwortlich. (Mehr Informationen dazu unter 123185)

Die Installation von bochsbios_2.3.6-2ubuntu1_all.deb könnte dieses Problem für einige LiveCD's beheben.

:!: Fremdpakete können das System gefährden.