概述
运维线上服务器时,一旦遭遇“No space left on device”(设备上没有剩余空间)的告警,最先派上用场的排查利器非 df 莫属。本文不仅会梳理如何以人性化单位直观展示存储余量,还会演示过滤杂乱虚拟文件系统的实用技巧,并深入探讨明明物理空间充裕却因 Inode 耗尽而无法落盘的棘手场景。此外,我们还将剖析日常巡检中 df 与 du 统计结果产生偏差的底层成因与应对策略。
1. 快速上手:以人类易读单位评估分区余量 (df -h)
作为 Linux 环境下探测已挂载文件系统可用容量的基础工具,df 能够全面反映各分区的整体水位。
在缺省状态下直接运行该命令,系统会以极难直观换算的 1KB 数据块(1K-blocks)呈现容量,往往需要工程师心算转换。
⚙️ [核心参数速览]
-h : 自动换算为易读度更高的存储单位(K、M、G 等)。-T : 同步输出各个挂载点底层采用的文件系统类型(诸如 ext4、xfs、overlay)。-i : 绕过数据块统计,转而核查决定最大文件创建数量的索引节点(Inode)水位。-t : 仅保留指定文件系统类型的统计项。-x : 在输出列表内屏蔽指定的文件系统类型。

引入 -h(–human-readable)参数后,df -h 便能以业务视角更为直观的单位汇总空间占用。
比对终端输出可知,原本晦涩的千字节数值均已被自适应规整为兆字节(M)与吉字节(G),存储利用率及剩余额度一目了然。

2. 净化视线:剔除虚拟节点与定向检索关键存储 (df -h -x / -t)
执行 df -h -x tmpfs -x devtmpfs -x squashfs 命令时,连续附加的 -x(–exclude-type)参数能够批量屏蔽干扰分析的虚拟节点。
尤其在 Ubuntu 发行版中,Snap 机制映射的大量只读 squashfs 回环设备,以及挂载于内存的 tmpfs 和 devtmpfs,往往会严重刷屏。
过滤掉这些干扰项后,终端便能仅留存真实的物理存储挂载卷,排查效率显著提升。

倘若希望精准定位特定格式的分区,则可通过 -t(–type)参数指定目标,例如执行 df -h -t ext4。
此时终端将剔除其余所有干扰,专注于过滤采用通用 ext4 格式的存储设备,极大便利了主数据分区及根目录分区的长期监控。

3. 诡异故障:空间充裕却写不进数据?警惕 Inode 耗尽 (df -i)
为了模拟 Inode 枯竭与排查过程,我们先在本地创建专门的测试工作区,并批量生成 10 个轻量级文本文件。

随后执行 df -i /tmp/df-test,便可针对包含该工作目录的具体文件系统审查其索引节点状态。
需要特别注意:即便普通磁盘块(Block)仍有大半闲置,一旦 Inode 分配达到上限(IUse% 飙升至 100%),操作系统同样会拒绝新增任何文件。
通过对照反馈中的 Inodes(分配总额)、IUsed(已占用量)以及 IFree(闲置可用量),运维人员即可准确定位是否因海量零碎小文件占满索引而触发写入中断。

演练完毕后,调用 rm -rf /tmp/df-test 迅速移除前序用于验证的临时测试目录与样本资源。

4. 生产避坑:文件已删却未释容?揭秘 df 与 du 的统计分歧
接下来复现进程占用导致容量假死的问题。首先核验环境内是否已具备 lsof 检测工具,若缺失则通过包管理器同步安装。

通过运行 lsof +L1 命令,可以抓取那些虽然链接数已被清零(处于待释放标记)、但文件句柄仍被活动服务占用的文件列表。
在实际生产中,即便执行 rm 删除了臃肿的日志文件,若后台守护进程未及时关闭句柄,物理块便不会真正还给系统,导致 df 显示容量始终居高不下。
此时只需提取输出里的 PID(进程标识符),优雅重启或干预相应服务以强制闭合句柄,被锁定的磁盘空间便能真正重回可用池。

以上便是利用 df 命令深入审视 Linux 存储状态的 5 项核心参数与排障要点。
在应对各类存储告警时,根据具体症候灵活选用匹配的参数与诊断思路,能助你稳妥保障生产系统长期平稳运转。