信安系统学习笔记五
第十一章 EXT2文件系统
一.知识点归纳
EXT2文件系统
The Second Extended File System (ext2)文件系统是Linux系统中的标准文件系统,是通过对Minix的文件系统进行扩展而得到的,其存取文件的性能极好。 在ext2文件系统中,文件由inode(包含有文件的所有信息)进行唯一标识。
EXT2文件系统数据结构
通过mkfs创建虚拟键盘
mke2fs [-b blksize -N ninodes] device nblocks
虚拟磁盘布局
超级块
超级块(Super Block)描述整个分区的文件系统信息,如inode/block的大小、总量、使用量、剩余量,以及文件系统的格式与相关信息。超级块在每个块组的开头都有一份拷贝(第一个块组必须有,后面的块组可以没有)。
块组描述符
- 块组描述符块(GD)由很多块组描述符组成,整个分区分成多个块组就对应有多少个块组描述符。
- 每个块组描述符存储一个块组的描述信息,如在这个块组中从哪里开始是inode Table,从哪里开始是Data Blocks,空闲的inode和数据块还有多少个等等。块组描述符在每个块组的开头都有一份拷贝。
邮差算法
基本文件系统
type.h:包含了超块、组描述符、索引节点、目录条目结构;打开文件表、挂载表、PROC结构体和文件系统常数
global.c:包含文件系统全局变量
实用程序函数:get_block/put_block函数、iget(dev,ino)函数、The iput(INODE *mip)函数、getino()函数
mount-root.c:用于挂载根文件系统
1级文件系统函数
mkdir算法:创建一个带路径名的新目录
create算法:创建一个空的普通文件
rmdir算法:删除目录
link算法:创建从new_file到old_file的硬链接(只能用于普通文件,不能用于目录)
unlink算法:取消文件链接
sylink算法:创建一个从新文件到旧文件的符号链接
readlink算法:读取符号文件的目标文件名并返回目标文件名的长度
2级文件系统函数
open算法:打开一个文件进行读或写
lseek算法:将打开的文件描述符在OFT中的偏移量设置为从文件开头开始或当前位置开始的字节位置
close算法:关闭文件描述符
read系统调用:将n个字节从打开的文件描述符读入用户空间的缓冲区
write系统调用:将n个字节从用户空间的缓冲区写入打开的文件描述符
opendir-readdir
3级文件系统函数
挂载算法:
挂载操作命令mount filesys mount_point可将某个文件系统挂载到mount_point目录上
卸载算法:将挂载的文件系统与挂载点分开
交叉挂载点:修改getino(pathname)函数,来支持交叉挂载点
文件保护:通过文件索引节点中的权限位实现文件保护
实际uid和有效uid:每个进程都有一个实际uid和一个有效uid
文件锁定:文件锁定机制允许进程对一个文件或文件的某些部分设置文件锁,以防止在更新文件时出现竞态条件
二.问题与解决思路
ext2 头文件的下载:
三.实践内容与截图
显示超级块