EXT2 文件系统
知识点归纳
EXT2:
体现文件系统设计和实现的原则
磁盘块的内容:
- Block#0:引导块
- Block#1:超级块【用于容纳整个文件系统的信息】
- Block#2:块组描述符块【磁盘块】
- Block#8:块位图
- Block#9:索引节点点位图
- Block#10:索引开始节点
这张图感觉把磁盘分区、分组结构、块组结构之间的关系说的很清晰
- 文件系统实现的三个级别:
- 第一级别:实现了基本文件树
mkdir creat rmdir unlink symlink readlink - 第二级别:文件内容读写函数
open close lseek read write opendir readdir - 第三级别:文件系统的挂载、卸载和文件保护
-
基本文件系统
type.h文件这类文件包含EXT2文件系统的数据结构类型,比如超块、组描述符、索引节点和目录条目结构。
此外,它还包含打开文件表、挂载表、PROC结构体和文件系统常数。global.c文件
这类文件包含文件系统的全局变量。全局变量的例子有:
MINODE minode [NMINODE]; //in memory INODEs MTABLE mtable[NMTABLE]; //mount tables OFT oft[NOFT]; //Opened file instance PROC proc [NPROC] //PRoC structures PROC *running; //current executing PROC
util.c文件
该文件包含文件系统常用的实用程序函数。最重要的实用程序函数是读/写磁盘块函数iget()、iput()和 getino()。
mount-root.c文件
该文件包含mount_root()函数,在系统初始化期间调用该函数来挂载根文件系统。它读取根设备的超级块,以验证该设备是否为有效的EXT2文件系统。
然后,它将根设备的根 INODE ( ino = 2)加载到minode中,并将根指针设置为根minode。它还将所有进程的当前工作目录设置为根minode。
分配一个挂载表条目来记录挂载的根文件系统。根设备的一些关键信息,如 inode和块的数量、位图的起始块和inode,表,也记录在挂载表中,以便快速访问。
知识层次梳理
编程实例
显示超级块
- 遇到的问题及解决方法
调试时报错,原来是这个头文件没有包含进来,于是用sudo apt-get install ext2fs-dev
尝试解决
然而又报错说找不到库,最后找到一篇博客,终于解决了这个问题
并且要记得在同一目录下创建一个虚拟磁盘
最后成功运行代码
这个代码的主函数是要通过从命令行传递参数的,
所以运行时记得通过命令行把虚拟磁盘传递进去