一次 KVM 虚拟机磁盘占满的排查过程

KVM 虚拟机系统为 CentOS,文件系统为 XFS。

现象如下:

  1. 使用 df -h 命令发现磁盘剩余空间为30k(总大小为30G),使用 df -i 发现 inode 可用数量为 800(总数为18w,正常状态为1000w+)
  2. 虚拟机为初始状态时,磁盘空间使用都正常

排查如下:

  1. 查看了几个日志,大小都在10M以下,并且这些日志几乎一一对应,不存在某个日志比其它多几个数量的问题,又因为是远程客户,于是漏了个文件,干
  2. 使用 du 命令(记住这个命令)排查具体是哪个目录占用的磁盘空间较多,du -h --max-depth=1 / 的结果显示磁盘空间只占用了 25% 左右,另寻它法
  3. 在网上搜索有磁盘文件删除未释放的说法,使用命令 lsof | grep deleted 找到未释放的文件小的可怜只有 10M 左右,这个不成立
  4. 既然磁盘看不出有啥问题,那就从 inode 数量看看,看看哪个目录下打开的文件数量较多 find / -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n -r | head -n 20 最多的目录还是 man 下的,最多5000,最多的20个目录下的数量相加不足50%,这个也不成立
  5. 从文件系统的角度看看,是不是碎片太多了需要回收一些这个碎片,找到磁盘号 df -aT | grep -w xfs,如果我的文件系统是 /dev/vda3, 那么通过xfs文件系统的命令 xfs_db -c frag -r /dev/vda3 看到只有 1.7% 的碎片,清理碎片 xfs_fsr /dev/vda3, 然而并没啥用处,再次查看只减少了 0.1% 的碎片
  6. 裂开了,找不到解决方案,于是向红帽发了封邮件(未回)

因为一下拿不出解决方案,只能硬着头皮把这个虚拟机从客户那搞回来,恢复现场,有了进展

  1. 解压完后这个镜像文件有 30G,没多想,就是觉得有的大
  2. 尝试对这个镜像文件进行磁盘扩容,qemu-img resize , 在这之前实验了一下一个临时的虚拟机,其中一个命令 qemu-img info 发现两个虚拟机的 virtual size 都是30G,但是显示临时虚拟机的disk size 只有6G,而那个有问题的虚拟机 disk size 刚好是 30G,目前这个虚拟机还没有启动,肯定是里面真的占用了这么多磁盘
  3. 于是准备把里面的日志文件拿出来在 vscode 中看一下,然后使用 virt-copy-out 一个文件时发现有一步巨慢,好了后看了一下这个文件 20G+,du的结果加上这个文件大小刚好就是总的大小,磁盘的问题就解决了,至于为什么这么大那是业务的东西了

由于和业务相关,所以写的还是有点模糊,这里解释一下

  1. xfs 文件系统的 inode 总数是会变的,在剩余磁盘空间不足5%时,开始减少
  2. 最最最重要的一个点,那个忽略的文件是被隐藏的(挂载内核),ls du 等命令是发现不了这个文件的,刚好人为的疏忽加上隐藏的特性导致排查的困难
  3. 碎片的清理功能还是很有用的,在宿主机上清理一下有几十的碎片被清理

一次 KVM 虚拟机磁盘占满的排查过程的更多相关文章

  1. KVM -> 虚拟机磁盘管理_03

    1.KVM磁盘管理 1.KVM qcow2.raw.vmdk等镜像格式说明:http://blog.csdn.net/zhengmx100/article/details/53887162 raw: ...

  2. 更改kvm虚拟机磁盘大小

    kvm 虚拟机的磁盘大小可通过命令:qemu-img resize filename size 来改,要注意的是resize只支持raw格式的磁盘文件,如果想更改qcow2等格式的磁盘大小,需先用qe ...

  3. nohup磁盘打满问题排查与解决

    使用nohup ... & 命令启动服务器后,磁盘满了,服务宕了,然后一步一步排查是哪个文件过大,最终定位到是nohup.out文件过大,占了40G, df -lh #磁盘容量命令 du -s ...

  4. 记录一次数据库CPU被打满的排查过程

    1 前言 近期随着数据量的增长,数据库CPU使用率100%报警频繁起来.第一个想到的就是慢Sql,我们对未合理运用索引的表加入索引后,问题依然没有得到解决,深入排查时,发现在 order by id ...

  5. Linux磁盘占满 no space left on device

    假如当前文件删除了,如果还有其他进程还在使用这个文件,这个文件删不干净:https://www.cnblogs.com/heyonggang/p/3644736.html 在Linux下查看磁盘空间使 ...

  6. jenkins导致磁盘占满问题

    背景 今天登陆jenkins提示磁盘空间不足,且构建发生错误 排查问题 cd到jenkins 安装目录 执行df -h 发现root目录沾满 执行 du -ah --max-depth=1 发现是.j ...

  7. 【问题记录】 Linux分区磁盘占满,导致ssh登陆闪退

    问题描述 今天要去后台看日志查个问题,通过ssh登陆到服务器后准备用平时非常熟悉的less命令打开日志查看,突然xshell客户端就闪退了.一时感觉很蒙,怎么回事??由于之前有同事遇到类似的问题,提醒 ...

  8. openstack kvm 虚拟机磁盘差异衍生

    1, openstack虚拟实例备份之--多镜像格式多镜像文件合并为一个镜像文件衍生-差异镜像文件    /var/lib/nova/instances/b0abc22f-1a73-4079-b1bc ...

  9. Docker启动出现"No space left on device" 或者 docker日志太多导致磁盘占满问题

    机房有一台服务器上面部署了多个docker容器, 并且每个docker容器都往stderr中源源不断的输出日志,导致磁盘被占满了.Docker容器在启动/重启的时候会往/var/lib/docker中 ...

随机推荐

  1. Android Widget开发过程中的一些问题汇总

    一.基本实现要点 布局文件 配置文件 控制文件 AndroidManifest.xml

  2. 用JTable 实现日历

    效果图: 主要思想:日历最核心的功能就是能显示某年某月对应的日期和星期几.因此只要实现传入具体的年份和月份,得到一组存放了日期的数组a[ ]即可.其中数组的大小设置成42,要考虑的问题是当月的第一天对 ...

  3. Python练习题 031:Project Euler 003:最大质因数

    本题来自 Project Euler 第3题:https://projecteuler.net/problem=3 # Project Euler: Problem 3: Largest prime ...

  4. kubernetes下jenkins实战maven项目编译构建

    关于kubernetes环境的jenkins集群 在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下所示: 在kubernetes搭建jenk ...

  5. DevOps元素周期表—2号元素Kibana

    Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作.您可以使用 Kibana 对 Elasticsearch 索引 ...

  6. Java bean 链式获取成员变量无需判空的工具设计

    Java bean 链式获取成员变量无需判空的工具设计 本篇文章已发布至公众号 Hollis 对于Java程序员来说,null是令人头痛的东西.时常会受到空指针异常(NPE)的骚扰.连Java的发明者 ...

  7. 多测师讲解内置函数 _format_高级讲师肖sir

    #python中的格式化输出:format()# 和%号格式化输出一样,是%号的另外一种格式#1.不设置指定位置,按默认顺序 a ='{}'.format('hello','nihao','dajia ...

  8. 【Xshell】xshell6强制升级修改!

    使用sublime text打开nslicense.dll文件,把0f86 8100 0000 33c0 68fe 0100 0050 6689中的0f86 8100修改为0f83 8100然后保存即 ...

  9. Jenkins环境搭建(7)-集成钉钉消息推送

    在去年的时候,搭建了一套Jenkins环境,基本功能已实现,可以通过如下地址查阅. Jenkins环境搭建(1)-下载与安装 Jenkins环境搭建(2)-搭建jmeter+ant+jenkins自动 ...

  10. BUUCTF-misc九连环 详解

    这个没什么玄学,我们解压出来一张照片,放到hxd中搂一眼,最后结尾的那几行中看到了zip压缩包的结尾标识符,难道这里面还有压缩包,于是我们就formostlrb 果然有图片有压缩包 我们打开压缩包看到 ...