一、是什么
1.1 基本定义
df 是“disk free”的缩写,是 Linux 和 Unix 系统中用于报告文件系统磁盘空间使用情况的核心命令行工具。它从文件系统层面(而非单个文件或目录)展示已挂载分区的总容量、已用空间、可用空间以及挂载点等关键信息,帮助管理员快速掌握磁盘整体健康状态。
1.2 应用场景
- 系统告警响应:当收到“磁盘空间不足”告警时,第一时间使用
df -h 定位哪个分区已满。 - 容量规划:定期巡检关键分区(如
/、/var、/data)的使用率,预判是否需要扩容。 - 故障排查:应用无法写入日志、数据库启动失败等问题,常与磁盘空间耗尽相关。
- 运维自动化:在监控脚本中集成
df 命令,实现磁盘使用率的自动采集与告警。
1.3 相关对比
df 与 du 是磁盘管理的“黄金搭档”,但定位截然不同:
df:查看文件系统级别的使用情况(宏观视角),回答“哪个分区快满了?”。du:查看目录/文件级别的磁盘占用(微观视角),回答“哪个目录占用了最多空间?”。
“关键区别:df 读取的是文件系统的元数据(超级块),速度快;du 需递归遍历目录树,速度较慢但能定位具体文件。
二、基本语法
2.1 语法格式
df [选项]... [文件或目录]...
2.2 参数说明
| 选项 | 作用 | 典型用途 |
|---|
-h | | |
-i | | |
-T | | |
-a | | |
-t <类型> | | |
-x <类型> | | |
三、常见示例
场景1:快速查看磁盘整体使用情况
场景描述:系统响应变慢,怀疑磁盘空间不足。
具体命令:
df -h
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 200G 80G 110G 43% /
tmpfs 7.8G 0 7.8G 0% /dev/shm
/dev/sda1 500M 60M 440M 12% /boot
结果解读:
/dev/sda2 是根分区(/),使用率 43%,状态健康。tmpfs 是内存文件系统,不占用物理磁盘,可忽略。- 重点关注
Use% 超过 80% 的分区,超过 90% 需立即处理。
场景2:查看指定目录所在分区的空间
场景描述:应用部署在 /opt,需确认该路径所在分区是否有足够空间。
具体命令:
df -h /opt
输出示例:
[root@iZ2zehegwjg73eh63wad2pZ ~]# df -h /opt
文件系统 容量 已用 可用 已用% 挂载点
/dev/vda1 237G 182G 45G 81% /
结果解读:/opt目录所在的文件系统为/dev/vda1,该文件系统的总容量为237G,已使用182G,可用空间为45G,已用百分比为81%。其挂载点为根目录/,表明/opt是根文件系统的一部分,并未被单独分区。当前45G的可用空间需要根据应用部署的实际需求来评估是否充足。
场景3:排查“磁盘有空间但无法创建文件”问题
场景描述:df -h 显示磁盘有剩余空间,但系统提示 “No space left on device”。
具体命令:
df -i
输出示例:
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 10485760 10400000 85760 99% /
结果解读:
- inode 是文件的“身份证”,每个文件需占用一个 inode。
- 此处 inode 使用率高达 99%,说明系统创建了海量小文件(如日志、缓存),导致无法创建新文件。
- 解决方案:清理小文件目录(如
/var/spool/clientmqueue)。
场景4:仅查看物理磁盘分区(排除虚拟文件系统)
场景描述:df -h 输出包含大量 tmpfs、devtmpfs 等虚拟文件系统,干扰判断。
具体命令:
df -h -t ext4 -t xfs
输出示例:
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 200G 80G 110G 43% /
/dev/sdb1 500G 300G 200G 60% /data
结果解读:仅显示 ext4 和 xfs 类型的物理分区,输出更简洁。
场景5:显示文件系统类型
场景描述:需确认某分区是 ext4 还是 xfs 格式,以便执行相应维护操作。
具体命令:
df -hT
输出示例:
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 ext4 200G 80G 110G 43% /
/dev/sdb1 xfs 500G 300G 200G 60% /data
结果解读:Type 列明确显示文件系统类型,便于后续操作(如 xfs 需 xfs_growfs 扩容)。
四、常见问题
问题1:为什么 df 和 du 统计的磁盘使用量不一致?
- 已删除但被进程占用的文件:若一个日志文件被删除,但写入它的进程未关闭文件句柄,
df 仍会计入已用空间(因文件系统未真正释放),而 du 只统计现存文件。 - 解决方案:使用
lsof | grep deleted 查找占用已删除文件的进程,重启该进程释放空间。
问题2:tmpfs 文件系统是否需要关注?
- 不需要。
tmpfs 是基于内存的虚拟文件系统(如 /dev/shm),重启后数据自动清除,不占用物理磁盘空间。日常监控可忽略。
问题3:如何避免 inode 耗尽?
- 定期清理小文件目录:如邮件队列(
/var/spool/clientmqueue)、应用缓存。 - 调整文件系统参数:格式化时使用
-i 选项增加 inode 数量(如 mkfs.ext4 -i 16384)。 - 监控 inode 使用率:将
df -i 纳入日常巡检。
问题4:根分区(/)使用率过高,如何快速定位大目录?
du -sh /* 2>/dev/null | sort -rh | head -10 # 找出根目录下最大的10个目录
du -sh /var/* 2>/dev/null | sort -rh | head -10 # 深入/var目录
- 重点检查:
/var/log(日志)、/var/cache(缓存)、/tmp(临时文件)。