Ich habe eine virtuelle Maschine, die mit 5 Snapshots 1,2,3,4,5 gestartet ist.
ich benutzteqemu-imgum die Snapshots 1,2,3 zu löschen. Die Snapshots 4 und 5 werden noch benötigt und wurden nicht gelöscht.
Wie kann ich den von den Snapshots 1, 2 und 3 belegten Speicherplatz freigeben und die Snapshots 4 und 5 behalten?
Ich habe viel Zeit mit der Suche nach einer Lösung verbracht und die Lösungen, die ich gefunden habe, passen in eines von zwei Mustern:
Verwenden Sie qemu-img convert(Erforderliche Schnappschüsse gelöscht)
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2
Dadurch wird der von Linux.qcow2 verwendete Speicherplatz reduziert, es werden jedoch die Snapshots 4 und 5 gelöscht.
Kopieren Sie die VM und verwenden Sie virt-sparsify(Stellt keinen Speicherplatz wieder her)
cp Linux.qcow2 TEST.qcow2
sudo virt-sparsify --in-place TEST.qcow2
Die beiden nicht gelöschten Snapshots bleiben erhalten, der Speicherplatz, der ursprünglich von den Snapshots 1, 2 und 3 belegt wurde, wird jedoch nicht wiederhergestellt.
Wie kann ich nach dem Löschen von Snapshots den Speicherplatz in einer qcow2-Datei wiederherstellen und gleichzeitig die verbleibenden Snapshots beibehalten?
Antwort1
qcow2-Dateien sind Sparse-Dateien. Auf Dateisystemen, die Sparse-Dateien unterstützen, können sie viel weniger Speicherplatz auf der Festplatte beanspruchen als die Größe der Datei.
Wenn Sie einen Snapshot löschen, ändert sich die von gemeldete Größe ls -l
nicht, aber die von gemeldete Menge an freiem Speicherplatz auf der Festplatte df
ändert sich.
Fast alle Dateisysteme unterstützen Sparse-Dateien. FAT und NFSv3 sind wahrscheinlich die einzigen gängigen Dateisysteme, die dies nicht tun.
Antwort2
Wenn Sie die Snapshots 1, 2 und 3 löschen, werden die Dateien gelöscht, es wird jedoch kein freigegebener Speicherplatz angezeigt, da es sich nicht um eine echte Löschung handelt. Die Dateien werden lediglich markiert, damit der Löschvorgang schnell abgeschlossen werden kann.
Wenn Sie den Speicherplatz der gelöschten Snapshots freigeben möchten, können Sie die qcow2-Datei konvertieren. Dazu müssen Sie die qcow2-Datei jedoch vorher per dd-Befehl mit 0 füllen:
$dd if=/dev/zero of=~/junk
dd: writing to `/home/***/junk': No space left on device
$rm junk
dann konvertieren Sie die qcow2-Datei
qemu-img convert -O qcow2 Linux.qcow2 Linux_s.qcow2