Linux 磁盘满了怎么办:从 df 到 du 的排查路线
磁盘满了,是 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 这条路线走,大多数情况十分钟内就能定位并恢复。
- 点赞
- 收藏
- 关注作者
评论(0)