Inhaltsverzeichnis
Zugriff auf Speichermedien
Die Namen und Zustände der Speichermedien listet im QEMU-Monitor der Befehl info block auf. Hier ein Beispiel. Die erste Spalte zeigt den Namen des jeweiligen Speichermediums an. Über diesen Namen wird das Speichermedium im QEMU-Monitor angesprochen. Mit ide-hd und ide-cd beziehungsweise scsi-hd und scsi-cd werden IDE- und SCSI-Festplatten- und DVD-/CD-Laufwerke emuliert.
(qemu) info block
ide0-hd0: type=hd removable=0 file=os2w4.img ro=0 drv=qcow2\
floppy0: type=floppy removable=1 locked=0 file=d.dsk ro=1 drv=raw\
ide1-cd0: type=cdrom removable=1 locked=0 file=os2-warp ro=0 drv=raw\
sd0: type=floppy removable=1 locked=0 [not inserted]
Festplatten
Zugriffe auf (virtuelle) Festplatten erfolgen über die Optionen -hda file, -hdb file, -hdc file, -hdd file und -drive. Dabei ist file meist eine Image-Datei, wie das nachfolgende Beispiel zeigt:
Host ~$ qemu -hda Platte.img -hdb zweite-Platte.img
Bei nur einer virtuellen Festplatte kann die Option -hda weggelassen werden.
Host ~$ qemu Platte.img
Es ist möglich, eine Festplatte des Host-Systems dem Gast-System zur Verfügung zu stellen. Dazu ist für file der vollständige Pfad zum Device anzugeben. Unter unix-artigen Systemen (BSD, Mac OS, Solaris, Linux und andere) befinden sich die passenden Device-Dateien im Verzeichnis /dev. Die konkreten Namen der Geräte sind allerdings auf den Systemen unterschiedlich. Ist der Host ein Linux-System, sind dies beispielsweise /dev/hda (erste Platte am IDE-Controller), /dev/sda (erste Platte am SCSI-Controller oder SATA-Controller). Mac OS X spricht die erste Platte mit /dev/disk0 an. Unter Microsoft Windows-Versionen werden reale Festplatten mit der Syntax \\.\PhysicalDriveN eingebunden, wobei N die Nummer des Laufwerkes ist (0 ist die erste Festplatte).
Bei der Installation von Microsoft Windows 2000 als Gast-Betriebssystem ist die Option -win2k-hack notwendig, da dessen Bug die Festplatte bei der Installation als voll kennzeichnet. Nach der Installation ist diese Option zu entfernen.
Bei betagten Festplatten, deren Speicherkapazität bis maximal wenige hundert Megabyte umfasst, ist die Option -hdachs c,h,s,[,t] interessant. Sie definiert die physikalische Geometrie der ersten virtuellen Festplatte. Es lassen sich die Anzahl der Zylinder (1 ⇐ c ⇐ 16383), der Köpfe (1 ⇐ h ⇐ 16) und der Sektoren (1 ⇐ s ⇐ 63) festlegen. Optional ist auch der BIOS-Translation-Modus (t=none, lba oder auto) einstellbar. Die BIOS-Translation wurde zur Überwindung der 524-MByte-Grenze bei älteren Festplatten und älteren BIOS-Versionen verwendet.
CD-/DVD-ROMs
Zugriffe auf (virtuelle) CD-/DVDs ermöglichen die Optionen -cdrom file und -drive, wobei file eine Image-Datei oder ein reales Device ist.
Host ~$ qemu -hda Platte.img -cdrom cd.iso
Um ein CD/DVD-Device des Host-Systems dem Gast-System zur Verfügung zu stellen, ist für file der vollständige Pfad zum CD/DVD-Device anzugeben. Ist der Host ein Linux-System, sind dies beispielsweise /dev/cdrom oder /dev/dvd. Das folgende Beispiel bootet ein System von einer eingelegten DVD.
Host ~$ qemu -cdrom /dev/dvd
Unter Microsoft Windows werden CD-/DVD-Laufwerke des Host-Systems durch Angabe ihrer Laufwerksbuchstaben eingebunden. Dies ist für Windows-Nutzer sicherlich vertrauter als die Linux-Schreibweise, die aber auch gültig ist. Folgende Eingabe bootet eine CD/DVD vom Laufwerk D:.
Host C:\> qemu -L . -cdrom d:
Um eine CD/DVD zu entfernen oder auszutauschen, wechselt man mit [Strg]+[Alt]+[2] in den QEMU-Monitor. Zunächst ist der Name des CD/DVD-Laufwerkes zu ermitteln.
(qemu) info block
ide1-cd0: type=cdrom removable=1 locked=0 file=os2-warp ro=0 drv=raw
In diesem Beispiel wird das CD/DVD-Laufwerk mit ide1-cd0 bezeichnet. Eine CD/DVD gibt der Befehl eject frei.
(qemu) eject ide1-cd0
Eine CD/DVD wechselt man mit dem Befehl change. In diesem Beispiel wird eine reale CD unter Linux ausgetauscht.
(qemu) change ide1-cd0 /dev/cdrom
Wurde QEMU/KVM mit der Unterstützung für curl kompiliert, ist der Zugriff über das HTTP-Protokoll möglich. In diesem Beispiel wird die Instanz mit dem CD-Image von www.netboot.me per HTTP gestartet. Damit lassen sich diverse Linux- und BSD-Distributionen installieren.
Host ~$ qemu -cdrom http://static.netboot.me/gpxe/netbootme.iso
Disketten
Zugriffe auf (virtuelle) Disketten ermöglichen die Optionen -fda file (Laufwerk A), -fdb file (Laufwerk B) und -drive. Das folgende Beispiel arbeitet mit einem Disketten-Image.
Host ~$ qemu -fda Diskette.img
Unter Linux werden reale Diskettenlaufwerke über ihre Devices (/dev/fd0, /dev/fd1) eingebunden. Nachfolgend wird der Boot-Vorgang vom ersten Disketten-Laufwerk eingeleitet.
Host ~$ qemu -fda /dev/fd0
Um eine Diskette zu entfernen oder auszutauschen, wechselt man mit [Strg]+[Alt]+[2] in den QEMU-Monitor. Zunächst ist der Name des Laufwerkes zu ermitteln.
(qemu) info block
floppy0: type=floppy removable=1 locked=0 file=d.dsk ro=1 drv=raw
In diesem Beispiel wird das Disketten-Laufwerk mit floppy0 bezeichnet. Eine Diskette gibt der Befehl eject frei.
(qemu) eject floppy0
Gewechselt wird eine Diskette mit dem Befehl change. In diesem Beispiel wird eine reale Diskette unter Linux ausgetauscht.
(qemu) change floppy0 /dev/fd0
Wurde QEMU/KVM mit der Unterstützung für curl kompiliert, ist der Zugriff über das HTTP-Protokoll möglich. In diesem Beispiel wird die Instanz mit dem Disketten-Image von www.netboot.me per HTTP gestartet. Damit lassen sich diverse Linux- und BSD-Distributionen installieren. Da über HTTP kein schreibender Zugriff möglich ist, ist ein Schreibschutz notwendig (siehe unten).
Host ~$ qemu -fda http://static.netboot.me/gpxe/netbootme.dsk \
-snapshot
Bei den heute verwendeten Formaten, wie das mit MS-DOS eingeführte FAT-Dateisystem, ist der Master Boot Record (MBR) für BIOS-basierte Computer der x86-Architektur der erste Datenblock (512 Byte). Gekennzeichnet ist der MBR durch die Signatur 0xAA55. Ist diese Signatur vorhanden, geht das BIOS davon aus, dass es sich um einen gültigen MBR handelt. Wird die Signatur nicht gefunden, wird der Boot-Vorgang abgebrochen und eine Fehlermeldung, wie Non-System oder Non-Bootable Disk, erscheint. Bei älteren Disketten-Formaten war diese Signatur noch unbekannt. Diese Disketten werden dadurch als nicht bootfähig erkannt, obwohl sie ein Betriebssystem enthalten können. Um trotzdem ein Booten zu ermöglichen, ist die Option -no-fd-bootchk anzuwenden. Sie deaktiviert den Boot-Signaturtest. Damit lässt sich eine CP/M-86-Diskette booten.
Host ~$ wget http://www.gaby.de/ftp/pub/cpm/sysdisks/cpm86/86raw144.zip
Host ~$ unzip 86raw144.zip
Host ~$ qemu -fda 144cpm86.img -no-fd-bootchk \
-rtc base=localtime -m 2
Memory-Cards und Flash-Memory
Mit der Option -sd file wird eine Secure-Digital-Card emuliert. Die angegebene Datei file dient als Secure-Digital-Card-Image.
Host ~$ qemu Platte.img -sd file
Mit der Option -mtdblock file wird ein On-Board-Flash-Memory emuliert. Die angegebene Datei file dient als On-Board-Flash-Memory-Image.
Host ~$ qemu Platte.img -mtdblock file
Mit der Option -pflash file wird eine Parallel-Flash emuliert. Die angegebene Datei file dient als Parallel-Flash-Image.
Host ~$ qemu-system-arm Platte.img -pflash file
Boot-Reihenfolge
Die Option -boot regelt von welchem Device beziehungsweise Image der Boot-Vorgang eingeleitet wird. Sollen nacheinander mehrere Boot-Medien verwendet werden, so ist der Parameter order=drives anzuwenden. Im folgenden Beispiel wird erst versucht von der Diskette zu booten. Ist dies nicht möglich, wird versucht von CD/DVD-ROM zu booten. Schlägt auch dies fehl, wird der Boot-Vorgang von der Festplatte gestartet.
Host ~$ qemu -fda Diskette.img -hda Platte.img -cdrom cd.iso \
-boot order=adc
Mit dem Parameter once=drives wird nur beim ersten Start versucht, von diesem Medium zu booten. Im folgenden Beispiel wird erst der Boot-Vorgang von dem CD/DVD-Laufwerk eingeleitet. Nach dem Neustart des Gast-Systems wird dann die Festplatte als Boot-Medium verwendet.
Host ~$ qemu -hda Platte.img -cdrom cd.iso -boot once=d
Ein Boot-Menü zur Auswahl des Boot-Devices wird mit dem Parameter menu=on aktiviert. Dieses Menü wird in der startenden Instanz mit der Taste [F12] aufgerufen.
Host ~$ qemu -hda Platte.img -cdrom cd.iso -boot menu=on
In älteren QEMU-Versionen folgte der Option -boot nur ein Buchstabe (a, c, d, n, o oder p). Wird nach dieser Option ein a angegeben, wird versucht das Betriebssystem von dem ersten Disketten-Laufwerk zu starten. Mit b wird das zweite Disketten-Laufwerk angegeben.
Host ~$ qemu -fda Diskette.img -hda Platte.img -boot a
Ein c definiert die erste Festplatte als Boot-Medium (Default). Der Buchstabe d aktiviert das CD-/DVD-Laufwerk. Mit den Buchstaben n, o oder p wird das Booten über Netzwerk konfiguriert (siehe Abschnitt Netzwerkdienste). Hier ein Beispiel für das Booten von der Festplatte.
Host ~$ qemu -hda Platte.img -cdrom cd.iso -boot c
Im QEMU-Monitor ändert man eine neue Boot-Reihenfolge mit dem Befehl boot_set. Damit überschreibt man die Werte von -boot. Die Werte entsprechen den Parametern von -boot, können sich aber nach Maschinentyp unterscheiden. Im folgenden Beispiel wird c als Boot-Medium vorgegeben.
(qemu) boot_set c
Schreibschutz
Speichermedien können vor Änderungen geschützt werden. Das veranlasst die Option -snapshot. Der Name der Option -snapshot ist irreführend. Mit dieser Option wird keine Momentaufnahme des Systems erzeugt, sondern es werden alle Medien mit einem Schreibschutz versehen. Momentaufnahmen des Systems werden dagegen mit VM-Snapshots angelegt. Bei der Anwendung von -snapshot werden die Änderungen, die eigentlich auf die Speichermedien geschrieben werden, in temporäre Dateien gespeichert. Beispiel:
Host ~$ qemu Platte.img -snapshot
Mit [Strg]+[Alt]+[s] ist jederzeit ein Speichern der Änderungen auf die Datenträger möglich. Ebenso speichert der Befehl commit im QEMU-Monitor die Änderungen. Der Befehl commit all bewirkt, dass alle Devices gesichert werden. Dies entspricht der Tastenkombination [Strg]+[Alt]+[s].
(qemu) commit all
Der folgende Befehl speichert nur auf die erste Festplatte (Device hda).
(qemu) commit hda
Definition von Laufwerken mit der Option -drive
Ab der Version 0.9.1 bietet QEMU mit der Option -drive flexiblere Möglichkeiten zur Definition von virtuellen Laufwerken.
-drive [file=file][,if=type][,bus=n][,unit=m][,media=d][,index=i] \
[,cyls=c,heads=h,secs=s[,trans=t]][,snapshot=on|off] \
[,cache=writethrough|writeback|unsafe|none][,format=f] \
[,serial=s][,addr=A][,id=name][,aio=threads|native] \
[,werror=action[,rerror=action][,readonly=on|off]
Mögliche Optionen sind:
file=file
Diese Option definiert, welches Image für dieses Laufwerk verwendet wird. Enthält der Dateiname ein Komma, so ist dieses zu verdoppeln.
if=type
Diese Option definiert mit welcher Art des Interfaces das Laufwerk verbunden ist. Möglich sind: ide, scsi, sd (Secure-Digital-Card), mtd (On-Board-Flash-Memory), floppy, pflash (Parallel-Flash), virtio (Paravirtualisierte Block-Device).
bus=n,unit=m
Diese Optionen definieren durch die Angabe der Bus-Nummer und der Unit-ID wie das Laufwerk verbunden ist.
media=d
Diese Option definiert den Media-Typ (disk oder cdrom).
index=i
Diese Option definiert an welchen Connector eines Interfaces das Laufwerk angeschlossen ist. Mit index wird die Nummer des Connectors angegeben.
cyls=c,heads=h,secs=s[,trans=t]
Diese Optionen haben die gleichen Bedeutungen wie bei -hdachs.
snapshot=on|off
Die Option kann off oder on gesetzt werden und erlaubt die (De-)Aktivierung der Snapshot-Funktion für das angegebene Laufwerk (siehe Option -snapshot).
cache=none|writethrough|writeback|unsafe
Die Option cache kann auf none, writeback, writethrough (Default) oder unsafe gesetzt werden. Sie steuert die Nutzung des Cache für das angegebene Laufwerk. Mit dem Setzten des Parameters writethrough wird der Host-Cache für Lese- und Schreibzugriffe verwendet. Die Bestätigung des Schreibvorganges wird dem Gast-System erst gesendet, wenn das Storage-Subsystem den Schreibvorgang bestätigt hat. Bei der Option writeback wird bereits die Schreibbestätigung gesendet, wenn die Daten im Cache des Hosts gespeichert sind. Stürzt der Host ab, kann es zu Datenverlusten kommen. Mit unsafe wird der Cache-Inhalt nie auf die Festplatte geschrieben. Bei Problemen mit dem Host droht dabei Datenverlust. Bei der Startoption -snapshot wird unsafe als Default eingestellt. Bei der Option none wird der Host-Cache nicht verwendet. QEMU und KVM können intern die Daten cachen. Die Performance kann bei bestimmten Treibern in Kombination mit der Option writethrough und dem Image-Format qcow2 geringer sein. Wird mehr Wert auf Geschwindigkeit als auf Sicherheit gelegt, ist hier die Option writeback anzuwenden.
format=f
Gibt das Image-Format vor (Beispiel format=raw).
serial=s
Definiert die Nummer für die Zuweisung des Device.
addr=A
Definiert die PCI-Device-Address des Controllers (virtio).
boot=on|off
Wird die Option boot=on gesetzt, wird das Booten von dem Laufwerk ermöglicht.
aio=threads|native
Ermöglicht die Wahl zwischen Pthread Based Disk I/O und Native Linux AIO.
werror=action,rerror=action
Definiert die Aktion bei Schreib- oder Lesefehlern. Bei ignore wird der Fehler ignoriert und es wird versucht weiterzumachen. Die Aktion stop beendet QEMU bei einem Fehler. Bei report wird der Fehler dem Gast-System mitgeteilt. Die Aktion enospc beendet QEMU nur wenn das Host-System keinen Speicherplatz mehr zur Verfügung stellen kann. Ansonsten wird der Fehler dem Gast-System mitgeteilt. Die Default-Einstellungen sind: werror=enospc und rerror=report.
readonly=on|off
Mit readonly=on wird das Laufwerk mit einem Schreibschutz versehen.
Anstelle der Option -cdrom ist es möglich folgende Optionen anzuwenden:
Host ~$ qemu -drive file=cd.iso,index=2,media=cdrom
Die Optionen -hda, -hdb, -hdc und -hdd sind wie folgt ersetzbar:
Host ~$ qemu -drive file=Platte.img,index=0,media=disk
Host ~$ qemu -drive file=Platte.img,index=1,media=disk
Host ~$ qemu -drive file=Platte.img,index=2,media=disk
Host ~$ qemu -drive file=Platte.img,index=3,media=disk
Folgende Optionen schließen ein CDROM-Laufwerk als Slave von ide0 an:
Host ~$ qemu -drive file=cd.iso,if=ide,index=1,media=cdrom
Wird die Option file nicht definiert, wird ein Laufwerk ohne eingelegtes Medium angelegt.
Host ~$ qemu -drive if=ide,index=1,media=cdrom
Folgende Optionen definieren eine SCSI-Festplatte mit der Unit-ID 6 am Bus 0:
Host ~$ qemu -drive file=Platte.img,if=scsi,bus=0,unit=6
Anstelle der Optionen -fda oder -fdb können folgende Optionen angewendet werden:
Host ~$ qemu -drive file=a.img,index=0,if=floppy
Host ~$ qemu -drive file=b.img,index=1,if=floppy
Der Wert index wird jeweils automatisch erhöht.
Host ~$ qemu -drive file=c.img -drive file=d.img
Dies entspricht der nachfolgenden Befehlszeile.
Host ~$ qemu -hda c.img -hdb d.img
Im QEMU-Monitor fügt man mit dem Befehl drive_add der laufenden virtuellen Maschine ein virtuelles PCI-Laufwerk hinzu. In diesem Beispiel wird das Image daten.img angeschlossen.
(qemu) drive_add dummy if=none,id=mydisk,file=daten.img
Die Optionen von drive_add entsprechen denen von -drive. Hier die Syntax:
(qemu) drive_add [[<domain>:]<bus>:]<slot> \
[file=file][,if=type][,bus=n] \
[,unit=m][,media=d][index=i] \
[,cyls=c,heads=h,secs=s[,trans=t]] \
[snapshot=on|off][,cache=on|off]
Zum Trennen eines Block-Devices dient im QEMU-Monitor der Befehl drive_del.
(qemu) info block
ide0-hd0: type=hd removable=0 file=ubuntu-server.img ro=0 drv=qcow2 encrypted=0
(qemu) drive_del ide0-hd0
