应先用df -h和df -i联合检查分区使用率与inode耗尽情况,再用du -sh --max-depth=1定位大目录,结合lsof +L1排查已删未释放文件,最后针对性清理日志、缓存等。

日常维护文件系统,关键不是等磁盘报警才行动,而是靠 df 和 du 主动发现隐患、定位问题。两者分工明确:df看“分区整体剩多少”,du看“目录里谁吃得多”。用对了,90%的磁盘空间问题都能提前化解。
快速摸清分区健康状态:用 df -h 和 df -i 一起看
只看 df -h 容易漏掉致命问题。必须同时运行:
-
df -h:关注 Use% 和 Avail 列。Use% ≥ 90% 就该清理;Avail 接近 0 表示写入可能失败。 -
df -i:重点看 IUse%。哪怕 Avail 还有几十 GB,IUse% 达到 100%,新文件就建不了——这是小文件(日志、缓存、邮件)堆满 inode 的典型表现。 - 搭配使用
df -hT,能一眼看出哪个分区是 ext4、xfs 或 tmpfs,方便判断是否支持配额或快照等特性。
精准定位空间“大户”:du 要加 -sh 和 --max-depth
直接 du -sh * 在大目录下容易卡住或跳过无权限路径。推荐组合:
-
du -sh --max-depth=1 /var/* | sort -hr:只查一级子目录,避免递归耗时,结果按大小倒序排列,一眼锁定 /var/log、/var/lib/docker 等可疑目标。 -
du -sh /path/to/dir:确认某个目录总大小,不展开内部结构,响应快。 - 遇到含空格或特殊字符的目录名,改用
find /path -maxdepth 1 -mindepth 1 -print0 | xargs -0 du -sh | sort -hr,更健壮。
当 df 和 du 结果对不上:优先排查三类常见原因
df 显示已用 80%,du 统计只有 50%?这不是 bug,是统计逻辑不同。先查:
-
被删但未释放的文件:执行
lsof +L1,列出 link count 为 0 却仍被进程打开的文件。重启对应服务或 kill 进程才能真正释放空间。 -
挂载点嵌套:比如 /mnt/data 下又挂载了另一个硬盘。df 按挂载点归属统计,du 会递归进入并重复计算。用
mount | grep /mnt/data确认是否存在子挂载。 -
inode 耗尽或配额限制:
df -i查 inode;若用 btrfs 或启用了 quota,df 显示的是配额视图,du 不感知。此时需查btrfs filesystem usage或quota -u username。
日常巡检建议:两个命令组合成固定动作
把以下操作加入每周运维清单,比等告警更可靠:
- 跑一次
df -hT,记下 Use% > 85% 的分区,检查其挂载点下的业务日志、临时文件、备份残留。 - 对高风险目录(如 /var/log、/tmp、/home)执行
du -sh --max-depth=1,对比历史数据,识别异常增长。 - 清理前先用
du -sh /path | head -20快速预览,避免误删核心数据。

















