linux磁盘排查三步:df定位挂载点瓶颈,du结合排序找大文件,按缓存/日志/残留分类清理;删后用df和lsof +L1验证空间释放。

Linux磁盘空间排查,核心就三步:定位谁占了空间、确认是否可清理、安全释放空间。不靠猜,靠命令链路和逻辑闭环。
看哪里满了:df 定位挂载点瓶颈
df -h 是第一眼必须跑的命令,它告诉你每个挂载点的使用率。重点看 Use% 列,超过 85% 就该警惕。注意不是看 / 而是看实际业务挂载点,比如 /home、/var、/data —— 很多服务日志或数据默认写在这些位置,根目录可能没满,但 /var/log 却塞爆了。
- 加 -i 参数(df -ih)查 inode 是否耗尽,小文件多时常见“空间还有剩,却写不进新文件”
- 如果看到某挂载点显示 100%,先别急着删,用 df -th 确认文件系统类型和块大小,排除误报或只读挂载等异常
找什么占了:du 结合排序挖大文件/目录
确定挂载点后,进到对应路径(如 cd /var),用 du -sh * | sort -hr | head -20 快速列出前 20 个最大子目录。注意:du 统计的是当前用户有权限读取的路径,若权限不足会跳过并报错,此时可加 2>/dev/NULL 过滤干扰。
- 想看具体大文件?用 find . -type f -size +100M -exec ls -lh {} ; 2>/dev/null | head -10
- 常见“空间黑洞”:/var/log/journal(systemd 日志)、/var/cache/apt/archives(debian系残留包)、docker 的 /var/lib/docker/overlay2(镜像/容器层未清理)
判断能不能删:分清“缓存”“日志”“残留”三类
不是所有大目录都能直接 rm -rf。先分类再操作:
- 缓存类(如 /var/cache):一般可清,apt clean、yum clean all、pip cache purge 等对应工具更安全
- 日志类(如 /var/log):优先用 logrotate 管理;临时清理可用 journalctl –vacuum-size=200M 或清空 .log 文件(> /var/log/syslog 比 rm 更稳妥,避免服务重定向失败)
- 残留类(如 /tmp、/var/tmp、已卸载软件的配置目录):确认无进程占用(lsof +L1 查已删除但仍被占用的文件)再清理
释放后验证:df 和 lsof 双确认
删完别立刻关终端。先 df -h 看空间是否回落;再跑 lsof +L1 —— 如果还有“deleted”状态的文件,说明某些进程仍在写入已被 rm 的文件,空间不会真正释放,需重启对应服务或 kill 进程。
- 特别提醒:Docker 容器里删的文件,宿主机 df 不一定立刻反映,因为 overlay2 层需要 docker system prune 或手动清理未引用的层
- 如果刚清完空间又快速涨回去,大概率是服务持续写日志或临时文件,要用 inotifywait -m /path -e create,modify 实时盯写入行为
基本上就这些。熟练之后,从 df 发现异常到 du 定位再到安全释放,5 分钟内能闭环。关键不是记命令,而是建立“挂载点 → 目录 → 文件类型 → 清理策略”的排查链路。