今天遇到了一个与精简卷有关的问题:
- 基础环境是 OpenStack 虚机 + Ceph 云盘,Guest 系统为 CentOS Linux;
- 应用承载在基于云盘创建的文件系统上;
- 应用每天不断的创建文件然后删除文件;
- 文件系统上 df 看到的已使用空间非常有小;
- Ceph 集群可用空间不足,应用 IO 卡住;
由于 qemu 使用 Ceph 云盘时总线类型默认选择的是 virtio-blk,导致即使 qemu 启用了 discard 选项 unmap,虚机中的云盘仍然无法释放文件系统层未使用的块层存储资源。
当前,为了支持自动释放,需要满足三个条件:
- 云盘选择 virtio-scsi 总线类型;
- qemu 启用 discard 选项 unmap;
- 虚机文件系统 mount 时使用 discard 选项;
当然,如果只需要手工 fstrim 的话,第 3 个条件不需要。
需要注意的是,新版本 virtio-blk guest 驱动和 qemu 已经实现了 virtio-blk 总线的 discard 支持,但各下游厂商真正放到生产环境使用估计还需要一段时间。
参考资料
Does VirtIO storage support discard (fstrim)?
https://unix.stackexchange.com/questions/518222/does-virtio-storage-support-discard-fstrim
virtio-blk: add discard and write zeroes support (libvirt)
https://bugzilla.redhat.com/show_bug.cgi?id=1672682
OpenStack and Ceph: RBD discard
https://www.sebastien-han.fr/blog/2015/02/02/openstack-and-ceph-rbd-discard/
OpenStack Cinder: discard support for Ceph in Mitaka
https://www.sebastien-han.fr/blog/2016/05/11/OpenStack-Cinder-discard-support-for-Ceph-in-Mitaka/
Virtio-blk does not support TRIM
https://bugs.launchpad.net/qemu/+bug/1523246
Add virtio-scsi bus support for bdm
https://ask.openstack.org/en/question/113052/how-to-attach-volume-to-scsi-controller/
How to attach volume to scsi controller
https://ask.openstack.org/en/question/113052/how-to-attach-volume-to-scsi-controller/
Setup Thin Provisioning Volumes in Logical Volume Management (LVM) – Part IV
https://www.tecmint.com/setup-thin-provisioning-volumes-in-lvm/
sg_unmap - sends a SCSI UNMAP command
https://linux.die.net/man/8/sg_unmap
Virtio: An I/O virtualization framework for Linux
https://www.cs.cmu.edu/~412/lectures/Virtio_2015-10-14.pdf
最后修改于 2019-12-20