Linux df 命令:查看文件系统可用空间、使用率与 inode

df 查询已挂载文件系统的总容量、已用空间和可用空间。要判断某个路径所在文件系统是否已满,可用 df -h 路径;它读取文件系统统计,不是统计该目录本身的大小,后者应结合 du 的目录用量查询。

可用空间通常面向普通用户,可能因为保留空间等原因不等于“总量减已用量”。容量尚有余量时,inode 用尽也可能使新文件无法创建;因此应分别检查数据块和文件索引资源。

基本语法与查询范围

df [options] [file or mount point]

方括号内是说明性的占位符,不应原样输入。参数可以是现有文件、目录或挂载点;结果表示该路径所属文件系统的空间,不是文件自身的大小。没有路径参数时,GNU df 列出已挂载文件系统,默认会省略部分重复、虚拟或不可访问的条目。

安装的实现和选项可能不同,先用 man df 或 df --help 核对。GNU df 不会扫描未挂载分区来推算用量;看到列表中没有某个磁盘,不能据此断定它不存在或没有数据。

常用查询示例

查看已挂载文件系统的容量。

df -h

-h 使用便于阅读的大小单位,按 1024 的幂缩放;-H 使用 1000 的幂。不要把显示的 G 简单当作磁盘厂商使用的十进制 GB,也不要在比较结果时混用单位。文件系统、设备名与挂载点会随环境不同。

定位 /var 所属文件系统。 该目录须在目标系统存在:

df -h /var

如果 /var 没有独立挂载,结果可能与 / 相同;如果它单独挂载,则查询对应文件系统。对 /var/log 中写入失败的情况,应查看实际写入路径所属的挂载,而不是只看另一块空闲磁盘。路径不存在时要先处理错误,不能把没有结果解读成“空间为零”。

检查 inode 用量。

df -i /var

inode 是 index node,即保存文件元数据和数据位置等信息的索引节点。观察 Inodes、IUsed、IFree 与 IUse%:大量小文件可能先耗尽可用 inode。某些文件系统或兼容环境不提供这些统计,显示 - 等占位时不能把它当作零个剩余 inode。

怎样读取容量和使用率

只查询根目录所属文件系统:

df -h /

以下为结构示意,设备名和数值不是当前主机实测:

Filesystem  Size  Used Avail Use% Mounted on
/dev/sda2    40G   18G   20G  48% /
  • Filesystem 是文件系统来源,常见为设备,但也可能是网络来源或其他名称。
  • Size、Used、Avail 分别表示总量、已用量和可用量;Mounted on 是挂载点,本例为根目录 /。
  • Use% 是工具报告的空间使用率。不能只拿经过缩放和舍入的显示值重新相除,便认定输出错误。

本例中 40G 减 18G 不等于显示的 20G,这可能与文件系统保留空间以及显示舍入有关。GNU df 的使用率计算也会考虑可用空间的口径,因此不要机械地用显示的 18÷40 推导本例必须为 45%。要比较精确数量,可在支持时用 df -B1 --output=size,used,avail,pcent / 固定字节单位和字段。

Avail 反映文件系统层面的可用量,不保证某一账户一定能写入同样大小的数据。写入权限、配额、只读挂载或其他限制仍可能使写入失败;先阅读应用和系统错误,再决定排查方向。

主要选项与输出字段

选项 作用与条件
-h 以 1024 的幂缩放大小,适合人工查看。
-T 同时显示文件系统类型,例如 ext4、xfs。
-i 查询 inode 用量,替代默认的数据块统计。
-t TYPE 只列出指定类型;TYPE 须替换为实际文件系统类型。
--output=fields 按指定顺序选择字段,为 GNU 扩展。

例如 df -hT /var 同时查看类型与容量,df -t ext4 只列出 ext4 类型。没有匹配类型时可能以失败状态结束,并不代表整个系统没有磁盘。

GNU df 的 --output 可选择 source、fstype、size、used、avail、pcent、target 等字段,但不能与 -i、-P 或 -T 混用。需要类型时直接选择 fstype;需要 inode 列时选择 itotal、iused、iavail、ipcent。自动化应固定语言环境和单位,检查退出状态,不能假设任意默认输出的列位置和标题都一致;来源或挂载路径含空格时还要考虑解析方式。

df 与 du 不一致时如何排查

先确保二者针对同一个文件系统、相同统计范围和单位。du 遍历可访问的文件目录;权限不足、子目录跨越其他挂载、硬链接统计方式或稀疏文件的逻辑大小与实际占用差异,都可能影响比较。不要将一个目录的合计直接等同于整个文件系统用量。

删除文件的最后一个硬链接后,只要仍有进程打开该文件,Linux 就会保留它,直到最后一个相关文件描述符关闭才释放;此时 df 仍可能反映占用,而普通目录遍历已看不到该名字。Linux unlink 的文件生命周期说明解释了这一条件。应定位持有者并按服务维护流程处理,不要未经确认就终止生产进程。

还应结合实际文件系统检查保留空间、快照和共享存储的统计方式。容器、overlay、绑定挂载或网络文件系统中的不同条目可能关联同一后端,不能把每行容量简单相加当成物理总量;GNU df 默认隐藏部分重复挂载,也不意味着所有共享关系都已消除。

df 本身只报告统计,不会清理空间。确认原因后再按备份、保留和服务策略处理文件或容量;不要为让数字变小而直接删除日志、移除快照或修改保留设置。

常见问题

还有可用空间,为什么创建文件仍失败?

先检查实际写入路径所属文件系统,再检查 inode、账户配额、权限和只读状态。df -h 的 Avail 大于零只说明一种空间统计,不能排除这些限制;需要结合具体错误判断。

官方文档

GNU Coreutils 官方仓库中的 df 手册源文档包含 df invocation 节,说明选项、字段和重复挂载处理。使用时仍应与本机版本支持的选项对照。