df -h 是首选命令,它以人类可读格式显示各挂载分区的总容量、已用、可用(avail)及使用率(use%),avail 已扣除 root 保留空间,但受已删未释放文件、inode 耗尽和虚拟文件系统影响。

直接用 df -h 就能看清所有已挂载分区的剩余可用空间,Avail 列就是你要的答案;但注意它不等于“你随便写就能写进去的空间”,有些坑得提前知道。
为什么 df -h 是首选命令
df -h 显示的是文件系统级的实时可用空间,不是估算值,也不依赖目录遍历,响应快、结果准。它自动把字节数转成 GB/MB 格式,Avail 列已扣除 ext4 默认 5% 的 root 保留空间,普通用户看到的就是真实可写上限。
- 只看根分区:运行
df -h / - 想同时知道文件系统类型(比如区分
ext4和xfs):加-T,即df -hT - 避免被子挂载点干扰(例如
/var/log单独挂载时):用df -h --max-depth=1 / -
tmpfs或devtmpfs行不用管——它们是内存虚拟文件系统,Size是内存上限,不占磁盘
df -h 显示的 Avail 为什么比你预估的小
常见原因有三个,且都和 df 本身无关,但它会如实反映结果:
-
已删未释放的大文件:某进程还在往一个已被
rm的日志文件写,空间不会归还。现象是df显示满,但du -sh /var/log算出来不大。查法:lsof +L1找到 “deleted” 状态的句柄,重启对应服务 -
inode 耗尽:
df -i查IUse%,若接近 100%,即使Avail还剩很多,也会报 “No space left on device” -
挂载点嵌套或 bind mount:比如
/mnt/data是单独挂载的,但又被 bind 到/home/user/data,df会显示两次,别误判为同一块盘
什么时候不能只信 df -h
它只告诉你“分区级”剩余,不告诉你“哪个目录在吃空间”。如果 Avail 已低,下一步必须定位源头:
- 快速找大目录:
du -sh /* 2>/dev/null | sort -hr(根下一级) - 精准到子目录:
du -sh /var/* 2>/dev/null | sort -hr | head -5 - 避免卡死(尤其大
/home):ncdu /更友好,支持交互式钻取 - 注意
du和df差值过大时,大概率是上面说的“已删未释放”或权限跳过(du遇到无权读的目录会跳过,df不受此影响)
真正容易被忽略的,是 Avail 值背后那层“文件系统语义”——它不是裸设备剩余,而是经过保留空间、块对齐、inode 分配策略层层过滤后的结果。盯着 Use% 超 90% 就动手,比死磕数字更可靠。











