1

一、参考

存储技术原理分析

二、正文

1. 前言

Minix是Linux最早的文件系统,Minux文件系统的磁盘布局由6个部分组成:
引导块,超级块,i节点位图,逻辑块位图,i节点,逻辑块

image.png

引导块:
在文件系统的开头,通常为一个扇区,其中存放引导程序,用于读入并且启动操作系统;

超级块:
用于存放磁盘设备上文件系统结构的信息,说明各个部分的大小;

i节点位图:
用于描述磁盘上每个i节点的使用情况,除了第一个比特位以外,i节点位图中的每个
比特位依次代表盘上每个i节点区中的一个i节点,因此i节点位图的比特位1代表盘上i节点区中的第一个i节点
当一个i节点被使用时候,则i节点位图中对应的比特位被置位,由于当所有磁盘i节点都被使用时候,查找空闲i节点的函数会返回0值,因此i节点位图最低比特位(位0)闲置不用,并且在创建文件系统时候,会预先将其设置为1,即编号为0的i节点未被使用,i节点编号从1开始,编号1保留给根目录对应的i节点。

i节点:
反映的是文件的元数据

逻辑块位图:
描述磁盘上每个逻辑块的使用情况,
除了第1个比特位(位0)以外,逻辑块位图上每个比特位依次代表盘上逻辑块中的一个逻辑块,因此逻辑块位图的比特位1代表盘上逻辑区中第一个逻辑块,当一个逻辑块被使用时候,则逻辑块位图中对应比特位被置位,由于当所有磁盘逻辑块都被使用时候,查找空闲逻辑块的函数会返回0值,因此逻辑块位图最低比特位(位0)闲置不用,并且在创建文件系统时候会预先将其设置为1,在这样的设计下,编号为0的逻辑块未被使用,逻辑块编号从1开始

逻辑块:
保存了文件的数据,每个文件有且仅有一个i节点,但是可以有0,1或者多个逻辑块,i节点最重要的作用莫过于作为寻址文件数据的出发点,因此i节点中需要保存文件数据的逻辑块编号。

2. 文件系统对象

Linux文件系统对象之间的关系,可以概括为文件系统类型、超级块、inode、dentry、vfsmount之间的关系

2.1 文件系统类型

文件系统类型规定了某种类型文件系统的行为,存在的主要目的是为了构造这种类型文件系统的实例,或者被称为超级块实例.
linux支持多种文件系统,每个文件系统对应于一个文件系统类型file_system_type结构

image.png

2.2 VFS超级块

超级块是整个文件系统的元数据的容器,对于基于磁盘的文件系统,超级块(磁盘上的超级块)是保存在磁盘设备上固定位置的一个或者多个块,在装载该磁盘上的文件系统的时候,磁盘上的超级块被读入内存,根据它构造内存中的超级块。

其中一部分是各种文件系统共有的,被提取出来,称为VFS超级块,表示VFS超级块的结构是super_block

image.png

image.png

image.png

image.png

2.3 inode

2.4 dentry

dentry翻译为目录项,但是和文件系统中的目录项不是一个概念,VFS和具体文件系统的dentry如下图,dentry属于所有文件系统对象,包括目录、常规文件、符号链接、块设备文件、字符设备文件等,反映的是文件系统对象在内核中所在文件系统树中的位置

image.png

image.png

2.5 文件系统装载

vfsmount, 文件系统装载,在Linux系统中,文件系统在使用前,需要先装载,vfsmount对象反映了一个已经装载的文件系统实例, Linux内核代码可以通过vfsmount访问这个文件系统实例,但是,如果要被用户空间访问,需要将它装载到全局文件系统树,形成其中的一个子树,vfsmount对象变成了用于将每个局部文件系统链接到全局文件系统树的"连接件"

3. 装载文件系统

4. 路径查找

5. 打开文件

6. 读文件

7. 写文件

8. 冲刷文件

9. 块设备文件

10. 文件系统编程模式

image.png


一曲广陵散
76 声望21 粉丝

柴米油盐酱醋茶