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/