如果你想查看最准确、最实时的 Linux 文件系统使用百分比,直接查看 df -h 输出中的 Use% 列就是最佳做法,因为它展示的是内核超级块里的实时状态。相比之下,du 命令无法识别已删除但尚未释放的文件,还会受到保留空间和权限限制等因素影响,因此通常不能提供准确的磁盘使用率统计。

直接使用 df -h,查看 Use% 这一列即可。 这是查看 Linux 磁盘使用率最准确、最快捷、也最常见的方法,不依赖具体目录路径,也基本不受缓存或目录权限影响。
为什么不能用 du 计算文件系统使用率?
du 统计的是文件实际占用的磁盘块,而文件系统使用率则是内核从超级块中读取的实时结果——两者的统计口径不同,实际数值可能相差很大:
du不会统计已删除但仍未释放的文件(也就是仍被进程占用的 inode)du无法体现 reserved blocks(例如 root 预留的 5% 磁盘空间)du会跳过没有读取权限的目录,导致结果偏低- 即便执行
-sh /,得到的也只是当前目录下可见内容的大小,并不是整个/dev/sda1分区的真实使用百分比
df -h 输出里哪些字段最重要?
重点需要关注三列:Use%、Mounted on、以及对应行的 Filesystem:
Use%才是真正需要重点查看的数值,通常超过 90% 就应该开始预警Mounted on用来说明这个使用率对应的是哪个挂载点,比如/、/homeFilesystem显示底层设备名称,例如/dev/nvme0n1p2,排查问题时可结合lsblk一起核对- 注意:
A vailable不等于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统计进去
如果你想监控 Linux 磁盘使用率,只需要重点盯住 df -h 中的 Use%;如果你想进一步找出究竟是哪些目录或文件在大量占用空间,再使用 du -sh 进行排查。两者配合使用没有问题,但不要拿 du 的结果去反推 df 的使用百分比——因为它们的底层统计逻辑完全不同,强行换算往往只会得出错误结论。
