Linux磁盘空间不足如何排查_df与du命令实战技巧

6次阅读

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

Linux磁盘空间不足如何排查_df与du命令实战技巧

磁盘空间不足时,dfdu 是最直接、最可靠的两个命令。关键不是单独用哪个,而是按顺序配合使用:先用 df 锁定“真满”的分区,再用 du 定位“谁在吃空间”,最后结合 findlsof 排查隐藏占用。

第一步:用 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 类型
text=ZqhQzanResources