Linux 磁盘空间排查:du 与 df 实战
服务器上最常见的告警之一,就是“磁盘空间不足”。网站打不开了、数据库写不进去了、备份任务失败了,查来查去,往往都是磁盘满了。本文用一次真实的排查过程,讲清楚 df 与 du 这两个命令怎么配合使用,帮你快速定位“空间被谁吃了”。
一、先分清:df 看整体,du 看细节
df 看的是文件系统的整体使用情况:哪块盘、总共多大、用了多少、还剩多少。du 看的是目录和文件实际占了多少空间。排查的正确顺序是:先用 df 找到满了的那块盘,再用 du 在这块盘里一层层往下找。
二、df:先看哪块盘满了
df -h
df -i
df -h 以人类可读的方式显示每块盘的使用率,重点看“Use%”这一列,超过 85% 就要警惕了。很多人只看空间,却忽略了 df -i:inode 用完了也会报“磁盘满”,哪怕空间还剩很多。小文件特别多的时候,比如海量的会话文件、缓存碎片,就容易出现这种情况。
三、du:找出占空间的大户
确定是根分区满了,就从根目录开始往下挖:
du -sh /*
du -h --max-depth=1 / | sort -rh | head -n 10
du -sh /var/log/*
du -sh /* 先看一级目录各自的大小,找出最大的那一个,再对它继续深入,比如 /var 大,就查 /var 下面的子目录,一层一层缩小范围。sort -rh 把结果按大小倒序排列,head -n 10 只看前十名,排查效率高很多。注意 du 统计的是目录下所有文件的实际占用,遇到大目录会比较慢,耐心等它跑完。
四、常见的“空间元凶”清单
根据经验,磁盘空间大多被以下几类东西吃掉:
第一是日志。应用日志、Nginx 访问日志、系统日志如果没有做轮转,会一直增长,几个月就能吃掉几十 GB。
第二是缓存和临时文件。包管理器的缓存、应用的临时文件、上传失败的残留文件,时间久了都很可观。
第三是旧备份。备份脚本每天跑一次,却从来不清理旧备份,磁盘迟早会被备份文件塞满。
第四是容器和镜像。Docker 镜像、停止的容器、悬空的卷,长期不清理会占用大量空间。
第五是“已删除但仍被占用”的文件,这是最容易被忽略的一种,下面单独讲。
五、已删除的文件还在占空间
在 Linux 里,删除一个正在被进程使用的文件,文件名消失了,但磁盘空间并不会释放,直到进程退出或者文件被关闭。排查时可以用:
lsof | grep deleted
du -sh /proc/*/fd 2>/dev/null | sort -rh | head
如果发现某个日志文件已经被删除却还占着几个 GB,正确做法是重启相关服务,或者让服务重新打开日志文件,而不是反复 rm,那样是删不掉空间的。
六、安全清理与预防
找到元凶之后再动手清理,不要上来就删系统目录。常见的清理命令有:
journalctl --vacuum-size=200M
apt clean
find /tmp -type f -mtime +7 -delete
journalctl --vacuum-size 用于压缩系统日志,apt clean 清理包缓存,清理 /tmp 时一定要加上时间条件,只删 7 天前的文件。更重要的是建立预防机制:给日志配置 logrotate 做轮转,给备份脚本加上保留天数,对磁盘使用率设置告警,超过 80% 就通知,超过 90% 就处理。
结语
磁盘空间排查并不难,记住口诀就行:df 定盘,du 定位,sort 排序,lsof 查已删文件。先定位再清理,清理之后再上监控和轮转,下次告警来的时候,你就不用再手忙脚乱了。
- 点赞
- 收藏
- 关注作者
评论(0)