2016-10-24 2 views
2

Ich benutze Qemu Emulator für aarch64 und möchte einen externen Checkpoint (oder eine schnelle Weiterleitung) erstellen, um alles zu speichern, was ich brauche, um das System neu zu starten, nur wenn ich einen Checkpoint erstelle. (In der Tat, ich möchte den Boot-Schritt überspringen) Ich habe nur etwas auf qemu VM-Snapshot und schnelle Weiterleitung gefunden, aber es funktioniert nicht für den Emulator. Gibt es eine Checkpoint-Funktion für den Qemu-Emulator?Hat Qemu-Emulator Checkpoint-Funktion?

Antwort

1

Ein savevm Snapshot sollte tun, was Sie wollen. Die kurze Antwort ist, dass Sie eine QCOW2-Diskette für die zu speichernden Snapshots einrichten müssen, und dann können Sie im Monitor den Befehl "savevm" verwenden, um den Snapshot zu erstellen. Dann können Sie über die Befehlszeile '-Loadvm' von dort aus fortfahren. Dies alles funktioniert gut in der Emulation von AArch64.

https://translatedcode.wordpress.com/2015/07/06/tricks-for-debugging-qemu-savevm-snapshots/ hat ein ausführlicheres Tutorial.

+0

Ist es dem Gast möglich, QEMU mitzuteilen, wann der Snapshot erstellt werden soll? –

0

Minimal Beispiel

Pete Antwort nur für mich gearbeitet, aber lassen Sie mich ein vollständig reproduzierbar Beispiel liefern.

Ich habe voll automatisiert alles an: https://github.com/cirosantilli/linux-kernel-module-cheat/tree/1e0f0b492855219351b0bfa2eec4d3a6811fcaaa#snapshot

Der entscheidende Schritt ist das Bild zu konvertieren auf wie erklärt qcow2: https://docs.openstack.org/image-guide/convert-images.html

cd buildroot/output.x86_64~/images 
qemu-img convert -f raw -O qcow2 rootfs.ext2 rootfs.ext2.qcow2 

Und der letzte QEMU Befehl war:

./buildroot/output.x86_64~/host/usr/bin/qemu-system-x86_64 -m 128M -monitor telnet::45454,server,nowait -netdev user,hostfwd=tcp::45455-:45455,id=net0 -smp 1 -M pc -append 'root=/dev/vda nopat nokaslr norandmaps printk.devkmsg=on printk.time=y console=ttyS0' -device edu -device virtio-net-pci,netdev=net0 -drive file=./buildroot/output.x86_64~/images/rootfs.ext2.qcow2,if=virtio,format=qcow2 -kernel ./buildroot/output.x86_64~/images/bzImage -nographic 

Um es zu testen, melden Sie sich bei der VM an und führen Sie Folgendes aus:

i=0; while true; do echo $i; i=$(($i + 1)); sleep 1; done 

dann auf einer anderen Schale, öffnen den Monitor:

telnet localhost 45454 
savevm my_snap_id 

Die Zählung wird fortgesetzt. Dann, wenn wir die vm:

laden, geht die Zählung zurück, wo wir gespeichert haben. Dies zeigt, dass CPU- und Speicherstatus zurückgesetzt wurden.

Wir können auch überprüfen, ob der Plattenzustand auch umgekehrt ist. Gast:

echo 0 >f 

Monitor:

savevm my_snap_id 

Gast:

echo 1 >f 

Monitor:

loadvm my_snap_id 

Gast:

cat f 

Und der Ausgang ist 0.