- inode 用于记录文件的权限信息,以及对应的data block编号,每个文件占用一个inode
- data block 用于存放文件的内容,每个文件至少占用一个
- superblock 用于记录整个文件系统的inode block用量以及文件系统相关信息
索引式文件系统,inode和block都有自己的编号,可以根据inode直接获取所有data block 的编号并直接访问,访问效率高
filesystem = boot sector + block group * n
block group = super block + filesystem description + data block bitmap + inode bitmap + inode table + data block
- data block的数量格式化后就不能改变了
- 每个data block只能存放一个文件的信息,若文件较大会占用多个block,若较小则该data block剩余容量会浪费掉
- inode中记录了文件的meta信息,包括: rwx权限信息,用户和群组,时间相关atime ctime mtime,文件大小,data block的位置,以及特殊权限SUID、SGID、SBIT,特殊属性a: apppend only, i: imuatable等
- inode的数量在文件系统格式化时确定
- 每个inode的大小为128Bytes
- 每个文件占用一个inode,因而文件系统支持的文件数量在格式化时就已经确定了
- 用户在访问文件是,首先根据文件名获取到inode编号,进而获取inode上的权限信息,如果权限符合才能继续操作
inode结构
|--- 权限等meta信息 ---|---直接记录区 X 12---|---简介记录区 X 1--|--双间接记录区 X 1---|--三间接记录区 X 1---|
inode上每个记录区占用4Bytes,假设我们的文件系统data block大小为1k
直接记录区 : 直接指向data block,每个直接记录区所能代表的文件大小为1k
间接记录区 :inode直接指向的data block不是用于记录数据信息,而是用于记录真是存储数据的data block的位置, 这样的话,间接记录区直接指向的data block被当作指针,由于每个记录占用4Bytes,一个间接记录区所能代表的文件的大小为
1024 / 4 * 1k = 256k
双间接记录区 : 双间接记录区能够记录的文件大小 256 * 256 * 1k
三间接记录区 :三间接记录区能够记录的文件大小 256 * 256 *256 * 1k
这样,该文件系统的单文件大小最大为:(12 + 256 + 256^2 + 256^3)* 1k
super block大小通常为1k,其中记录了:
- inode和data block总量
- 已经使用和未使用的 inode 和 data block数量
- inode(128 Bytes)和data block(1k, 2k, 4k)大小
- 文件系统最近读取,写入和磁盘校验的时间
- 文件系统的挂载状态,valid bit为0表示未挂载,为1表示已挂载
此外,我们注意到文件系统的每个block group都有superblock,其实都是第一个block group中superblock的备份
记录了当前block group中不同区段的划分, superblock,inode bitmap, block bitmap,inode table, data block的起始编号
记录哪些data-block已经被使用,哪些未被使用
记录哪些inode已经被使用,哪些未被使用
- 获取目录的inode号
- 根据目录的inode判断对目录是和否有x权限,若有权限则在目录的中 查找文件名对应的inode号码
- 根据文件的inode判断对文件的权限,有权限再去读取对应的data block
- 判断对目录是否有wx权限
- 在inode bitmap中查找空闲的inode号,并更新权限信息
- 在block bitmap中查找空闲block并将数据写入,然后更新对应的inode信息,将inode中的记录区指向该block
- 更新superblock
Hard link
假设有文件
/a/b
和/c/d
, 他们是一对hard link 那么二者的关系如图:不会创建新的文件,只会在目录的data block下添加一笔记录