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]数组包含指向文件磁盘块的指针
- 直接块:i_block[0]至i_block[11],直接指向磁盘块
- 间接块:i_block[12]指向一个包含256个块编号
- 双重间接块
- 三重间接块
邮差算法(gpt)
显示超级块
- 打开虚拟磁盘读取:
int fd=open("vdisk",O_RDONLY)
- 将超级块(Block#1或1KB的1024偏移量位量)读入char buf[1024]中
char buf[1024];
lseek(fd,1024,SEEK_SET);
int n = read(fd,buf,1024);
- 让ext2_super_block *sp结构体指向buf[]。然后,利用sp->field访问超级块结构体的各个字段。