文件系统块大小如何运作?

文件系统块大小如何运作?

所有 Linux 文件系统的块大小都是 4kb。假设我有 10mb 的硬盘存储空间。这意味着我有 2560 个可用块,假设我复制了 2560 个文件,每个文件的大小为 1kb。每个 1kb 块将占用 1 个块,尽管它没有填满整个块。

所以我的整个磁盘现在都已填满,但仍然有 2560x3kb 的可用空间。如果我想存储另一个 1mb 的文件,文件系统会允许我存储吗?它会写入各个块中剩余的可用空间吗?有没有什么概念可以解决这个问题?

我很感激您能给我一些说明。提前谢谢

答案1

自第一个 Linux 以来,默认块大小就是 512 字节。直到最近,才引入了 4k 块大小来满足不断增加的磁盘大小。这实际上几乎是由磁盘硬件决定的(更多信息请参见:https://unix.stackexchange.com/questions/178899/optimizing-logical-sector-size-for-physical-sector-size-4096-hdd)。

但是对于您的具体问题:您说得对,在许多类型的文件系统上,所有文件都会浪费最后一个块的未使用字节,这对于小文件来说尤其浪费。但 btfrs 和 reiserfs 似乎能够应付,https://en.m.wikipedia.org/wiki/Block_suballocation

答案2

  1. 文件系统的块大小可以是 512 到(通常)65536 字节。块大小可以指定为 mkfs.xxx 选项。大多数 Linux 文件系统中的默认块大小为 4096 字节。

  2. 一些文件系统支持尾部打包和/或子块分配。BTRFS、RaiserFS、ZFS、Raiser4 - 支持;XFS、Ext2/3/4 - 不支持。

如果您计划用几个小文件填充一个分区,您可以通过将块大小缩小到 512 或 1024 来减少浪费的“尾部”空间,或者使用支持尾部打包或子块分配功能的 FS。

相关内容