磁盘用量
100%

文件系统 · 第 9 课

磁盘用量

了解 `df` 和 `du` 如何从不同角度衡量文件系统数据块与 inode 消耗。

文件系统容量至少受到两类资源限制:数据块,以及 inode 等元数据对象。df 从文件系统角度报告分配情况,du 则遍历可达路径名并汇总归属于它们的用量。两者回答的问题不同,结果不必一致。

使用 `df` 查看文件系统容量

以下命令显示已挂载文件系统类型和便于阅读的数据块数值:

$ df -hT
Filesystem     Type  Size  Used Avail Use% Mounted on
/dev/sda1      ext4  6.2G  2.3G  3.6G  40% /

SizeUsedAvail 来自文件系统统计。由于保留块、元数据、分配策略、配额或舍入,可用空间可能小于总量减去已用量。对某个路径运行 df,可以报告包含该路径的文件系统:

$ df -hT /var/log

df 主要报告什么?

Inode 容量

采用 inode 类对象的文件系统即使仍有数据块,也可能耗尽 inode:

$ df -i /var

大量小文件可能耗尽可用 inode。删除一个大文件可以释放许多数据块,但通常只释放一个 inode;删除大量不再需要的小文件则有助于缓解 inode 压力。某些文件系统动态分配元数据,并以不同方式报告这些概念。

文件系统仍有可用数据块、但没有可用 inode 时,可能发生什么?

使用 `du` 查看路径用量

汇总某个目录下可达内容分配的空间:

$ du -sh /var/log

在不跨越文件系统的情况下比较直接子项:

$ sudo du -xhd1 /var | sort -h

这里所示的 GNU 选项分别表示便于阅读的输出、最大深度一层,以及只遍历一个文件系统。权限可能隐藏子树,使总数不完整。默认情况下,du 也可能只统计一次硬链接文件;它还能区分表观大小与已分配数据块,并会根据选项以不同方式处理稀疏文件。

哪个命令汇总 /var/log 下已分配的用量?

`df` 与 `du` 不一致的原因

常见原因包括:

  • 进程仍然打开已删除文件,因此数据块仍被分配,但 du 找不到对应路径名
  • 文件系统元数据、保留空间、日志、reflink、快照或压缩影响统计
  • 遍历的目录树中挂载了另一个文件系统
  • 权限阻止 du 读取某些目录
  • 稀疏文件的表观大小与已分配大小不同

对于已删除但仍打开的文件,可以使用 lsof +L1 等工具检查已获授权的进程。应通过常规流程重启相关服务或向其发送信号,而不要截断未知文件描述符。

为什么 df 可能显示仍有空间被占用,而基于路径名的 du 找不到它?

避免让事故变得更严重

df 报告已满的文件系统开始,用 findmnt 确定挂载目标,再把 du 搜索限定在同一文件系统中逐步缩小范围。还应考虑快照、容器层、日志、软件包缓存和应用保留策略。不要只因为文件很大就删除它;应先确定其所有者、备份、合规要求和服务行为。

发现大文件后,最安全的处理方式是什么?

课程已完成

你已完成 磁盘用量

现在,你可以协调文件系统统计与基于路径名的空间报告。

  • 使用 df 查看已挂载文件系统的数据块容量。

  • 在支持时使用 df -i 检查 inode 压力。

  • 使用限定范围的 du 遍历归属可达路径用量。

  • 调查已删除但仍打开的文件,以及文件系统特有的统计差异。

  • 删除数据前,遵循所有权和保留策略。

保存学习进度

创建免费账户即可保存本课进度,并在任意设备上继续学习。

创建免费账户
下一节
返回 文件系统