文件系统块大小是如何工作的?

所有Linux文件系统都具有4KB的块大小。假设我有10MB的硬盘存储空间。这意味着我有2560个可用的块,假设我复制了2560个文件,每个文件大小为1KB。每个1KB的块将占用一个块,即使它没有填满整个块。
因此,我的整个磁盘现在已经填满,但我仍然有2560x3KB的空闲空间。如果我想存储另一个1MB大小的文件,文件系统会允许我存储吗?它会在各个块中剩余的空闲空间中写入吗?是否有解决这个问题的概念?
我将非常感谢一些澄清。提前致谢。

好的,2560个文件,每个文件是1kb,那就是25600.001 mb = 2.56 mb。每个1kb的文件应该占据大约1/4的块,因为10004=4000,对吧?而块大小是4096,所以你需要4个文件来填满一个块。那么,一个1mb的文件将会占用1000000/4096 = 244个块。 - Sergiy Kolodyazhnyy
2个回答

默认的块大小自从第一个Linux版本就是512字节。直到最近,引入了4k块大小以应对磁盘容量不断增加的情况。实际上,这几乎可以说受到了磁盘硬件的支配(详见更多信息:https://unix.stackexchange.com/questions/178899/optimizing-logical-sector-size-for-physical-sector-size-4096-hdd)。

然而对于你的具体问题:你是正确的,在许多类型的文件系统中,所有文件都会浪费最后一个块的未使用字节,对于小文件来说尤其浪费。但是根据 https://en.m.wikipedia.org/wiki/Block_suballocation,btfrs和reiserfs似乎能够处理这个问题。


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

  2. 一些文件系统支持尾部填充和/或子块分配。ext2/3/4支持,xfs不支持。 如果您计划用几个小文件填充一个分区,可以通过将块大小缩小到512或1024来减少浪费的“尾部”空间。


这是错误的:ext2/3/4不支持块子分配=子块分配=尾部打包。来源:此答案 - undefined