Linux 磁盘空间异常爆满,该怎么查?

DevOps技术栈

共 1576字,需浏览 4分钟

 ·

2022-11-24 23:52


原文链接:https://blog.csdn.net/weixin_38889300/article/details/121347245


在服务器运维过程中,我们时常会遇到这样的情况,收到服务器磁盘空间告警:

登录服务器,通过df -Hl查看

和告警信息一致,接着我们就是要找到导致磁盘空间满的目录或文件。

如何找到占用空间大的目录或文件?

一种比较笨的方法是,在根目录下,通过du -hs命令,列出各目录所占空间大小

之后再用同样的方法继续到对应目录下去找

再相对高效一点的方法是通过du的-d参数,或--max-depth,设置查询的目录深度,目录深度增加,所查询的目录,展示出来会很多,这个时候可以通过grep进行过滤。

du -h -d 2|grep [GT] |sort -nr  
du -h --max-depth=2|grep [GT] |sort -nr  

通过这样的方式,可以搜出以G或者T为单位的占用磁盘空间的大目录,并排序

或者可以通过find来查询

find / -type f -size +1G -exec du -h {} \;  

从效率上来说,find要比du要更快速、灵活。

通过这两种方法,我们可以快速找到占用磁盘空间的罪魁祸首。

你以为就这么简单?很多时候,你会发现,通过find或du查半天,发现所有加起来的占用空间,和df看到的磁盘空间占用,相差很大,就比如我上面的两张图。

通过df查看,磁盘使用37G,但是在根目录下通过du -hs 查看,总共加起来差不多10G,没有隐藏目录,那空间被谁吃了?

很明显,有空间被已删除文件占用,文件删除了,但是资源没释放。

之前介绍过一个很好用的命令:lsof,我们可以通过以下命令去查看

lsof +L1  

从结果可以看出,有一个28G左右的大日志文件,删除了,但是空间没释放,这是很常见的一种情况。

对应的解决方法就是,重启tomcat应用,释放空间

磁盘空间莫名被吃?

还有一种经常有人问的问题,就是,通过df查看到的磁盘

会发现,Used和Avail加起来不够Size,莫名被吃掉一部分

其实这是Linux文件系统的一种安全策略,它默认会为root用户保留5%的磁盘空间,留作紧急情况使用。这样能保证有些关键应用(比如数据库)在硬盘满的时候有点余地,不致于马上就 crash

我们可以通过tune2fs修改预留空间的比例

tune2fs -m 1 /dev/vda1  

通过下图可以看到前后对比

这样被吃掉的空间,就释放出来了!

- END -

 推荐阅读 





31天拿下K8S含金量最高的CKA+CKS证书!
Linux内核参数引起的 K8s 集群血案
K8S运维必知必会的 Kubectl 命令总结,收藏好了~
16 张图硬核讲解 Kubernetes 网络
史上最全 Jenkins Pipeline流水线详解
分享几个 Kubernetes 逻辑图和架构图
9 个实用 Shell 脚本,建议收藏!
几个必不可少的Linux运维脚本!
40个 Nginx 常问面试题
Kubernetes 网络排查骨灰级中文指南
Dockerfile 定制专属镜像,超详细!
主流监控系统 Prometheus 学习指南
一文掌握 Ansible 自动化运维
100个Linux Shell脚本经典案例(附PDF)
搭建一套完整的企业级 K8s 集群(二进制方式)


点亮,服务器三年不宕机

浏览 38
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报