df -h是linux中以人类可读格式查看各挂载分区剩余空间的首选命令,重点观察use%列(≥90%需干预),avail值已扣除root保留空间且受已删未释放文件、tmpfs等影响。

直接执行 df -h 就能看到所有挂载分区的使用率,重点看 Use% 这一列——超过 90% 就得动手清理了。
为什么 df -h 显示的 Avail 比预想中少?
因为 Avail 是普通用户能写的剩余空间,已自动扣除 ext4 默认保留的 5% 空间(root 可用)。这和 Use% 的计算基准一致,所以它看起来“变少了”,其实是设计如此,不是 bug。
常见误判场景:
- 看到
Use%是 92%,以为只剩 8%,其实 root 还能写满最后那 5% - 在脚本里用
Avail做容量判断时没考虑保留空间,导致阈值误报 -
df -h和du -sh结果对不上,但df -i显示IUse%已 100%,说明是 inode 耗尽而非磁盘满
怎么快速定位哪个分区快满了?
别一行行扫,用过滤命令直击要害:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
-
df -h | grep '9[0-9]%\|100%':高亮所有 ≥90% 或 100% 的分区 -
df -h --output=source,pcent,target | sort -k2nr | head -3:按使用率倒序取前 3 名(需 coreutils ≥8.23) -
df -hT | awk '$5 > 90 {print $1, $5, $6}':只打印使用率超 90% 的设备、百分比和挂载点
注意:df -h 不会显示未挂载的磁盘或 LVM 逻辑卷,想看完整设备拓扑得补上 lsblk。
df -h 和 du -sh 结果不一致怎么办?
这不是命令错了,而是它们统计对象根本不同:df 看文件系统超级块,du 看目录树实际占用的块。差异通常来自:
- 已被
rm但仍有进程打开的大文件(lsof +L1可查,重启对应进程释放) - 挂载覆盖:比如
/var/log下挂了另一个文件系统,du -sh /var/log会漏掉子挂载内容 - tmpfs / devtmpfs 类内存文件系统(如
/run,/dev/shm),df -h会显示其大小,但du统计不到——它们压根不占磁盘
最稳妥的排查链路是:df -h 找出高 Use% 分区 → df -hT 确认文件系统类型 → du -sh /* 2>/dev/null | sort -hr 定位大目录 → 必要时 df -i 排查 inode 耗尽。










