《信息安全系统设计与实现》学习笔记5
第十一章
EXT2文件系统
- EXT2第二代扩展文件系统(英语:second extended filesystem,缩写为 ext2),是LINUX内核所用的文件系统。它开始由Rémy Card设计,用以代替ext,于1993年1月加入linux核心支持之中。
EXT2文件系统数据结构
- 创建虚拟硬盘
mke2fs [-b blksize -N ninodes] device nblocks
- 虚拟磁盘布局
Block#0:引导块 - 超级块
1.Block#1:B1是超级块,用于容纳整个文件系统的信息,是记录整个文件系统相关信息的地方。
2.重要字段:
u32 s_inodes_count
u32 s_blocks_count
u32 s_r_blocks_count
u32 s_free_blocks_count
u32 s_mtime
u32 s_wtime
u32 s_magic
u32 s_inodes_per_group
u32 s_mnt_count
u32 s_max_mnt_count
u32 s_state
- 块组描述符
Block#2:块组描述符块,EXT2将磁盘块分为几个组,每个组有8192个块,用一个块组描述符结构体来描述。 - 块和索引节点位图
Block#8:块位图,位图是用于表示某种项的位序列,也用于分配和回收项。
Block#9:索引节点位图,一个索引节点代表一个文件的数据结构。 - 索引节点
- Block#10:索引(开始)节点块,每个文件都用一个128字节的唯一索引节点结构体表示
- 直接块
- 间接块
- 双重间接块
- 三重间接块
- 数据块
紧跟在索引节点块后面的是文件存储数据块。 - 目录条目
目录包含dir_entry结构,且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
- 将索引节点号转换为磁盘上的索引节点
在EXT2文件系统中,每个文件都有一个唯一的索引节点结构。
编程示例
- 1.显示超级快
- 2.显示位图
- 3.显示根索引节点
- 4.显示目录条目
3级文件系统函数
- 定义:3级文件系统支持文件系统的挂载、卸载和文件保护
- 挂载算法
挂载操作命令:
mount filesys mount_point
该命令可将某个文件系统挂载到mount_point目录上。 - 卸载算法
卸载文件系统可卸载已挂载的文件系统。 - 交叉挂载点
- 向下遍历
- 向上遍历
注意:当遍历一个路径名时,两个方向的挂载点可能会出现交叉
- 文件保护
owner group other
----- ----- -----
r w x r w x r w x
文件系统项目的扩展
- 1.多个组
- 2.4KB大小的块
- 3.管道文件
- 4.I/O缓冲
苏格拉底挑战
- 邮差问题
- 块和索引节点位图
遇到的问题及解决
- 问题
EXT2文件系统与EXT3和EXT4有什么不同之处?它们之间的主要区别是什么? - GPT的回答