EXT2文件系统数据结构
通过mkfs创建虚拟磁盘
- 命令
- mke2fs [-b blksize -N ninodes] device nblocks
- 下面的命令可在一个名为vdisk的虚拟磁盘文件上创建一个EXT2文件系统,有1440个大小为1kb的块
- dd if=/dev/zero of=vdisk bs=1024 count=1440
- mke2fs vdisk 1440
虚拟磁盘布局
- Block#0: 引导块 B0是引导块,文件系统不会使用它。它用来容纳一个引导程序从磁盘引导操作系统
超级块
- Block#1: 超级块(在硬盘分区中硬盘偏移量为1024)B1是超级块,用于容纳整个文件系统的信息。
- S_first_data_block:表示4kb块大小,1表示1kb块大小。它用于确定块组描述符的起始块
- s_log_blocks_size:确定块文件大小为1kb(2**s_log_block_size)
- s_mnt_count:已挂载文件系统的次数。
- s_magic:表示文件系统的幻数
块组描述符
- Block#8:块组描述符块 EXT2将磁盘分成几个组。每个组有8192个块。每组用一个块组描述符结构体来描述
块和索引节点位图
- Block#8: 块位图 位图是用来表示某种项的位序列,例如磁盘块或索引节点。
- Block#9:索引节点位图 一个索引节点就是用来代表一个文件的数据结构。
索引节点
- Block#10: 索引(开始)节点 每个文件都用一个128字节的唯一索引节点结构体表示。
- 直接块:i_block[0]至i_block[11],指向直接磁盘块。
- 间接块:i_block[12]指向一个包含256个块编号的磁盘块每个块编号指向一个磁盘块。
- 双重间接块:i_block[13]指向一个指向256个块的块每个块指向256个磁盘块。
- 三重间接块:i_block[14]是三重间接块。
数据块
- 紧跟在索引节点块后面的是文件存储数据块。
目录条录
- dir_entry是一种可扩充结构。名称字段包含1到255个字符,不含终止NULL
3级文件系统
- 3级文件系统支持文件系统的挂载/卸载和文件保护。
挂载算法
- 命令
- mount filesys mount_point
卸载算法
- 卸载文件操作可卸载已挂载的文件系统
交叉挂载点
- 向下遍历
- 向上遍历
文件保护
- 在Unix和Linux中,可通过文件索引节点中的权限位实现文件保护。
实现uid和有效uid
- 在Uinx和Linux中,每个进程都有一个实际uid和有效uid.
苏格拉底挑战