Linux--EXT2文件系统

参考资料:

linux之EXT2文件系统--理解block/block group/索引结点inode/索引位图_一个块组中索引节点表和数据块区最多占用字节-CSDN博客

linux环境:

Linux version 5.15.146.1-microsoft-standard-WSL2 (root@65c757a075e2) (gcc (GCC) 11.2.0, GNU ld (GNU Binutils) 2.37) #1 SMP Thu Jan 11 04:09:03 UTC 2024

创建文件系统

mke2fs -b 2048 vdisk 1000    # 创建ext2文件系统,含有1000个大小为2048字节的块

 读取超级块的信息

typedef struct ext2_super_block SUPER; // 在<ext2fs/ext2_fs.h>头文件中,有这个结构体ext2_super_block

SUPER* sp; // 定义一个超级块的结构体指针

char buf[1024];// 保存超级块的数据
char* device = "vdisk";  // 文件系统名称

fd = open(device, O_RDONLY); //打开

lseek(fd, (long)1024*1, SEEK_SET);  // 指针偏移到1024字节处
read(fd, buf, 1024);  // 读出1024字节,存到buf中
sp = (SUPER *)buf;  // 解析成超级块结构体
   
printf("%-30s = %8d\n", "块大小", sp->s_log_block_size); // 根据文章开头的命令,应该为2048
printf("%-30s = %8d\n", "块的数量", sp->s_blocks_count); // 根据文章开头的命令,应该为1000

超级块的结构体,大小固定为1024字节

==》 引导块 | 超级块 | 组描述块 | 保留 | 块位图 | 索引节点位图 | 数据块

其中引导块与超级块,大小都为1024字节 (与块大小2048无关)

组描述块的起始位置(块号),是不定的,由超级块的 (s_first_data_blcok+1)确定

为什么是不定的?

如果块大小1024,则引导块是0,超级块是1,组描述块是2

如果块大小2048,则引导块和超级块是0(正好占满一个块),组描述块是1

如果块大小4096,则引导块和超级块是0(只占了半个块,剩下的部分补0),组描述块是1

目录条目

 需要补充的是,name以4字节为一个单位进行对齐。若文件名是A,仅一个字节,实际上name[]的大小是4字节,用0填充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值