为什么磁盘使用量大于其上所有文件的大小?

我有一个3TB硬盘。 在HDD的属性屏幕中,它表示我使用了471.4GB,但是当我选择nautilus中的所有文件时,它表示选择了321.0GB。 如果我在HDD中只有321.0GB的文件,为什么它使用471.4GB?

HDD的分区使用的是在EXT4中使用的GUID和文件系统。 当我使用“磁盘工具”应用程序选择硬盘时,我收到一条警告:

WARNING: The partition is misaligned by 3072 bytes. This may result in very poor performance. Repartitioning is suggested. 

这与丢失的150.4GB有什么关系吗?

磁盘上的文件有两种大小:“表观大小”和“磁盘大小”。 有几个原因会导致很大的差异:

  • 由于内部碎片,大量文件将导致大量开销。 例如,Ext4具有4KiB默认块大小; 小于该文件的文件将始终消耗4KiB,并且上面的大小将“舍入”到此块对齐。
  • 目录也是文件,同样的规则也适用于它们。 此外,如果要在目录中创建大量文件,并在以后再次删除它们,则无法回收目录文件上的用法(重新创建目录有帮助)。
  • 稀疏文件是特殊文件,看起来很大,但不占用空间。 这在虚拟化磁盘映像中很常见; 它们看起来很大,但“实际”尺寸可以小得多。 许多实用程序(和文件管理器)无法显示实际的磁盘使用情况。
  • 使用硬链接。 当多个引用指向它时,文件的内容可以存在于磁盘上。 某些文件管理器可能会考虑每个引用的大小。

我建议使用已知能够列出两​​种尺寸的磁盘使用工具来查看这是否是问题。 在终端中尝试使用ncdu并使用a在实际和磁盘使用之间切换。


由于使用du的4KiB块大小文件系统导致内部碎片的简短演示:

 $ sudo tune2fs -l /dev/path-to-device | grep "Block size" Block size: 4096 $ echo blaataaap > myfile # creates a 10-byte file $ du --block-size=1 myfile # prints the usage on disk (filesystem) 4096 myfile $ du --apparent-size --block-size=1 myfile # prints the apparent size, ie 10 myfile # content length when seeking $ ls -al -rw-rw-r-- 1 gert gert 10 Jan 1 23:24 myfile # ls uses apparent sizes 

这意味着这个10字节的文件在磁盘上比在列表中显示的大4086字节并且正在遭受内部碎片。


列出文件时,硬链接和磁盘使用情况的简短演示显示错误(在本例中为ls ):

 $ dd if=/dev/zero of=1MBfile bs=1M count=1 # create a 1MB file $ ln 1MBfile a_hard_link # create a hard link to it $ ls -alht # ls will report 2MB total 2.1M drwxrwxr-x 2 gert gert 4.0K Jan 2 11:21 . -rw-rw-r-- 2 gert gert 1.0M Jan 2 11:21 1MBfile -rw-rw-r-- 2 gert gert 1.0M Jan 2 11:21 a_hard_link $ du -B 1024 . # du reports 1028K total for directory 1028 . $ du -B 1024 a_hard_link # and 1024K for each file individually 1024 a_hard_link $ du -B 1024 1MBfile 1024 1MBfile 

发生这种情况是因为总磁盘使用量永远不会等于那里所有文件的总和(这是Nautilius选择所有文件后显示的内容)。

原因是文件系统本身往往占用分区上的一些空间。 最有可能的是,如果您清除了存储在该HDD上的所有数据,则磁盘使用量将约为150GB。 该空间是为文件系统保留的 – 它是必需的,因为文件系统需要在某处存储有关文件的数据。 ext4 创建任何文件之前预先分配此开销空间,而不是 – 例如 – ext3,随着更多文件添加到分区,该空间会增加。

如果您认为这150GB是一个问题,请注意它只是您的总HDD大小的5% 。 如果你需要超过95%的硬盘驱动器,你可能需要买一个更大的硬盘,而不是担心这些150GB以外的东西。

另外,请记住,在ext4的情况下,这个空间不会浪费。 数据碎片在这里不是问题,但这种优势的成本是额外占用的空间。 有办法减少它并迫使ext4使用更少的空间,但这并不是因为 – 碎片机会和其他无法实现的优化 – 这很可能会导致你的机器工作速度要慢得多,因为数据访问不会那么顺利。