Linux磁盘空间不足排查需协同使用df与du:先用df -h和df -i确认文件系统级占用及inode耗尽情况,再用du -sh配合--max-depth定位高占用目录,结合find筛选大文件,最后用lsof +L1识别已删未释文件。

如果您发现 Linux 系统提示磁盘空间不足,但无法快速定位具体原因,则很可能是由于文件系统实际占用与目录统计结果不一致所致。df 与 du 的差异常掩盖真实瓶颈,以下是基于二者协同使用的精准排查步骤:
一、确认全局磁盘使用状态
df 命令反映的是文件系统级的磁盘占用,包含保留空间、已删除但未释放的 inode 等,是判断“是否真满”的第一依据。它不依赖文件遍历,结果实时且权威。
1、执行 df -h 查看各挂载点使用率,重点关注 Use% ≥90% 的分区。
2、对高占用分区(如 /var 或 /home)单独运行 df -i 检查 inode 是否耗尽。
3、若某分区 df 显示已满但 du 统计远小于此,需怀疑存在被删除但仍被进程占用的文件或挂载点干扰。
二、定位高占用目录(du 基础扫描)
du 命令从指定路径出发递归统计文件块占用,用于识别“谁在吃空间”。必须配合合理参数避免误统计或性能阻塞。
1、进入疑似高占用挂载点根目录,例如 cd /var。
2、运行 du -sh * 2>/dev/null | sort -hr | head -n 10 列出子目录前十名汇总大小。
3、对排位靠前的目录重复执行相同命令,逐层下沉,例如 du -sh log/* 2>/dev/null | sort -hr | head -n 5。
三、深度筛选大目录(max-depth 控制)
当目录层级过深时,全量递归效率低且结果杂乱。--max-depth 参数可限定统计深度,聚焦主干路径,避免陷入冗余子树。
1、在根目录下执行 du -h --max-depth=1 2>/dev/null | sort -hr 获取一级目录总览。
2、对占用突出的一级目录(如 /var),再执行 du -h --max-depth=2 /var 2>/dev/null | grep -E "G|T" | sort -hr 提取 GB/TB 级子路径。
3、将输出结果中含 /log、/cache、/tmp 的行作为重点清理对象。
四、搜索孤立大文件(find 高效补位)
du 对海量小文件遍历缓慢,而 find 可直接按 size 属性筛选,适合快速捕获单体超限文件,尤其适用于日志、core dump、临时归档等典型场景。
1、在目标分区执行 find /var -type f -size +500M -exec ls -lh {} \; 2>/dev/null。
2、限制查找范围以提升速度:例如仅扫日志目录 find /var/log -name "*.log" -size +100M -exec ls -lh {} \;。
3、对匹配到的大文件,用 lsof -nP +L1 | grep /var 检查是否被进程持续写入或持有句柄。
五、识别隐藏空间占用(已删未释/跨文件系统)
部分空间不体现于普通 du 结果中:一是已被 rm 删除但进程仍打开的文件;二是挂载子目录被 du 无差别计入,导致虚高。这两类必须专项验证。
1、检查已删除但仍在占用空间的文件:lsof +L1,重点关注 TYPE 列为 REG 且 NAME 含 (deleted) 的条目。
2、确认是否存在挂载干扰:在 / 下执行 du -xsh * 2>/dev/null | sort -hr,-x 参数强制限制在同一文件系统内统计。
3、对 lsof 发现的 deleted 文件,记录其 PID,执行 kill -HUP PID 尝试安全释放,或重启对应服务。









