如何解决磁盘空洞问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决磁盘空洞问题相关的知识,希望对你有一定的参考价值。

参考技术A 首先qemu在1.5
raw格式,1.6
qcow2格式支持磁盘回收。
libvirt通过xml配置文件可指定discard=“unmap”
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
重启虚拟机,让其生效,这样就可以自动收缩磁盘了。

存储 - 空洞文件

存储 - 空洞文件

不同存储的user quota与什么相比?

NetApp是block base;
Huawei是file size;
Dell EMC是支持两种。

空洞文件如何产生

在支持空洞的文件系统中,如果程序操作的文件偏移量已跨越文件结尾,继续执行IO操作,将会产生文件空洞。它是不占实际空间的。

如何保持文件的空洞

在copy或rsync时,如何保持文件的空洞?参考手册,可以知道以下命令选项可以满足,

$ cp -a <src> <dest>
$ rsync -S <src> <dest>

创建空洞文件

$ dd if=/dev/zero of=./file_with_hole bs=4096 seek=2048 count=1

在这里插入图片描述

检查空洞

$ find . -type f -printf "%S\\t%p\\n"
  • 普通文件,该值等于1.0
  • 空洞文件,但不包含indirect block的,该值小于1.0
  • 非空洞文件,包含indirect block的,该值大于1.0
  • 空洞文件,包含indirect block的,该值不确定

将sparseness值小于1.0的文件过滤出来

$ find . -type f -printf "%S\\t%p\\n" | awk '$1 < 1.0 {print}'

在这里插入图片描述

总结

完毕。

以上是关于如何解决磁盘空洞问题的主要内容,如果未能解决你的问题,请参考以下文章

Mongo实战之数据空洞的最佳实践

如何解决詹金斯“磁盘空间太低”的问题?

hbase如何保证数据完整性,丢失数据该如何解决

问题解决:Ubuntu 磁盘空间占满如何清理

linux挂载磁盘就变只读如何解决

如何填补自增字段中的“空洞”?