Omuuz

为什么 Linux 的 df 与 du 磁盘占用不同

理解 Linux 上 df 与 du 为何不同,包括文件系统元数据、保留块、已删除但仍打开的文件、权限、硬链接、稀疏文件和挂载边界。

直接回答

df 报告文件系统层的分配情况,du 则遍历可达目录项并估算其磁盘占用。二者观察层级不同,不应期待完全一致;大差额可能来自已删除但仍打开的文件、无权路径、被挂载覆盖的内容、快照、保留块或文件系统元数据。

适用场景

  • df 显示挂载点已满,但可见目录树小得多。
  • 移除某条路径后,空闲空间没有恢复。
  • 你需要解释可视化扫描为何无法对应每个已分配块。

分步骤复核

  1. 对齐范围

    把目标挂载点的 df 与同一挂载点的 du 对照,并控制是否跨文件系统。

  2. 确认单位和语义

    检查数值究竟是人类可读单位、字节、块、逻辑大小还是实际分配。

  3. 记录可见性缺口

    权限失败和跳过的挂载意味着类似 du 的遍历并不完整。

  4. 调查仅文件系统可见的分配

    使用合适的管理员工具检查已删除但仍打开的文件、快照、保留块、元数据和挂载点下被遮住的内容。

  5. 负责人操作后重新测量

    再次核对同一文件系统和范围,不要只相信估算的可释放量。

相关技术原理

差异来自架构

GNU 把 df 定义为文件系统空间报告,把 du 定义为基于目录层级的估算;它们互补,而非可互换的计算器。

路径名删除后数据仍可能占用

如果进程仍持有文件,解除路径链接不一定立即释放数据块。

表观大小是另一条维度

du 可以把表观大小与实际分配分开报告;稀疏文件尤其能体现这种差异。

精确对账依赖具体文件系统

快照、写时复制、压缩、去重和保留空间,都需要结合实际文件系统的工具与知识。

df 与 du 回答不同问题

对比项df类似 du 的扫描
主要范围已挂载文件系统某目录下的可达路径
是否遍历目录树
已删除但仍打开的数据仍计入分配没有可遍历路径
无权目录计入文件系统总量无法完整计数
最适合容量与剩余空间告警定位可见目录占用

风险与不应执行的操作

不要强行让合计相等

不断调整选项直到数字相同,可能掩盖范围或语义不一致。

不要随意关闭进程

持有已删除文件的可能是关键服务;应协调有记录的重启或日志重开流程。

不要把差额叫作可释放空间

部分差异属于元数据、快照、保留区或不可访问数据,并非可丢弃文件。

Omuuz 产品能做什么、不能做什么

能够做到

SSH Disk Visualizer 可以把文件系统容量与基于元数据的目录合计并列展示,并显示扫描缺口,避免混淆两种测量。

不能做到

它不能通过路径列出已解除链接的文件、对账每种文件系统特性,也不能声称差额都可释放。

产品证据

SSH Disk Visualizer 远程 Linux 扫描的目录树与按比例排列的空间区块。
一次完成的只读扫描会在 Mac 上把远程元数据整理为按大小排序的目录地图。

第一方资料

相关指南

Linux 磁盘满了:只读排查清单如何查找 Linux 服务器上的大文件如何通过 SSH 分析远程 Linux 磁盘占用
查看详情 — SSH Disk Visualizer