TRIM/DISCARD
Using TRIM/DISCARD you can give back free space to a Ceph cluster. Normally, any thin provisioned block device will keep on growing until its maximum size while being used. Using the DISCARD command a underlying block device can be instructed to discard blocks which do not contain data.
In the case of Ceph’s RBD we can shrink our RBD images again which gives us back free space in our Ceph cluster.
Libvirt
Using this feature is only supported if you use VirtIO-SCSI and not if you use plain VirtIO.
Some searching brought me to this XML for my Ubuntu 15.10 guest:
<disk type='network' device='disk'> <driver name='qemu' type='raw' cache='none' discard='unmap'/> <auth username='admin'> <secret type='ceph' uuid='f94812dd-f06f-48f6-9839-1edf7ee8f8d6'/> </auth> <source protocol='rbd' name='libvirt/image1'> <host name='hostname.of.my.ceph.monitor'/> </source> <target dev='sda' bus='scsi'/> <controller type='scsi' index='0' model='virtio-scsi'/> </disk>
Inside the guest
I tried a Ubuntu 15.10 guest but this should be supported in any other modern Linux guest.
lspci shows me:
root@ubuntu1510:~# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: LSI Logic / Symbios Logic 53c895a root@ubuntu1510:~#
And I have a sda block device which my guest uses:
root@ubuntu1510:~# df -h Filesystem Size Used Avail Use% Mounted on udev 230M 0 230M 0% /dev tmpfs 49M 4.6M 45M 10% /run /dev/sda1 9.3G 1.3G 7.6G 15% / tmpfs 245M 0 245M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/0 root@ubuntu1510:~#
Now I can run fstrim which will trim the block device:
root@ubuntu1510:~# fstrim -v / /: 128 MiB (134217728 bytes) trimmed root@ubuntu1510:~#