我有一块 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 使用更少的空间,但不建议这样做,因为 - 由于碎片机会和其他无法发生的优化 - 这很可能会导致您的机器运行速度变慢,因为数据访问不会那么顺畅。