Linux 磁盘满了怎么办:从 df 到 du 的排查路线

举报
yd_251613605 发表于 2026/11/11 10:09:19 2026/11/11
【摘要】 磁盘满了怎么办?先用 df -h 和 df -i 看整体,再用 du -sh 一层层定位大目录,接着处理 journal 日志,最后用 lsof 找出已删除却仍被进程占用的文件,按这条路线排查,大多数情况十分钟内就能恢复。

磁盘满了,是 Linux 运维中最常见的故障之一:服务写不进日志、数据库拒绝写入、部署失败,根因常常只有一个——分区没有剩余空间。不要急着删文件,先按固定路线排查:先看整体,再定位大目录,最后处理日志和“已删除仍被占用”的文件。

一、先看整体:df -h 和 df -i

第一步是确认“满”在哪里:

df -h
df -i

df -h 显示每个挂载点的总容量、已用和可用空间,重点看根分区 /,以及 /var、/home 等独立挂载点。df -i 看 inode 使用率:小文件太多时,磁盘有空间、inode 却耗尽,同样写不进文件。

二、定位大目录:du -sh 一层层往下找

确认分区后,用 du 从顶层一层层往下钻:

du -sh /* | sort -rh | head -20
du -sh /var/* | sort -rh | head -20

du -sh 只统计一级目录的总大小,配合 sort -rh 倒序排列,最大嫌疑立刻现形;找到最大的目录后重复同样的命令,直到定位到具体文件。

三、日志是最常见的“元凶”

定位到 /var/log 偏大时,先看是谁在写:

journalctl --disk-usage
journalctl --vacuum-size=500M
du -sh /var/log/* | sort -rh | head

systemd 的 journal 日志、日志轮转失效、某个服务疯狂输出 error 日志,都可能在几小时内吃掉几十 GB。journalctl --vacuum-size 可以把 journal 压缩到指定大小。

四、删了文件,空间却没回来:lsof

文件已经 rm 掉了,df 显示空间却没有变,是最容易踩的坑:某个进程还打开着这个文件,内核只有等进程关闭文件描述符后才会真正释放空间:

lsof | grep deleted

找到占用者后重启对应的服务;对日志文件,更稳妥的是用 : > 文件名 截断,而不是删除,空间立刻释放,进程也不必重启。

五、收尾与预防

清理完再跑一次 df -h,确认空间确实回来了,并顺手检查 /tmp 和备份目录。长期预防:给关键分区设置用量告警,配置 logrotate 做日志轮转。按 df、du、日志、lsof 这条路线走,大多数情况十分钟内就能定位并恢复。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。