Linux上df和du统计磁盘占用大小差异分析

💡 原文中文,约3200字,阅读约需8分钟。
📝

内容提要

在Linux中,df和du命令统计磁盘使用情况时常不一致。df显示文件系统的分配情况,而du反映实际文件占用。造成差异的原因包括已删除但未释放的文件、文件系统保留空间、挂载点影响、稀疏文件和元数据占用。理解这些差异有助于更有效地管理磁盘空间。

🎯

关键要点

  • df和du命令在Linux中统计磁盘使用情况时常不一致,原因在于它们的工作原理不同。

  • df命令读取文件系统的超级块,统计文件系统级别的磁盘块使用情况,执行速度快。

  • du命令递归遍历目录,统计文件级别的磁盘块使用情况,速度相对较慢。

  • 常见导致df和du结果不一致的原因包括:已删除但未释放的文件、文件系统保留空间、挂载点影响、稀疏文件和元数据占用。

  • 已删除但未释放的文件是最常见的原因,df显示空间已用而du找不到对应文件。

  • 文件系统保留空间是指默认情况下,Ext3/Ext4等文件系统会保留约5%的磁盘空间给root用户。

  • 挂载点影响是指如果在某个目录下挂载了另一个文件系统,du和df可能会统计不同的内容。

  • 稀疏文件允许在文件中存在空洞,导致du和df显示的占用空间不同。

  • 文件系统元数据占用磁盘空间,但du无法统计这些元数据,导致df的结果略大于du。

  • 在遇到磁盘空间不足时,首先使用df确认哪个分区使用率高,然后使用du检查该分区下文件总大小。

  • 云盘扩容后,需在操作系统内部进行分区和文件系统的扩展,以便使用新增的空间。

  • 在进行磁盘操作前,建议备份数据并理解操作步骤,确保命令与文件系统类型匹配。

延伸问答

df和du命令的主要区别是什么?

df命令统计文件系统级别的磁盘块使用情况,速度快;而du命令递归遍历目录,统计文件级别的磁盘块使用情况,速度相对较慢。

为什么df和du的统计结果会不一致?

不一致的原因包括已删除但未释放的文件、文件系统保留空间、挂载点影响、稀疏文件和元数据占用等。

如何查找已删除但仍被进程占用的文件?

可以使用lsof | grep deleted命令查找已被删除但仍被进程打开的文件及其进程ID。

文件系统保留空间是什么?

文件系统保留空间是指默认情况下,Ext3/Ext4等文件系统会保留约5%的磁盘空间给root用户,以防止系统完全崩溃。

如何处理云盘扩容后的分区和文件系统扩展?

在云盘扩容后,需要在操作系统内部进行分区和文件系统的扩展,以便使用新增的空间,通常使用growpart和resize2fs命令。

稀疏文件对df和du的统计结果有什么影响?

稀疏文件允许在文件中存在空洞,导致du显示的实际占用空间较小,而df反映的是文件系统实际消耗的磁盘块。

➡️

继续阅读