前言:通过对根本IO的学习,可以知道:文件形貌符用于标识已经打开的文件,通过数组数组下标来创建映射关系,而这个数组是一个指针数组,每个文件都有一个file对象,内部保存了文件相关的inode等其他信息。
inode_number用于寻找该文件存储在磁盘大概硬盘的文件信息和数据。
1.硬件根本
1.1 理解什么是柱面、磁道、磁头、扇区
磁道:完备的一圈被称为磁道
扇区:图中玄色部分称为扇区 注:纵然长短不同,但是实际扇区A、B、C的大小都为512B
扇区是存储数据的基本单位
柱面:磁盘是分布如图所示,而柱面是垂直方向上,所有磁道构成的面,有多少磁道,就有多少柱面
磁头:磁盘一样平常有上下两个面,每个面临应一个磁头,那么一个磁盘共有两个磁头
1.2 LBA地点
我们可以把每个磁道拉直,这样就抽象成了一个数组,每个扇区对应有着自己的地点(其实是数组下标),这种地点叫做LBA
某扇区的LBA = 它所在的柱面号 * 单个柱面的扇区总数 + 它所在的磁头号*每磁道扇区数 + 扇区号S - 1
2.初识文件系统
2.1 什么是“块”?
为了进步效率,操纵系统实际在读取硬盘时,不会按最小单位读取(即一个扇区一个扇区读取),而是一次性读取多个扇区,这样一连的扇区被称为”块“。
块:一个块的大小通常为 4KB = 4096B一个扇区的大小为512B,那么一个块就由8个扇区构成。
注:
知道LBA,块号 = LBA/8
知道块号,扇区 = 块号*8 + n(块内第几个扇区)
2.2 什么是“分区”?
磁盘是可以被分成多个”分区“的,就比如我们熟悉的windows操纵系统,一块硬盘能够被分成 C盘、D盘、E盘等。其中C、D、E就是分区,分区本质上是对硬盘的格式化。
注:柱面是分区的最小单位。
2.3什么是“inode”?
用于存储文件的创建者、创建日期、大小等信息的地区叫做inode
注:
①:linux中文件存储的属性和内容是分离存储的
②:linux下,保存文件属性的集合inode,一个文件一个inode,inode内有一个唯一的标识符,叫做inode号
③:文件名属性没有纳入到inode数据结构中
④:inode的大小一样平常为128字节大概256字节
⑤:任何文件的内容大小可以不同,但是属性大小一定是相同的
3.ext2文件系统
3.1 宏观认识
ext2文件系统将整个地区划分为不同的分区(假设为1、2、3、4),再将其中的每个分区划分成若干个同样大小的组块(Block Group),如下图所示。
3.2 块组内部构成
3.2.1 inode table (i节点表)
存放文件属性 如文件大小,所有者,最近修改时间等
当前分组所有inode属性的集合
inode_number 以分区为单位,在同一分区内是唯一的,不可跨分区
注:通过inode_number就可以找到对应文件的信息
3.2.2 Block Bitmap (块位图)
通过位图的方式来记录哪个数据块被占用,哪个数据块没有被占用
比方:一个有98304个bit位,换算后对应3个数据块,那么在Block Bitmap中 001,就表示第一个数据块被占用,其他没有被占用。
3.2.3 inode Bitamp 位图
每个bit表示一个inode是否空闲可用
3.2.4 GDT (Group Descriptor Table)
块组形貌符表,形貌块组属性信息,整个分区分成多个块组就对应有多少个块组形貌符。每个块组形貌符存储一个块组的形貌信息,如在这个块组中从那边开始是inode Table,从那边开始是DataBlocks,空闲的inode和数据块尚有多少个等等。块组形貌符在每个块组的开头都有一份拷贝。
3.2.5 Super Block
存放文件系统本身的结构信息,形貌整个分区的文件系统信息。记录的信息主要有:block和inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次查验磁盘的时间等其他文件系统的相关信息。Super Block的信息被粉碎,可以说整个文件系统结构就被粉碎了
注:
①:当知道了 block 和 inode table 的大小就知道了 Block BitMap 和 Inode Bitmap的大小,就知道了GDT多大,因此Super Block权衡了一个分区所有信息
②:在使用一个分组前,必要把所有信息写入到Super Block 和 GDT 当中,同时将Blcok Bitmap、inode BitMap、inode Table、Data Block 全部清零,这个过程就叫格式化。
③:不是所有块组都有Super Block,一个inode Block挂了,影响不外是几个g的数据,但是一个超级块挂了,影响就是几百G的数据 ,因此当其中一个超级块出标题时,可以用其他块组中的超级块来规复。
这就是为什么超级块会被放在多个块组中,而不是单独放在File System中,就是为了其中一个出错,数据还能够规复
3.2.6 Date Blocks
数据区:存放文件内容,也就是一个一个的Block。根据不同文件范例有以下几种情况
|