最准最快方式是直接看df -h的use%列,因其反映内核超级块实时值;du因忽略已删未释文件、保留空间及权限限制,无法准确计算使用率。

直接用 df -h,看 Use% 那一列就行。 这是最准、最快、最常用的方式,不依赖目录路径,也不受缓存或权限影响。
为什么不能用 du 算使用率?
du 统计的是文件实际占用的块,而文件系统使用率是内核从超级块里读出来的实时值——两者可能差很多:
-
du不计入已删除但未释放的文件(即被进程 hold 住的 inode) -
du无法反映 reserved blocks(比如 root 保留的 5% 空间) -
du会跳过无读取权限的目录,导致低估 - 即使加
-sh /,结果也只是当前目录下可见内容大小,不是整个/dev/sda1分区的真实使用率
df -h 输出里哪些字段关键?
重点关注三列:Use%、Mounted on、以及对应行的 Filesystem:
-
Use%是真正要盯的数字,超过 90% 就该预警 -
Mounted on告诉你这个使用率对应哪个挂载点(比如/、/home) -
Filesystem显示底层设备(如/dev/nvme0n1p2),排查时用来比对lsblk - 注意:
Available不等于Free—— 它已扣除 reserved blocks,所以比df -B1算出的空闲字节数小
遇到 “Use% 显示 100% 但还能写” 怎么办?
这通常不是 df 错了,而是 inode 耗尽或 reserved space 触发机制在起作用:
- 先跑
df -i,检查IUse%是否接近 100% —— 小文件太多会导致 inode 先满 - 用
sudo tune2fs -l /dev/sdXN | grep "Reserved block count"查 reserved 比例,默认 5%,root 用户仍可写 -
df -h显示 100% 时,普通用户确实会被拒绝写入,但 root 不受影响 - 别信
du -sh / | sort -h的总和 —— 它加不出df的Used,因为元数据、journal、holes 都不算进du
真正要监控使用率,就盯 df -h 的 Use%;想定位谁占空间,再切到 du -sh。混用两者没问题,但别用 du 反推 df 的百分比——底层逻辑不同,硬算只会误导。











