linux ext2文件系统
Ext4文件系统也是由相关数据结构组成,按照数据结构存放位置可以分为Ext4磁盘数据结构和Ext4内存数据结构.
Ext 磁盘数据结构
- 标准块
弹性块
从ext4开始,有一个新功能称为弹性块组(flex_bg)。在flex_bg中,几个块组绑在一起,成为一个逻辑块组。flex_bg的第一个块组中的位图空间和inode表空间被扩展为包括flex_bg中所有其他块组的位图和inode表。例如,如果flex_bg大小为4,则组0将包含(按顺序)超级块,组描述符,组0-3的数据块位图,组0-3的inode位图,组0-3的inode表,组0中的剩余空间用于文件数据。这样的效果是将块元数据紧密地分组在一起,以加快加载速度,并使大文件在磁盘上连续。超级块和组描述符的备份副本始终位于块组的开头,即使启用了flex_bg。组成flex_bg的块组的数量由。
block 相关计算
- block size 在 磁盘格式化的时候就固定下来,使用mke2fs工具进行格式化时,可以指定 block size 等参数
- block-size: 只能为 1K/2K/4K bytes.一般不用指定,会采用/etc/mke2fs.conf 中的配置
磁盘容量 | mke2fs.conf中的配置 | block-size(K) | inode-size(byte) | inode-ratio(byte) | file system type |
---|---|---|---|---|---|
V < 3M | floppy | 1 | 128 | 8192 | ext2 |
3M < V < 512 | small | 1 | 128 | 4096 | ext2 |
4T< V < 16T | big | 4 | 256 | 32768 | ext4 |
V > 16T | hug | 4 | 256 | 65536 | ext4 |
other | default | 4 | 256 | 16384 | ext4 |
- inode-ratio: bytes-per-inode,即 多少个字节的数据可以分配到一个inode,根据该信息和磁盘容量就可以计算出inode count
- 默认块大小为4KiB,每个组将包含32,768个块,长度为128MiB
- 如果用32bit来存储block count,则默认情况下,文件系统可以存数据
- 如果用64bit来存储block count,则默认清空下,文件系统可以存数据
- 假设磁盘容量222G,采用default config,可以计算:
- group 可能的排列
index | super block | group descriptor | reserved GDT | Block bitmap | Inode bitmap | Inode table |
---|---|---|---|---|---|---|
group 0 | 0 | 1-14 | 15-1024 | 1025 | 1041 | 1057-1568 |
group 1 | 32768 | 32769-32782 | 32783-33792 | 1026 | 1042 | 1569-2080 |
group2 | 1027 | 1043 | 2081-2592 | |||
group3 | 98304 | 98305-98318 | 98319-99328 | 1028 | 1044 | 2593-3104 |
group4 | 1029 | 1045 | 3105-3616 | |||
… |
struct
- super block
- group descriptor
- inode