
F: Gibt es eine Möglichkeit, eine QEMU-VM laufen zu lassen, bei der ich die Option habe, während der Arbeit einen Wiederherstellungspunkt zu speichern (online oder offline)?
langer Text mit Untersuchung, bereits geprüften Alternativen und kleinen Tiraden:
Ich habe Schwierigkeiten, die zahlreichen und völlig inkompatiblen Möglichkeiten von QEMU zum Speichern und Verwerfen von Zuständen/Änderungen an einer VM und auf Festplatten zu verstehen.
Dort ist der-snapshot
Flagge. Aber es scheint nicht getan zu werden (Zitat aus doc
Es handelt sich um ein laufendes Projekt und im Laufe der Zeit können sich die Dinge ändern.
) und hängt ab vonGastagent, was ebenfalls nicht erledigt zu sein scheint und irgendwie kaputt ist, da die Entwickler bei der Migration von QMP zu QAPI einen Gang zurückgeschaltet haben und dies dann auf halbem Weg verworfen haben, um an Libvirt-Overkill-„Lösungen“ zu arbeiten.
In beiden Dokumenten wird QEMU Version 0.16–17 erwähnt, aber meine Systeme haben alle Version 7.2+, also bin ich nicht sicher, ob es sich um eine interne Bibliotheksversion oder um wirklich alte Dokumente handelt.
Dann gibt esDateisystem-Snapshots -drive file=hda.qcow2,snapshot=on
was auf meinem System nicht zu funktionieren scheint. Ich meine, es funktioniert, da bei Verwendung dieser Option immer alles weggeworfen wird. Es gibt keine Möglichkeit, tatsächlich Daten in einem Snapshot des QCOW2-Images zu speichern.
Dann ist dasavevm
Monitorbefehl, aber obwohl es das einzige ist, das die Snapshot-Funktionen von QCOW2 tatsächlich zu nutzen scheint, speichert es auch viele unerwünschte CPU-/Speicherzustände (sie sind eher ein Ärgernis, das später Dinge kaputt macht und nur in seltenen QA-Fällen wirklich hilfreich ist, und ich sehe keine Möglichkeit, sie beim nächsten Durchlauf einfach zu verwerfen und nur die QCOW2-Änderungen beizubehalten).
Und das ist, was ich wollte. Eine Möglichkeit, Änderungen immer zu übernehmen, aber auch eine Möglichkeit, wenn die Maschineofflinespeichern Sie diesen Punkt in derSpeicherung als Snapshot.
Aber diese letzte Methode ist völlig von QEMU und den Bildern getrennt. Ich muss im Laufe der Arbeit neue Dateinamen erstellen, anstatt Speicherzustände hinzuzufügen.
Ich denke, der Idealzustand wäre, diese Offlinestatusmethode zu haben, aber anstelle verschiedener Dateien die interne QCOW2-Snapshot-Unterstützung zu verwenden.
Schließlich gibt esandere OptionDies ist der letzte Offline-Anwendungsfall, der jedoch online ausgeführt wird. Unterbrechen Sie also während der Ausführung der VM die Ausführung über den QEMU-Agenten, erstellen Sie eine neue Snapshot-Datei auf dem externen Host und weisen Sie die laufende Instanz an, zu diesem neuen Snapshot-Overlay zu wechseln und die Ausführung fortzusetzen.
Antwort1
Ich verstehe nicht, was Sie mit vorhersehbar meinen, aber ich glaube, Sie suchen vielleicht nach Folgendem:
List, apply, create or delete snapshots in image FILENAME.
qemu-img snapshot \
[--object OBJECTDEF] [--image-opts] [-U] [-q] \
[-l | -a SNAPSHOT | -c SNAPSHOT | -d SNAPSHOT] FILENAME
Parameters to snapshot subcommand:
SNAPSHOT
Is the name of the snapshot to create, apply or delete
-a Applies a snapshot (revert disk to saved state)
-c Creates a snapshot
-d Deletes a snapshot
-l Lists all snapshots in the given image
(aus der qemu-img-Manpage &https://www.qemu.org/docs/master/tools/qemu-img.html#cmdoption-qemu-img-commands-arg-snapshot)
Dieser Befehl erstellt eineinternSnapshot/Checkpoint innerhalb des qcow2-VM-Image (ich bin nicht sicher, ob es mit anderen Festplattenformaten funktioniert).
(Im Gegensatz zum Format qemu-img snapshot create -f qcow2 -b <backing.file> -F qcow2 <image.file>
, bei dem eine neue Image-Datei auf der Festplatte erstellt und die vorhandene als Sicherungsdatei verwendet wird. – Gut für unveränderliche Archive.)
Die vollständige Liste der von Ihrer spezifischen QEMU-Version unterstützten Funktionen finden Sie in qemu-img --help
der Ausgabe.
Beispiel:
$ qemu-img snapshot -l myamazingqemuvm.qcow2
$ qemu-img snapshot -c testing myamazingqemuvm.qcow2
$ qemu-img snapshot -l myamazingqemuvm.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT
1 testing 0 B 2023-05-21 00:57:50 00:00:00.000 0
$ qemu-img snapshot -d testing myamazingqemuvm.qcow2
$ qemu-img snapshot -l myamazingqemuvm.qcow2
$
So erstellen Sie einen Schnappschuss:qemu-img
erfordert eine Schreibsperreauf der Datei, was bedeutet, dass es nur für Offline-VMs funktioniert.
So erstellen Sie einenSchnappschussIneine Online-VMmüssen Sie die „HMP“-Befehle innerhalb des laufenden qemu-system
Prozesses verwenden:
(qemu) savevm my_snapshot
(qemu) loadvm my_snapshot
um Snapshots zu speichern bzw. zu laden. Um eine solche Konsole in Ihrer über das Terminal gestarteten VM zu erhalten, können Sie sie mit dem monitor
Argument starten:
qemu-system-x86_64 [...] -monitor unix:/tmp/qemu-mon_${VMNAME}.sock,server,nowait
Dadurch wird ein Unix-Socket zur Kommunikation mit Ihrer VM erstellt:
#!/bin/sh
#
# connect to qemu monitor socket
# disconnect from it with Ctrl-C
MACHINE="${1}"
SOCKET="/tmp/qemu-mon_${MACHINE}.sock"
echo "CONNECTING TO ${MACHINE} ..."
socat ${SOCKET} STDIN
und dann müssen Sie nur noch
$ ./qemu-monitor.sh myamazingqemuvm
CONNECTING TO myamazingqemuvm ...
QEMU 5.2.0 monitor - type 'help' for more information
(qemu) savevm testsnap
savevm testsnap
(qemu) loadvm testsnap
loadvm testsnap
... und sobald Sie wieder offline sind, können Sie wieder Folgendes verwenden qemu-img snapshot
:
$ qemu-img snapshot -l myamazingqemuvm.qcow2
Snapshot list:
ID TAG VM SIZE DATE VM CLOCK ICOUNT
1 testing 0 B 2023-05-21 00:57:50 00:00:00.000 0
2 testsnap 14.3 MiB 2023-05-21 01:03:45 00:05:32.995