申明:文中有的图片是网上的以及马哥教育的图片.
内容是我自己写的,介意话,请联系博主,立刻删除。
ext2管理文件的方式:
将存储设备高级格式化其实就是创建文件系统。
创建好文件系统之后。
具体可以参考下图。
Boot Block
在整体的规划当中,文件系统最前面有一个启动扇区(boot sector),
这个启动扇区可以安装开机管理程序,这是个非常重要的设计,这样我们就能够将不同的开机管理程序安装到个别的文件系统最前端
而不用覆盖整个硬盘唯一的 MBR, 这样也才能够制作出多重引导的环境!
Block Group
这个区域里记录了很多信息,如下:
Super block:Block和Inode的大小,Block和Inode的数量,Block和Inode的已使用和未使用数量,文件系统版本号,最近一次挂载时间等等
GDT:块组名,块组边界信息
Block Bitmap:blcok位图,可以快速查找block是否被占据
inode Bitmap:inode位图,可以快速查找inode是否被占据
inode Table:inode表
Data Blocks:数据块
可以参考下图
ext2会把磁盘分成一个个block,文件存在block中(一个文件无论大小最少要占用一个block,或多个block,不会出现两个文件使用一个block)。
文件存在block上是随机存储的,inode记录了文件使用了那些block。就像书的目录,某一章在书的那些页,不过不一样的是,不是连续的。
磁盘可以随机存数,inode和blocl都会出现删除,增加的操作,使用了一段时间后,需要创建一个文件的时候,无法知道那个inode和block有空位。解决类似这样的问题,就有了inode位图和块位图。
inode位图,每个inode对应一位,以0或1,来标记inode是否使用,这样就可以快速查找到哪些inode使用或未使用
块位图,和inode位图同理,可以快速查找哪些block空闲。
创建文件的流程:
1、扫描inode位图,找到空位,使用此inode
2、扫描块位图,找到哪些block空闲,先分配几个block,
3、分配block够用就完成创建,回收多余的block。不够用就再分几个block,直至够用。
文件的搜索过程(目录文件解析)
目录并不是包含着文件的,也是一个文件,里面存放着各个文件索引,目录中存放了inode号和一些元数据,包括,文件名,inode号,大小等
这里讲解下文件的搜索过程式怎么样的
以/etc/pps/aa 为列
1、文件系统能够自引用找到 / 在哪。
2、在 / 文件中,搜索文件名etc,从而得到etc的inode号
3、在inode表里找到/etc对应的inode,从而得到/etc在date区的block位置
4、在date区找到/etc的block后,因为/etc/是目录文件,可以得到pps的inode号
5、在inode表里找到pps对应的inode号,从而得到/etc/pps在date区的block位置
6、在date区找到/etc/pps的block后,因为pps是目录文件,可以得到aa的inode号
7、在inode表里找到aa对应的inode,从而得到aa的block位置
8、在date区找到/etc/pps/aa的数据,结束。
inode的结构(参考图)
Diecct Blocks:1直接指向date
Indircct block:指向一个block,将block作为指针,指向date
Donble Indircct:同理两级指针
Triple Indircct:3级指针
inode的长度以及block的大小,限制了文件的大小
目录信息:
下图是目录文件中的结构.
inode
rec_len:总长度
name_len:文件名长度
file_type:文件类型
name:文件名,\0 是填充位
扩展知识:
日常的文件操作,在文件系统中实际的操作是:
文件删除:inode被标记为空闲,此inode指向的磁盘被标记为空闲
如果inode被引用了多次,且此次删除未使得其引用计数降低为0的话,这意味着文件被删除仅删除了一个访问路径
文件复制:创建一个新文件,并原文件中数据在新文件指向的磁盘快重新写一次。
文件移动:
在同一个分区移动:移动文件仅是改变了文件访问路径
跨分区移动:在新分区创建文件,把数据复制过去,删除原分区数据
软硬连接。(要理解此处内容,仔细参考上文中:文件的查看过程)
硬链接:建立一个链接文件,其inode号,其连接文件的inode号是一样的
软连接:建一个链接文件,新建一个inode号,其inode号指向原文件
从图中,以及上述内容可以看出硬链接和软连接的区别:
1:硬链接原文件和新文件的inode编号一致,而软连接不一样。
2:对原文件删除,会导致软连接不可用,而硬链接不受影响。
3:对原文件的修改,软、硬链接文件内容也一样的修改,因为都是指向同一个文件内容。