如何解决磁盘空洞问题

如果虚拟机创建使用的是本地磁盘模式,那么面临一个问题,就是磁盘空洞,比如你创建了200G磁盘的虚拟机,使用qcow2文件格式,如果没有用“厚制备”方式,一开始它只分配给你很小的磁盘空间,随着写入量增多,文件会越来越大,但是这时候你删除了大量的文件,它的大小并没有减小,因为这需要各个层面配合联动,才能达到“伸缩自如”的效果。

qemu

首先qemu在1.5 raw格式,1.6 qcow2格式支持磁盘回收。

https://lists.gnu.org/archive/html/qemu-devel/2013-08/msg01021.html

libvirt

libvirt通过xml配置文件可指定discard=“unmap”

http://dustymabe.com/2013/06/11/recover-space-from-vm-disk-images-by-using-discardfstrim/

nova

nova通过compute的nova.conf 指定是否开启discard

[libvirt] hw_disk_discard = unmap

虚拟机

virtio-blk io驱动不支持fstrim。 有两个驱动支持 一个是IDE,一个是virtio-scsi, IDE驱动比较老,性能不好, virtio-scsi需要内核支持。
查看内核是否支持virtio-scsi协议

镜像属性

使用virtio-scsi需要glance中对镜像添加属性

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

做完以上这些,你的磁盘就能够“伸缩自如”了。
但是在虚拟机内部执行删除操作后,它不会自动的收缩磁盘,需要手动执行
fstrim操作,那么如何能让它自动进行伸缩呢?

自动fstrim

首先你的虚拟机要使用比较“现代”的文件系统,如ext4,因为它支持discard,修改/etc/fstab文件,加入discard参数。

UUID=xxxx /     ext4    defaults,discard        1 1

重启虚拟机,让其生效,这样就可以自动收缩磁盘了。

本文转载自:http://opsdev.cn/post/jiejue-disk-hole.html?winzoom=1

加入云技术社区技术交流微信群,联系北极熊微信:hadxiaer(加的时候请备注:姓名-城市-公司)

交流 分享 提升

云技术社区成立于2014年,国内最大的云技术交流平台,分享在云计算/虚拟化项目实施中的资讯、经验和技术,坚持干货。旗下运营:云技术实践、云技术、桌面云之云潮涌动等公众号,以及相关的微信群和QQ群,覆盖云计算领域的技术人群,加入云技术社区微信、QQ群请点击订阅号菜单“群和活动”。


相关文章
相关标签/搜索