Qemu kennt allerdings viele verschiedene Image-Formate, und so bietet es sich an, das Image in das sogenannte QCOW2-Format umzuwandeln. Dazu dient das Kommando qemu-img, das als ersten Parameter die auszuführende Aktion entgegennimmt, gefolgt von weiteren Argumenten.
Bei der Ausgabe von qemu-img info in Abbildung 3 sind zwei Zeilen besonders interessant: virtual size entspricht der Größe der Festplatte, so wie sie das Gastbetriebssystem sieht und nutzt. Die Angabe disk size dagegen gibt den belegten Platz auf der Festplatte des Hostsystems an. Die virtuelle Größe könnte den realen freien Festplattenplatz problemlos übersteigen, solange das Gastbetriebssystem den Platz nicht verwendet. Beim Standard-Raspbian-Image änderte sich durch das Konvertieren die virtuelle Größe nicht, allerdings sank der belegte Plattenplatz im Hostsystem um 25 Prozent.

Abbildung 3: Mit »qemu-img« konvertieren Sie das RAW-Image von Raspbian ins Qemu-eigene QCOW2-Format.
Die zweite Optimierung betrifft den Platz auf dem Desktop. Je nach Anwendungsfall läuft der emulierte RasPi eventuell “headless”, also ohne grafische Oberfläche [7]. Emulieren Sie die GUI hingegen, bietet Qemu standardmäßig nur 800×600 Pixel an. Für eine höhere Auflösung gilt es, die Datei /etc/X11/xorg.conf, so wie in Listing 6 gezeigt, anzupassen.
Danach bildet der Emulator den Desktop mit 1024×768 Pixeln ab. Als Preis dafür reduziert sich aber die Farbtiefe: Bietet die Standardauflösung noch 16 Bit, halbiert sich diese bei der höheren Auflösung auf 8 Bit, also 256 Farben.
Listing 6
Section "Device"
Identifier "Default Video Device"
Driver "fbdev"
Option "UseFBDev" "true"
EndSection
Section "Monitor"
Identifier "Default Monitor"
EndSection
Section "Screen"
Identifier "Default Screen"
Monitor "Default Monitor"
Device "Default Video Device"
DefaultDepth 8
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
Die letzte hier vorgestellte Optimierung verschafft dem RasPi quasi mehr Speicher, den die emulierte Version ja auf 256 MByte beschränkt. Hierzu legen Sie auf dem Wirtssystem mit den Befehlen aus Listing 7 eine Datei auf einem temporären, im Speicher gehaltenen Dateisystem an. Die ersten drei Befehle benötigen Sie aber nur, wenn auf dem Host noch kein temporäres Dateisystem existiert – viele Linux-Distributionen mounten ohnehin /tmp auf ein temporäres Dateisystem.
Listing 7
$ sudo mkdir /var/run/qemutmp $ sudo mount -t tmpfs -o size=256 none /var/run/qemutmp $ sudo chmod 1777 /var/run/qemutmp $ qemu-create -f raw /var/run/qemutmp/swap.img 256M
Die mit dem letzten Befehl von Listing 7 erzeugte Datei belegt zunächst keinen echten Speicher im Wirtssystem, denn auch ein RAW-Image ist platzoptimiert, wenn Sie es mit qemu-img create anstelle von dd anlegen. Die Datei reichen Sie mit der Option -hdb /var/run/qemutmp/swap.img an das emulierte System weiter. Dort erscheint es als Festplatte, die Sie wiederum als Linux-Swapspace konfigurieren (Listing 8).
Listing 8
$ sudo mkswap /dev/sdb $ sudo swapon -p 10 /dev/sdb
Eine virtuelle Hauptspeichererweiterung über Swapspace bringt Raspbian in der Grundeinstellung von Haus aus mit. Hierzu legt das System eine 100 MByte große Swap-Datei auf der Festplatte an. Qemu emuliert diese Disk wiederum als Datei auf der echten Festplatte des Hosts – die Geschwindigkeit kommt also nicht an die einer RAM-Disk heran. Auf dem Testsystem mit normaler Notebook-Festplatte beträgt die Schreibrate ca. 3,4 MByte/s, die RAM-Disk schafft dagegen rund 27,5 MByte/s – kein Vergleich mit der Performance von echtem Hauptspeicher, aber allemal besser als nichts.
Ausprobieren ohne Reue
Einerseits haften dem emulierten RasPi auf Hardware-Seite gegenüber einem echten System diverse Nachteile an, andererseits bietet er aber auch wirkliche “Killerfeatures”. Eine Möglichkeit, um Neuerungen problemlos auszuprobieren, bieten dabei sogenannte Snapshots. Dazu legen Sie mit folgendem Befehl eine Snapshot-Datei zum Original-Image raspi.qcow2 an:
$ qemu-img create -f qcow2 -o raspi.qcow2 raspi-snapshot.qcow2
Anschließend verwenden Sie diese Snapshot-Datei anstatt des Originals. Qemu schreibt jetzt alle Änderungen dorthin. Ab diesem Zeitpunkt dürfen Sie die Originaldatei nicht mehr verändern oder verschieben, da Sie andernfalls Inkonsistenzen erzeugen. Um die Änderungen wieder zu verwerfen, löschen Sie einfach die Snapshot-Datei. Mit dem folgenden Kommando integrieren Sie vorher optional alle darin gespeicherten Veränderungen in die Originaldatei:
$ qemu-img commit raspi-snapshot.qcow2
Als Alternative zu einer Snapshot-Datei verwenden Sie die Qemu-Option -snapshot. Damit landen alle Änderungen nach dem Ausschalten des Emulators im Nirwana. Überlegen Sie es sich im laufenden Betrieb anders, dann wechseln Sie in den sogenannten Qemu-Monitor, eine Art Shell zur Steuerung des Emulators. Der Wechsel erfolgt entweder über das Menü oder die Tastenkombination [Strg]+[Alt]+[**2**]. Im Qemu-Monitor sichern Sie den aktuellen Stand dann mit dem Kommando commit. Der Befehl wirkt auch auf Snapshot-Dateien; Sie sparen sich so den Qemu-img-Befehl.
Umfassender als Snapshots, die sich immer nur auf das Dateisystem des Emulators beziehen, sind die gesicherten Zustände (“saved states”) des Emulators. Hierbei merkt sich Qemu den kompletten Zustand der laufenden Maschine, insbesondere auch jenen des Hauptspeichers. Das setzt allerdings ein Image im QCOW2-Format voraus. Zum Erstellen eines gesicherten Zustands im laufenden Betrieb wechseln Sie wieder zum Qemu-Monitor und geben dort das Kommando savevm Name ein. Der gesicherte Zustand bekommt nun eine eindeutige ID sowie den von Ihnen gewählten Namen. Mit dem Monitor-Befehl stop beenden Sie dann die Sitzung.
Der Aufruf qemu-img info informiert Sie auch über die im Image gesicherten Zustände. Sofern vorhanden, starten Sie den Emulator mit der zusätzlichen Option -loadvm Name. Damit steht Ihnen ohne langwieriges Booten binnen weniger Sekunden ein lauffähiges RasPi-System zur Verfügung. Indem Sie den aktuellen Stand sichern und später wieder laden, statt einen Shutdown vorzunehmen, sparen Sie hier viel Zeit. Nach dem Schnellstart des Systems tippen Sie auf der Kommandozeile folgenden Befehl ein:





