df 是什么
df 报告已挂载文件系统的空间使用情况,同时给出两套口径:块空间与 inode 数量。它读取的是文件系统元数据,因此速度极快、数值可靠,适合作为容量判断的第一依据。要记住它是文件系统视角而不是目录视角:df /var/log 显示的是 /var/log 所在文件系统的整体情况,与目录下有多少文件无关,这也是它和 du 结果经常对不上的根本原因。
基本信息
| 适用平台 | Linux、macOS、BSD(GNU coreutils / BSD df);--output、-x 等属 GNU 扩展 |
|---|---|
| 命令语法 | df [选项] [文件或挂载点...] |
| 常用选项 | -h 人类可读、-T 显示文件系统类型、-i 显示 inode 使用、-a 包含伪文件系统、-x 排除指定类型、--output 自定义列、-P 使用 POSIX 格式、--total 附加总计行 |
| 权限要求 | 普通用户即可执行;不同用户看到的结果一致,不受目录权限影响 |
| 两套口径 | 默认输出块空间(1K-blocks、Used、Avail、Use%),加 -i 切换为 inode(Inodes、IUsed、IFree、IUse%) |
典型使用场景
- 容量巡检:一条 df -hT 掌握所有挂载点的使用率与文件系统类型
- 写入失败初判:应用报 No space left on device 时先确认是块空间还是 inode 耗尽
- 挂载确认:新建挂载后确认挂载点存在、类型正确且容量符合预期
- 阈值筛选:配合 awk 过滤出使用率超过 80% 的挂载点用于告警
- 定位归属:对某个路径执行 df 确认它落在哪个文件系统上
- 文件系统类型判断:确认是 ext4 还是 xfs,决定后续用哪些工具与参数
常用示例
常用示例
df -hT
df -i /var # 只看 inode
df -h --output=source,fstype,size,used,avail,pcent,target
df -h | awk 'NR==1 || $5+0>=80' # 只看使用率 80% 以上的行
df -h -x tmpfs -x devtmpfs # 排除内存文件系统
df -hT --total # 附加总计行
df -P /var/log # POSIX 格式,字段固定便于解析
df -ih | awk '$5+0>=80' # inode 使用率超阈值输出逐列读法
| 列 | 含义 | 怎么看 |
|---|---|---|
| Filesystem | 设备名或文件系统标识 | LVM、overlay、tmpfs 一眼可辨 |
| Type | 文件系统类型(-T 才有) | 决定 inode 是否固定 |
| Size | 文件系统总容量 | 与磁盘规格对比时注意文件系统开销 |
| Used | 已使用量 | 包含保留给 root 的部分 |
| Avail | 普通用户可用量,通常小于 Size 减 Used | 差异来自预留块,不是计算错误 |
| Use% | 使用百分比 | 接近 100% 且 Avail 变 0 才是真的写满 |
| Mounted on | 挂载点路径 | 确认路径与预期一致 |
Avail 小于 Size 减 Used 是正常的:ext4 默认把约 5% 的块保留给 root 与关键进程使用(这个比例可以在建文件系统时用 -m 调整),另外文件系统自身还需要元数据空间。看到这部分差值就把容量规划算错,是很常见的误判。运维上更要关注 Avail 的绝对值:它决定了还能写入多少数据,而 Use% 只反映比例。
df 与 du 的口径不同:df 统计文件系统层面被占用的块,du 统计目录树里可见文件占用的块。两者差得离谱时,优先怀疑已删除但仍被进程持有的文件、容器分层存储(overlay2)、以及挂载点嵌套导致的重复统计,而不是继续找隐藏文件。
默认输出包含 tmpfs 与 devtmpfs 这类内存文件系统,它们的容量看着小、使用率看着高,容易干扰判断与告警。做容量巡检时用 -x tmpfs -x devtmpfs 排除,或明确只对带 -T 的真实块设备挂载点做判断。脚本解析建议使用 -P 固定字段顺序,或用 --output 指定列名;默认格式在挂载点路径很长时会折行,按列解析容易错位。