为什么磁盘和 df 之间存在差异?

为什么磁盘和 df 之间存在差异?

我正在使用 Ubuntu Bionic Beaver - 开发分支。我有一个 1TB SATA 硬盘。

我使用 Gparted 对驱动器进行了以下分区:第 1 部分:26GB FAT,第 2 部分:948GB Ext4,第 3 部分:26GB Swap。

当我使用 Ubuntu 操作系统默认自带的“磁盘”应用程序时,它会显示我所概述的磁盘使用情况。当我在终端中运行 df -h 时(省略了一些输出):

/dev/sda1:25GB(/boot/efi);/dev/sda2:868GB(/)

/dev/sda3 未包含在 df -h 输出中,这很好,但为什么第二个 (ext4, /dev/sda2) 分区的差异如此之大?我的 HP 笔记本电脑已经三年了,最初预装了 Windows 8。我多次擦除整个驱动器,安装了无数的 Linux 发行版,但在安装新操作系统之前,我会定期创建新的分区表和新分区。这对于 Ubuntu 的这个版本来说并不是什么新鲜事;我过去就注意到了。请注意,我已经考虑了磁盘使用情况;根据磁盘,第 2 部分的全部大小(而不是可用大小)为 868GB。运行 df -h 告诉我它是 948GB。这是为什么?

答案1

TL;DR 他们测量的是不同的东西

较长的版本:

Linux 文件系统(实际上任何文件系统)上的存储使用情况实际上都非常复杂。我建议通过 Google 搜索差异,df以及du一些测量不同事物的经典工具示例,新手(不是批评,我们都必须学习)可能会认为它们应该是相同的。

这是一个很好的例子。假设您通过检查和发现空间不足,du并且df它们匹配。太好了!然后您删除一个大文件并再次检查。如果某个进程有该文件的句柄,您现在将看到不同的结果。 du将不再看到该文件并立即反映更改。 df只有在访问该文件的进程终止后才会显示差异。

我还建议尝试一下lsof。所有这些工具都使用各种策略和规则来确定“使用情况”,因为它们正在解决不同的问题,一旦你理解了它们的意图,这就会很有用。应用程序disks也是一样,它对“使用空间”的定义做出假设,并因此给出相应的结果。

希望有帮助!

相关内容