blob: dd63e95a0c4f52afa9190b7b5f5ca8978448fe9d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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
```
|