文件分为被打开的文件和没有打开的文件
被打开的文件是放在内存里的
未打开的文件是放在磁盘里的
打开文件的前提是找到文件
找到文件则需要文件的路径
每一个文件都有其对应的路径
路径就是由磁盘文件系统进行管理的
磁道构成柱面,柱面构成磁盘
本质上是一个三维数组
磁盘就是一个以扇区为单位的一维数组
数组的下标就是每一个扇区的LBA地址
OS使用磁盘,就可以用一个数字访问磁盘扇区

OS和磁盘进行IO时,以扇区为基本单位,512字节,单次IO的数据量少

文件 = 内容 + 属性
属性也是数据,保存在结构体inode中
一个文件就有一个inode

inode值不重复

Linux中的文件内容和属性分开存储

磁盘是这样的
最后会划分成一个个block group
所以只要管理好一个个block group就可以了

文件系统里,以4kb来划分块
inode会保存和数据块之间的映射关系

找到inode后就能找到块
inode bitmap记录了data block中哪个数据块被占用了
新建一个文件
需要先分配inode
要分配inode,需要去inode bitmap上去查找一个没有被使用的数据块
然后将文件属性写入数据块
删除文件本质上是将文件对应的inode bitmap和block bitmap中的比特位由1变成0
就代表这个文件已经被删除了
被删除的文件是可以恢复的,只要拿到被删除文件的inode,然后将它的inode bitmap和block bitmap的比特位由0变成1,就可以了
当然前提是文件没有被覆盖成别的
但是要恢复还是很麻烦
在Linux中删除文件,本质是设置inode和block无效
后续很可能就会被占用
因此被删除的文件最好直接别动


ex2文件系统会根据分区的大小划为分数个block group
每个block group都由相同的结构组成
super block用来记录block和inode的总量,未使用的block和inode的数量
一个block和inode的大小等数据
super block记录分区block和inode的信息
因此不是所有的分组中都有super block
每几百组就会有一个super block
这些super block中的内容是相同的
文件系统
对于一个分区,它的每一个分组所对应的inode号的个数,block个数都是固定的
可能存在inode全部用完,但是block还没有用完的情况
关于inode
inode是以分区为单位的一套inode
inode在分配的时候,只需要确定起始的inode即可
关于block
块号也是统一编号的,也是一套
每一个组里也只需要确认block起始块号即可


inode的block数组分为12个直接映射和3个间接索引
block数组下标中的前12位是直接映射,里面就是文件的内容
剩下的三个则分别指向别的块
剩下三个间接索引指向的块不存文件的数据,存储其他的块号
存储的块号存储文件的内容
文件的大小是有限的
如何理解目录文件

目录 = inode + datablock = 属性 + 内容
因此目录也有对应的数据块
目录的数据块存储的是:文件名和inode的映射关系

要找到文件名,首先要打开当前目录
而当前目录也是文件,也有文件名
因此需要进行逆向的路径解析
如果要访问相同路径下的不同文件
本质还是重新从根目录进行路径解析
但是这样效率太低了
因此Linux系统要对路径进行缓存,来减少重复路径解析的消耗
Linux会以多叉树的形式进行路径缓存


在Linux中如果存在多个分区
一定存在一个分区包含根目录
同时存在若干个普通目录
若只有分区,该分区是无法使用的
分区必须挂载到目录上,分区才能够被通过路径的方式进行访问
dd命令
是以二进制的形式在磁盘中形成文件

