diff options
Diffstat (limited to 'gitlab/issues_text/target_missing/host_missing/accel_missing/1748')
| -rw-r--r-- | gitlab/issues_text/target_missing/host_missing/accel_missing/1748 | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gitlab/issues_text/target_missing/host_missing/accel_missing/1748 b/gitlab/issues_text/target_missing/host_missing/accel_missing/1748 new file mode 100644 index 000000000..dd63e95a0 --- /dev/null +++ b/gitlab/issues_text/target_missing/host_missing/accel_missing/1748 @@ -0,0 +1,56 @@ +qcow2: disk size exceeds virtual size +Description of problem: +Disk size of qcow2 image file exceeds its virtual size after repeatedly writing, and deleting data in qemu vm. +Steps to reproduce: +1. qemu-img create -f qcow2 tmp.qcow2 32M +2. attach tmp.qcow2 as a device to qemu vm +3. mount the device in qemu vm, and repeatedly writing, and deleting data +Additional information: +xml for attaching tmp.qcow2 +```xml + <disk device="disk" type="file"> + <target bus="virtio" dev="vdb"/> + <source file="/path/to/tmp.qcow2"/> + <driver type="qcow2" name="qemu" cache="none" discard="unmap"/> + </disk> +``` +in fact, set discard="unmap" or not seems has `little impact` on the final result. +reproducible shell script. +```sh +#! /bin/sh + +for i in {1..1000}; do + for j in {1..27}; do + dd if=/dev/zero of=/mnt/test-$j bs=1M count=1 & + done + sync + sleep 10 + rm -f /mnt/test-* + fstrim /mnt +done +``` +MOUNT the device and run this script, problem happens about 30 minutes. + +final result looks like: +```sh +# qemu-img info tmp.qcow2 --force +image: tmp.qcow2 +file format: qcow2 +virtual size: 32 MiB (33554432 bytes) +disk size: 33 MiB +cluster_size: 65536 +Format specific information: + compat: 1.1 + compression type: zlib + lazy refcounts: false + refcount bits: 16 + corrupt: false + extended l2: false +Child node '/file': + filename: tmp.qcow2 + protocol type: file + file length: 32.3 MiB (33882112 bytes) + disk size: 33 MiB + Format specific information: + extent size hint: 1048576 +``` |