《信息安全系统设计与实现》第六周学习笔记
第十一章 EXT2 文件系统
EXT2文件系统
- EXT2第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。
EX2文件系统数据结构
- 创建mkfs创建虚拟硬盘
mke2fs [-b blksize -N ninodes] device nblocks
创建一个带有nblocks个块和ninodes个索引节点的EXT2文件系统
- 虚拟磁盘布局
- Block#0:引导块
- 超级块
- 超级块是记录整个文件系统相关信息的地方,没有superblock,就没有这个文件系统了,它记录的主要信息有:
- block与inode的总量
- 未使用与已使用的inode/block数量
- block与inode的大小
- 文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息
- 一个validbit数值,若此文件系统已被挂载,则valid bit为0,若未被挂载,则valid bit为1
- 超级块是记录整个文件系统相关信息的地方,没有superblock,就没有这个文件系统了,它记录的主要信息有:
- 块组描述符
- Block#2
- EXT2将磁盘块分为几个组,每个组有8192个块,用一个块组描述符结构体来描述。
- 块和索引节点位图
- 块位图(Block#8),用于表示某种项的位序列
- 索引节点位图(Block#9),代表一个文件的数据结构
- 索引(开始)节点块(Block#10),索引节点大小用于平均分割块大小,所以每个索引节点块都包含整数个索引节点
- 数据块
- 紧跟在索引节点块后面的是文件存储数据块
- 目录条目
- 包含dir_entry结构
- dir_entry是一种可扩充结构,不含终止NULL
- 包含dir_entry结构
邮差算法
- 邮差算法:
-
在计算机系统中, 经常出现下面这个问题。 一个城市有M 个街区, 编号从 0到M-1。 每个街区有N座房子, 编号从0 到 N-1。每座房子有一个唯一的街区地址, 用(街区, 房子)表示, 其中0<=街区<M, 0<=房子<N。 来自外太空的外星人可能不熟悉地球上的街区寻址方案, 倾向于采用线性方法将这些房子地址编为 0, 1, ···, N-1, N, N+1 等。 已知某个街区地址 BA= (街区, 房子), 怎么把它转换为线性地址 LA, 反过来,已知线性地址,怎么把它转换为街区地址?如果都从0开始计数,转换就会非常简单。
-
Linear_address LA = N*block + house; Block_address BA = (LA/N,LA%N);
-
- C语言中的Test-Set-Clear位
- 将索引节点号转换为磁盘上的索引节点
-
编程示例
- 显示超级快
- 显示位图
- 显示根索引节点
- 显示目录条目
3级文件系统函数
- 3级文件系统支持文件系统的挂载、卸载和文件保护
- 挂载算法
mount filesys mount_point
- 可将某个文件系统挂载到mount_point目录上。
- 卸载算法
- 可卸载已挂载的文件系统。
- 交叉挂在点
- 两个方向的挂载点可能会出现交叉
- 向下遍历
- 向上遍历
- 两个方向的挂载点可能会出现交叉
- 文件保护
文件系统项目的扩展
- 多个组:组描述符的大小为32字节,32个组的文件系统大小可扩展为32*8=256MB
- 4KB大小的块:128各组