磁盘空间不足时应按df→du→find→lsof顺序排查:先用df -h定位高占用分区及inode耗尽,再用du分层扫描大目录,接着用find按大小筛选孤立大文件,最后用lsof识别已删除未释放或稀疏文件等隐藏占用。

磁盘空间不足时,df 和 du 是最直接、最可靠的两个命令。关键不是单独用哪个,而是按顺序配合使用:先用 df 锁定“真满”的分区,再用 du 定位“谁在吃空间”,最后结合 find 和 lsof 排查隐藏占用。
第一步:用 df 快速定位问题分区
df -h 是排查起点,它反映文件系统真实水位,不受目录遍历影响。
- 重点关注 Use% ≥90% 的挂载点,比如
/、/var、/home - 对高占用分区追加 df -i,检查 inode 是否耗尽(常见于海量小文件场景)
- 若某分区显示已满但 du 统计远小于该值,说明存在“已删除但未释放”的文件,或挂载干扰(如 overlayfs、NFS)
第二步:用 du 分层扫描大目录
进入问题分区根目录后,用 du 逐级下沉,避免全盘递归拖慢响应。
- 执行
du -sh --max-depth=1 2>/dev/null | sort -hr查看一级子目录总占用 - 对排名靠前的目录(如
/var/log、/var/cache)继续下钻:du -sh * 2>/dev/null | sort -hr | head -n 5 - 加
--exclude跳过临时挂载点或容器卷,例如du -sh --max-depth=1 --exclude=/proc --exclude=/sys /
第三步:用 find 快速揪出孤立大文件
当 du 在海量小文件中效率下降时,find 按 size 筛选更高效,尤其适合日志、core dump、tar 包等。
- 查找单个 >500MB 的文件:
find /var -type f -size +500M -exec ls -lh {} \; 2>/dev/null - 限定范围提速,如只扫日志:
find /var/log -name "*.log" -size +100M -exec ls -lh {} \; - 对匹配文件运行
lsof -nP +L1 | grep "filename",确认是否被进程持续写入(如 catalina.out)
第四步:识别隐藏空间占用
df 显示满、du 统计小,大概率是以下两类情况:
-
已删除但句柄未释放:执行
lsof +L1(列出已删仍被打开的文件),找到对应 PID 后 kill 或重启服务 -
稀疏文件或挂载覆盖:检查是否有
mount --bind或容器 overlay 卷遮挡了真实路径;用file -s检查疑似大文件是否为 sparse 类型










