当前位置:   article > 正文

Linux--EXT2文件系统

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字节的块

 读取超级块的信息

  1. typedef struct ext2_super_block SUPER; // 在<ext2fs/ext2_fs.h>头文件中,有这个结构体ext2_super_block
  2. SUPER* sp; // 定义一个超级块的结构体指针
  3. char buf[1024];// 保存超级块的数据
  4. char* device = "vdisk"; // 文件系统名称
  5. fd = open(device, O_RDONLY); //打开
  6. lseek(fd, (long)1024*1, SEEK_SET); // 指针偏移到1024字节处
  7. read(fd, buf, 1024); // 读出1024字节,存到buf中
  8. sp = (SUPER *)buf; // 解析成超级块结构体
  9. printf("%-30s = %8d\n", "块大小", sp->s_log_block_size); // 根据文章开头的命令,应该为2048
  10. 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填充

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/686490
推荐阅读
相关标签
  

闽ICP备14008679号