Hoi zusammen,
Ich habe da nen Handlingthema beim kvm. Ich erstelle einen Snapshot auf einer VM (test04) mit preallocated=full HDD qcow2 image (22GB) - test04-system.qcow2. Beim löschen des Snapshots zeigt mir du und ls unterschiedliche Werte an.
Ich bekomme es so reproduziert:
- anzeigen Disk image information $ qemu-img info /data/vm1/test04-system.full.qcow2 image: /data/vm1/test04-system.full.qcow2 file format: qcow2 virtual size: 22.2 GiB (23836229632 bytes) disk size: 22.2 GiB cluster_size: 65536 Format specific information: compat: 1.1 compression type: zlib lazy refcounts: false refcount bits: 16 corrupt: false extended l2: false
- erstellen vom Snapshot $virsh snapshot-create test04
- Das rootfilesystem ist frei, ich erstelle ein file mit 18GB $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 22G 3.3G 19G 16% / tmpfs 996M 8.0K 996M 1% /dev/shm tmpfs 399M 500K 398M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/vda15 105M 5.3M 100M 5% /boot/efi tmpfs 200M 0 200M 0% /run/user/1000
$ sudo dd if=/dev/urandom of=/testfile bs=1M count=18000 18000+0 records in 18000+0 records out 18874368000 bytes (19 GB, 18 GiB) copied, 82.8493 s, 228 MB/s
- Ich schaue mir auf dem kvm das hdd image file an: $ ls -lah /data/vm1/test04-system.qcow2 -rw-r--r-- 1 libvirt-qemu kvm 39G Dec 31 12:34 /data/vm1/test04-system.qcow2
$ du -sh /data/vm1/test04-system.qcow2 41G /data/vm1/test04-system.qcow2
- so weit, so gut
$ virsh snapshot-list test04 Name Creation Time State --------------------------------------------------- 1672486383 2022-12-31 12:33:03 +0100 running
$ virsh snapshot-delete test04 --snapshotname=1672486383 Domain snapshot 1672486383 deleted
- nach dem Löschen des Snapshots würde ich erwarten, dass das Imagefile wieder die Originalgrösse hat.
$ ls -lah /data/vm1/test04-system.qcow2 -rw-r--r-- 1 libvirt-qemu kvm 41G Dec 31 12:38 /data/vm1/test04-system.qcow2
$ du -sh /data/vm1/test04-system.qcow2 23G /data/vm1/test04-system.qcow2
$ file /data/vm1/test04-system.qcow2 /data/vm1/test04-system.qcow2: QEMU QCOW2 Image (v3), 23836229632 bytes
- Das Imagefile hat seine Originalgrösse, „ls" zeigt mir aber noch 41GB an. Ich würde vermuten, dass er jetzt nen sparsefile aus dem Image gemacht hat. Wie würde ich das file jetzt wieder tatsächlich „klein“ bekommen - Hintergrund: nicht alle tools unterstützen sparsefiles (backup..)?
Danke im Voraus und "guten Rutsch",
Andreas
Am Samstag, dem 31.12.2022 um 13:09 +0100 schrieb Andreas Roth:
Hoi zusammen,
Hallo Andreas,
Fülle mal das testfile mit Nullen anstelle von Werten.
$ sudo dd if=/dev/urandom of=/testfile bs=1M count=18000
$ sudo dd if=/dev/null of=/testfile bs=1M count=18000
Das Image sollte nun wieder kleiner werden.
Beim Löschen wird doch nur der Vereis auf die Datei gelöscht, nicht der Inhalt. Der ändert sich erst beim Überschreiben.
VG Gerd
Am Samstag, dem 31.12.2022 um 14:37 +0100 schrieb gerdg:
Am Samstag, dem 31.12.2022 um 13:09 +0100 schrieb Andreas Roth:
Hoi zusammen,
Hallo Andreas,
sorry nicht richtig gelesen.
wie sieht es aus wen beim löschen die
OPTIONEN .. --children Löschen Snapshot und alle Untergeordneten
verwendet wird.
$ virsh snapshot-delete test04 --snapshotname=1672486383 --children
VG Gerd
Hoi Gerd, hi zusammen,
sorry nicht richtig gelesen.
wie sieht es aus wen beim löschen die
OPTIONEN .. --children Löschen Snapshot und alle Untergeordneten
Ändert erstmal nix - ich habe auch nur einen Snapshot ohne children angelegt..
virsh # snapshot-list test04 Name Creation Time State --------------------------------------------------- 1672655491 2023-01-02 11:31:31 +0100 running
virsh # snapshot-delete --children --snapshotname 1672655491 test04 Domain snapshot 1672655491 deleted
$ ls -lah test04-system.qcow2 -rw-r--r-- 1 libvirt-qemu kvm 43G Jan 2 11:35 test04-system.qcow2
Als workaround kann man die VM auf einen anderen Host per live migration kopieren. Dabei wird dann auch wirklich nur die 20Gb kopiert und das file ist wieder „klein“.
$ virsh migrate --live test04 --copy-storage-all --persistent --undefinesource qemu+ssh://art@hw01:10022/system?socket=/var/run/libvirt/libvirt-sock
Somit kann man auf dem Originalhost das Imagefile löschen. Beim zurückmigrieren fällt er dann mit der Meldung um, dass es das Imagefile nicht mehr gibt.. Warum auch immer, da man ja eigenetlich "--persistent —undefinesource“ gesetzt hat.
$ virsh migrate --live test04 --copy-storage-all --persistent --undefinesource qemu+ssh://art@hw02:10022/system?socket=/var/run/libvirt/libvirt-sock error: Path '/data/vm1/test04-system.qcow2' is not accessible: No such file or directory
Wenn man das Imagefile nun wieder anlegt, dann kann man zuürckmigrieren und hat man den Stand, den ich wollte.
Vom Handling wirklich nicht schön..
Cheers,
Andreas
lug-dd@mailman.schlittermann.de