如何计算磁盘占用率?df命令显示的使用率包含预留空间吗,解析df命令,如何准确计算磁盘占用率及预留空间的影响
钩子
上周朋友公司的服务器突然崩了,运维小哥满头大汗查了半天,最后发现是磁盘悄咪咪塞爆了——明明df
命令显示还剩15%空间,咋就突然写不进数据了?这事儿把我朋友整懵了,也把屏幕前的我拽进坑里:df
命令跳出来的那个百分比,到底藏了多少猫腻?
一、df命令的“障眼法”:5%空间去哪儿了?
别看df -h
命令输出里“Use%”那列明明白白写着“85%已用”,可这里头其实埋了个大坑:Linux的ext家族文件系统(ext2/3/4),默认会偷摸藏起5%的空间专供root用户救命用。

举个例子:一块100G的硬盘,你以为满了是100G,实际普通用户能用的只有95G。假如你用了85G,df
会告诉你利用率是89.5%(85÷95≈89.5%),而不是你以为的85%。
反直觉的真相:
总空间100G → 真实可用95G
你用了85G → 系统显示89.5%已用
剩余空间 ≠ 100G×(1-89.5%)
这种设计初衷是好的——防止普通用户把磁盘塞爆了,导致系统连日志都写不了直接瘫痪。不过话说回来,对不懂内情的人,这简直是个暗雷啊!
二、算不清账?三个坑你别踩
坑1:只看df
数字,忽视“幽灵空间”
很多人以为df
的Use%就是真实使用率,结果像开头那个运维小哥一样翻车。实际空间警戒线得往前推5%:比如你设了90%报警,真实触发点应该是85%左右。
坑2:删了文件,空间却不释放
更邪门的是删了大文件,df
显示空间没变!这是因为文件可能还被某个进程偷偷攥在手里(比如没重启的Docker容器)。这时候得用lsof | grep deleted
把幽灵文件揪出来,关掉进程才能释放空间。
坑3:监控脚本掉进“单位陷阱”
有人写脚本用df -BG
(按G显示),但若剩余空间是0.5G,脚本可能误判成0(因为-BG
显示为整数)。结果空间明明没爆,报警先炸了。
三、破局:三招把磁盘算明白
1. 手动校准真实使用率
公式:真实使用率 = 已用空间 ÷(总空间×95%)×100%
拿个50G的盘举例:
总空间50G → 真实容量47.5G
用了30G → 真实使用率=30÷47.5≈63.2%
(
df
显示63%,这次倒是对上了)
2. 给监控脚本加“空间缓冲层”
运维老炮的报警规则分三层:
硬红线:>90% 必须立刻处理
软警戒:>80% 且 剩余<30G → 周内清理
观察区:>70% 且 剩余<50G → 标记观察
3. 调预留比例(慎用!)
觉得5%太多?用tune2fs -m 1 /dev/sda1
改成1%。但别手贱调成0——系统崩溃时没预留空间写日志,可能连故障原因都查不到!
结语:数字背后是人性
朋友后来把预留空间调到2%,加上了分层报警。服务器再没爆过盘。技术参数里的每一个百分比,或许暗示着设计者与使用者之间的信任博弈——系统怕你乱来,你嫌系统藏私。
不过话说回来,具体到不同文件系统(比如XFS、ZFS)的预留机制,我这还有盲区。但至少下次看见df
跳数字,你会多问一句:
这5%的空间,到底是救命稻草,还是视觉骗局?