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

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

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

HDD 的分区使用 GUID,文件系统使用 EXT4。当我使用磁盘工具应用程序选择 HDD 时,出现一条警告信息:

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

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

答案1

磁盘上的文件有两种大小:“表观大小”和“磁盘上的大小”。有多种原因可能导致大的差异:

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

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


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

$ 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, i.e.
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

答案2

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

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

如果你认为这 150GB 是个问题,请注意仅占总硬盘容量的 5%。如果您需要的硬盘空间超过 95%,那么您可能需要购买更大的硬盘,而不必担心这些超出您能力范围的 150GB。

另外,请记住,对于 ext4 来说,这个空间不会被浪费。数据碎片在这里不是问题,但这种优势的代价是额外占用的空间。有办法减少它并强制 ext4 使用更少的空间,但不建议这样做,因为 - 由于碎片机会和其他无法发生的优化 - 这很可能会导致您的机器运行速度变慢,因为数据访问不会那么顺畅。

相关内容