QEMU discard

今天遇到了一个与精简卷有关的问题:

  1. 基础环境是 OpenStack 虚机 + Ceph 云盘,Guest 系统为 CentOS Linux;
  2. 应用承载在基于云盘创建的文件系统上;
  3. 应用每天不断的创建文件然后删除文件;
  4. 文件系统上 df 看到的已使用空间非常有小;
  5. Ceph 集群可用空间不足,应用 IO 卡住;

由于 qemu 使用 Ceph 云盘时总线类型默认选择的是 virtio-blk,导致即使 qemu 启用了 discard 选项 unmap,虚机中的云盘仍然无法释放文件系统层未使用的块层存储资源。

当前,为了支持自动释放,需要满足三个条件:

  1. 云盘选择 virtio-scsi 总线类型;
  2. qemu 启用 discard 选项 unmap;
  3. 虚机文件系统 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

- 目录 -