Linux File System (Blocks and Block Groups)

Linux File System (Blocks and Block Groups)

BSD块大小的演变,从1K -> 2K -> 4K。

Block Allocation:

  • 文件系统再分配空间的时候是以block为单位的而不是字节。
  • 查询剩余空间的操作应该是在常数时间内完成的。
  • 用Bitmap来管理空闲的block,一个block大小的bitmap可以管理8192个blocks。
  • 元数据一般单独存在inode。

Block Size

  • 块大小对性能影响比较明显。

  • 块大意味着元数据开销较小,吞吐量更高些(why?)

  • 块小意味着更多的空间节省。

  • 扇区大小一般是4K。

  • 现在的一些文件系统在创建时会根据扇区大小来设置blocksize

  • blocsize应该大于等于扇区size,否则对一个快操作load的扇区size不合理。

  • blocksize需要小于pagesize以完成正常的虚拟内存映射。

Max filesystem size

  • 文件系统最大大小是 blocksize * 2^ (block number bits)
  • 最大容量的一个潜在限制是block group,其描述符必须放在一个block中,所以实际上最大不能超过256TiB。

Block Groups

  • 8192个block会分为一个blocks,取决于存group描述幅的大小。
  • 划分的主要目的是优化locality

Group Descriptor

  • 仅凭group descriptor不能完整的得到一个block group的信息,可能确实这个group从那个blcok开始,有多少inode等
  • Ext2中的group descriptor是32B, Ext4拓展为64B。

Fragments and Clusters

  • Ext2文件系统把Block继续切分为更小的Fragments。
  • Cluster相当于把block聚合在一起分配,用于给一些大文件分配空间。

Block size is important to filesystem

Q & A

Q: Block group 和 cluster的概念会不会有些重叠呢?

A:

  • 功能定位不同:
    • block group是文件系统的管理单元,包含管理结构(inode表等)
    • cluster是文件存储的分配单元,纯粹用于数据存储
  • 使用场景不同:
    • block group主要用于ext等现代文件系统
    • cluster概念早期在FAT文件系统中就有使用
  • 大小特征不同:
    • block group通常较大,包含多个blocks和管理结构
    • cluster大小相对较小,主要考虑存储效率

Linux File System (Blocks and Block Groups)
https://arcanus.red/2024/11/18/Linux-File-System-Blocks-and-Block-Groups/
作者
Helix
发布于
2024年11月18日
许可协议