信息安全系统设计与实现 学习笔记5

发布时间 2023-10-15 16:31:50作者: 20211412赖加奕

EXT2文件系统

通过mkfs创建虚拟硬盘

mke2fs [-b blksize -N ninodes] device nblock
创建一个nblocks个块和ninodes个索引节点EXT2文件系统。

虚拟磁盘布局

超级块

Block#1:超级块(在硬盘分区中字节偏移量为1024)
s_first_data_block:0表示4KB块大小,1表示1KB块大小。
s_log_block_size:确定文件块大小,为1KB
s_mnt_count:已挂载文件系统的次数。
s_magic:标识文件系统类型的幻数。

块组描述符

EXT2将磁盘块分成几个组,每个组上有8192个块,每组用一个块组描述符结构体来描述。

块和索引节点位图

Block#8:块位图:位图是用表示某种项的位序列,例如磁盘块或索引节点
Block#9:索引节点位图:一个索引节点就是用来代表一个文件的数据结构

索引节点

Block#10:索引(开始)节点 每个文件都用一个128字节的唯一索引节点结构体表示
i_block[15]数组包含指向文件磁盘块的指针

  1. 直接块:i_block[0]至i_block[11],直接指向磁盘块
  2. 间接块:i_block[12]指向一个包含256个块编号
  3. 双重间接块
  4. 三重间接块
邮差算法(gpt)

显示超级块

  1. 打开虚拟磁盘读取:
    int fd=open("vdisk",O_RDONLY)
  2. 将超级块(Block#1或1KB的1024偏移量位量)读入char buf[1024]中
char buf[1024];
lseek(fd,1024,SEEK_SET);
int n = read(fd,buf,1024);
  1. 让ext2_super_block *sp结构体指向buf[]。然后,利用sp->field访问超级块结构体的各个字段。