首页 > 代码库 > linux 文件系统
linux 文件系统
1.这里以 EXT2 文件系统为例
在Linux下,一个磁盘的最前面是MBR(MBR(main boot record) 主引导记录),大小为512Byte
在每一个分区下,第一部分是boot sector,接下来是super block,再接下来是inode,最后是block。
对于每一个block而言,一般大小是4K,如果一个block已经存放了一个大小为1K的文件,那么剩余的空间是无法再被使用的。
2.MBR包括三部分内容:
分区表:指出有几个分区,每个分区的起始扇区号、大小和操作系统类型及其他特性
自举装入程序:PC机启动时由bios装入内存执行。如果装了多个操作系统,将根据选择去读出对
应分区的boot sector程序装入内存,执行该操作系统的自举程序。
校验信息:检验是否正确
3.boot sector (引导扇区)应当包含如下信息:
本分区操作系统类型
数据区大小
根目录区允许最大目录项(在根目录区最多创建多少个文件)
如果该分区安装了操作系统并被设置为活动分区,那还会包含一段“引导程序”;如果没有安装系
统,则该分区引导扇区为空或其中的数据是无效的。(windows默认活动分区为C)
4.MBR和boot sector的区别:
两者关系是自上而下的的关系。
1.启动顺序由先后。pc机启动时,先自行MBR,在根据选择自行某个分区下的boot sector(选择执行的boot sector所在分区就是活动分区。用户选择一个操作系统,实际上也就是选择一个分区作为活动分区)
2.boot sector可以为空(没装系统),但MBR必须包含内容。
3.MBR必须被读取并执行;引导扇区根据选择执行。
4.MBR实际上包含的内容也比boot sector广泛,MBR相当于包含了硬盘整体层面上的引导扇区(自检装入程序)、根目录区(分区表)。
5.superblock (超级块):里面的数据其实就是文件卷的控制信息部分,也可以说它是卷资源表,有关文件卷的大部分信息都保存在这里。例如:硬盘分区中的每个block的大小、硬盘分区上一共有多少个blockgroup、以及每个block group中有多少个inode
一般一个文件的属性和占有的block号都是存放在inode中的,而block存放的是文件的实际内容。
每一个block和inode都是有编号的
在inode中记录一个文件消耗的空间是128Byte。
在superblock中记录的是inode和block的信息,比如有多少个block,已经用了多少个block,还有多少个block。
如果一个分区比较大,block会很多,这个时候可以将block分组,即block group
每一个block group中第一个部分存放的是superblock,作用是记录一共有多少个block,还剩多少个block。这个只是记录使用的情况,而具体被使用的编号需要在block对照表中查询了。
第二个部分存放的是系统文件的描述,包括每一个block group是从那一个block开始的,到那一个block结束的。
第三个部分是block对照表,作用是记录哪些block已经被使用了,哪些block没有被使用,第四个部分是inode的对照表,作用是记录哪些inode已经被使用了,哪些inode内有被使用,对照表也称作为位图。
第五个部分是indoe表:*文件的字节数
*文件拥有者的UserID*文件的GroupID
*文件的读、写、执行权限
*文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
*链接数,即有多少文件名指向这个inode*文件数据block的位置可以用stat命令,查看某个文件的inode信息:statexample.txt
总之,除了文件名以外的所有文件信息,都存在inode之中。纵观整个inode的C语言描述,没有发现关于文件名的东西,也就是说文件名不由inode保存,实际上系统是不关心文件名的,对于系统中任何的操作,大部分情况下你都是通过文件名来做的,但系统最终都要通过找到文件对应的inode来操作文件,由inode结构中 *i_op指向的接口来操作。
文件系统如何存取文件的:
1)、根据文件名,通过Directory里的对应关系,找到文件对应的Inodenumber
2)、再根据Inodenumber读取到文件的Inodetable
3)、再根据Inodetable中的Pointer读取到相应的Blocks
这里有一个重要的内容,就是Directory,他不是我们通常说的目录,而是一个列表,记录了一个文件/目录名称对应的Inodenumber。
第六个部分是block
在inode中记录一个文件消耗的空间是128Byte。inode每指向一个block,就要消耗空间4Byte,由此可得一个inode指向的文件最大为128Byte/4Byte*4K=128K。实际上一般系统将一个inode划分成12个直接区,1个间接去,1个2间接区,1个3间接区。
对于直接区,每一个直接区直接指向一个block
对于间接区,该间接区指向一个block,然后这个被指向的block再指向别的block,实际上间接区通过这个方法可以间接的指向4K/4Byte=1024个block。
同理2间接区先指向一个block,然后这个被指向的block再指向别的block,第二次被指向的block最终再指向实际用来存储的block,这样间接区通过这个方法可以间接的指向1024*1024=1048576个block。
3间接区同理可以推算,但是要注意的是在实际文件系统中,大于2K的block会收到文件系统本身的限制。
linux 文件系统
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。