在我发现的关于 ext2 的每一篇出版物中,块组的结构定义如下:
- 超级块:1块
- 组描述符:N 个块
- 数据位图:1块
- 索引节点位图:1 块
- 索引节点表:N 个块
- 数据块:剩余块
然而在ext2 内核文档据说版本 >0 可能不会在每个块组中存储超级块和组描述符的副本。
当我fsstat
使用 ext2 分区时,我得到以下输出:
Group: 1:
Inode Range: 1977 - 3952
Block Range: 8193 - 16384
Layout:
Super Block: 8193 - 8193
Group Descriptor Table: 8194 - 8194
Data bitmap: 8451 - 8451
Inode bitmap: 8452 - 8452
Inode Table: 8453 - 8699
Data Blocks: 8700 - 16384
Free Inodes: 1976 (100%)
Free Blocks: 0 (0%)
Total Directories: 0
Group: 2:
Inode Range: 3953 - 5928
Block Range: 16385 - 24576
Layout:
Data bitmap: 16385 - 16385
Inode bitmap: 16386 - 16386
Inode Table: 16387 - 16633
Data Blocks: 16387 - 16386, 16634 - 24576
Free Inodes: 1976 (100%)
Free Blocks: 0 (0%)
这个输出有两件事让我感到困惑:
在 SB 和组描述的组中。存储时,组 desc 之间有 256 个块的间隙。和数据位图。 编辑:使用
dumpe2fs
我刚刚发现这些是保留的 GDT 块,用于在线调整大小。 那么新的问题是,这些保留的GDT块的大小是如何确定的呢?Data Blocks: 16387 - 16386
第 2 组是什么意思?
答案1
resize_inode 功能创建一个隐藏的 inode(编号 7,您可以使用 查看它debugfs
)stat <7>
来保留这些块,以便 GDT 可以增长。默认情况下,它保留足够的空间来将文件系统增长到原始大小的 1024 倍。您可以mke2fs
在格式化时禁用该功能或使用选项调整大小。
第 2 组中的数据块:16387 - 16386 是什么意思?
这看起来只是程序中的一个错误,因为您不能有负大小(在开始之前结束)范围。