读:df 与 du——为什么两个磁盘用量命令数字对不上

💡 原文中文,约3900字,阅读约需10分钟。
📝

内容提要

文章讨论了Linux系统中`df`和`du`命令显示的磁盘使用量不一致的原因,包括已删除但仍被进程占用的文件、文件系统保留块、隐藏挂载点和容器的overlay文件系统。`df`直接读取文件系统的超级块,而`du`遍历目录树,导致统计结果不同。提供了检测脚本和排查方法,帮助用户找出占用空间的文件。

🎯

关键要点

  • df 和 du 命令显示的磁盘使用量不一致,原因在于它们的工作机制不同。

  • df 直接读取文件系统的超级块,统计已分配的磁盘块,而 du 遍历目录树统计可见文件和目录的大小。

  • 最常见的原因是已删除但仍被进程占用的文件,导致 df 统计的空间未被释放。

  • 文件系统保留块会导致 df 和 du 的统计结果不同,ext 系列文件系统默认保留 5% 的空间给 root 用户。

  • 隐藏挂载点会使得原有数据不可见,df 仍然能看到这些数据占用的空间。

  • 容器的 overlay 文件系统可能导致空间统计不一致,尤其是在删除容器镜像层后。

  • 提供了检测脚本和排查方法,帮助用户找出占用空间的文件,确保磁盘空间的准确统计。

🔎

延伸解读

理解 df 和 du 的工作机制

df 和 du 的统计方式截然不同,df 直接读取文件系统的超级块,统计已分配的磁盘块,而 du 则遍历目录树,统计可见文件的大小。这种机制差异导致了它们在磁盘使用量上的不一致,用户在排查磁盘空间问题时需注意这一点。

已删除文件的影响

在 Linux 中,删除文件并不会立即释放磁盘空间,尤其是当进程仍在使用这些文件时。此时,df 会显示这些空间仍被占用,而 du 则无法看到这些已删除但仍被占用的文件。因此,运维人员应定期检查并释放这些空间,以避免误判磁盘使用情况。

文件系统保留块的注意事项

ext 系列文件系统默认保留 5% 的磁盘空间给 root 用户,这部分空间在 du 的统计中是不可见的。用户在管理磁盘空间时,应考虑这一因素,尤其是在大容量磁盘上,5% 的空间可能是一个显著的数字。

容器与 overlay 文件系统的复杂性

在使用容器技术时,overlay 文件系统的层叠特性可能导致空间统计的不一致。用户在排查磁盘空间问题时,需特别关注容器的文件系统行为,确保已删除的镜像层不会影响到实际的磁盘使用情况。

延伸问答

为什么df和du命令显示的磁盘使用量不一致?

因为df直接读取文件系统的超级块,统计已分配的磁盘块,而du遍历目录树统计可见文件和目录的大小。

已删除但仍被进程占用的文件会影响磁盘使用量的统计吗?

会,已删除但仍被进程占用的文件会导致df统计的空间未被释放,而du无法看到这些文件。

如何检查是否存在已删除但仍占用磁盘空间的文件?

可以使用脚本检查,脚本会遍历lsof +L1的输出,找出已删除但仍被持有的文件。

文件系统保留块会对df和du的结果产生什么影响?

文件系统保留块会导致df和du的统计结果不同,du无法看到这部分空间,而df的可用空间已扣除这些保留块。

隐藏挂载点如何影响磁盘空间的统计?

隐藏挂载点会使得原有数据不可见,du无法看到这些数据,但df仍能看到它们占用的空间。

容器的overlay文件系统会导致空间统计不一致吗?

会,容器的overlay文件系统可能导致df和du的空间统计不一致,尤其是在删除容器镜像层后。

🏷️

标签

➡️

继续阅读