openstack场景下ceph 块存储空间释放

问题描述

在OpenStack云环境中,有这样一种场景,用户在虚拟机中创建了大文件,使用完之后删除了这个文件,但实际上,这个文件在底层ceph的存储系统上空间并没有释放。

当用户在虚拟机层的文件系统中删除一个文件,并不会在ceph的rbd设备上的空间填0,而仅仅是在元数据上打上墓碑记录,因此,虽然虚拟机的文件系统知道这些block是未使用的,但在ceph层存储系统并不知道vm文件系统做的操作,依然会认为是有效数据,空间并不会被释放,

解决办法:

1.在image上打上hw_scsi_model和hw_disk_bus的property

glance image-update --property hw_scsi_model=virtio-scsi --property hw_disk_bus=scsi $image_id

其中,hw_scsi_model=virtio-scsi 是指libvirt使用virtio-scsi控制器,hs_disk_bus=scsi是指libvirt使用scsi总线连接磁盘到控制器。

2、nova.conf配置文件包含以下配置

[libvirt]

hw_disk_discard = unmap

验证:

  有两种方式可以触发Trim/Discard请求,一种是由文件系统自动完成,一种是用户通过执行命令来完成。

一、文件系统自动完成

  只要在挂载文件系统时指定discard参数即可,比如 mount -t ext4 -o discard device mountpoint,这样在文件系统中删除文件后会自动触发Trim/Discard操作,在块设备上释放占用的空间,

需要注意的是,如果image未经过上述配置,那么在mount -o discard的时候会报错not support

二、用户执行命令

  用户可以执行命令fstrim来触发Trim/Discard操作,采用这种方式mount文件系统时不需要discard参数。比如,fstrim -v mountpoint,就会释放对应块设备上不用的空间。

  需要注意的是,mount的discard参数会导致文件系统性能下降,在并发删除大量小文件时变得很慢,因此需要根据具体场景选择合适的长发方式。

在vm中生成一个大文件

查看ceph层面的rbd设备

删除这个rbd设备

可以看到,当前这个卷在mount的时候开启了discard

此时,rbd空间会自动释放。

但正如上文所说,如果mount时开启了discard对性能会有所影响,根据实际场景选择是mount discard或者fstrim -v mountpoint的方式来释放空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值