After a while openstack image create creates increasingly large files because the blocks used and freed are not trimmed and it is not uncommon for hypervisors to not support fstrim. The image can be shrinked and the virtual machine recreated from it to reclaim the unused space.
$ openstack image save --file 2017-06-16-gitlab.qcow2 2017-06-16-gitlab $ qemu-img convert 2017-06-16-gitlab.qcow2 -O raw work.img $ sudo kpartx -av work.img add map loop0p1 (252:0): 0 104855519 linear 7:0 2048 $ sudo e2fsck -f /dev/mapper/loop0p1 ... cloudimg-rootfs: 525796/6400000 files (0.1% non-contiguous), 2967491/13106939 blocks $ sudo resize2fs -p -M /dev/mapper/loop0p1 ... The filesystem on /dev/mapper/loop0p1 is now 3190624 (4k) blocks long. $ sudo kpartx -d work.img loop deleted : /dev/loop0
Create a smaller image that is big enough for the resized file system.
$ sudo virt-df -h work.img Filesystem Size Used Available Use% work.img:/dev/sda1 12G 9.7G 2.0G 83% $ qemu-img create -f raw smaller.img 13G Formatting 'smaller.img', fmt=raw size=13958643712
Resize the large image into the smaller one:
$ sudo virt-resize --shrink /dev/sda1 work.img smaller.img ... Resize operation completed with no errors. Before deleting the old disk, carefully check that the resized disk boots and works correctly. $ ls -lh work.img smaller.img -rw-r--r-- 1 ubuntu ubuntu 13G Jun 16 08:38 smaller.img -rw-r--r-- 1 ubuntu ubuntu 50G Jun 16 08:31 work.img $ qemu-img convert smaller.img -O qcow2 smaller.qcow2
Upload the smaller image
time openstack image create --file smaller.qcow2 \ --disk-format=qcow2 --container-format=bare 2017-06-16-gitlab-smaller