加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

好文分享:EXT文件体系机制道理详解

发布时间:2019-09-19 04:59:03 所属栏目:建站 来源:骏马金龙
导读:文章有些长,可是作者总结的很是好,能学到许多技能细节常识。请各人耐性阅读。 将磁盘举办分区,分区是将磁盘按柱面举办物理上的分别。分别好分区后还要举办名目化,然后再挂载才气行使(不思量其他要领)。名目化分区的进程着实就是建设文件体系。 文件系

下图是一个ext4文件体系的superblock的信息,ext家属的文件体系都能行使dumpe2fs -h获取。

好文分享:ext文件体系机制道理详解

2.3 块组描写符表(GDT)

既然文件体系分别了块组,那么每个块组的信息和属性元数据又生涯在那边呢?

ext文件体系每一个块组信息行使32字节描写,这32个字节称为块组描写符,全部块组的块组描写符构成块组描写符表GDT(group descriptor table)。

固然每个块组都必要块组描写符来记录块组的信息和属性元数据,可是不是每个块组中都存放了块组描写符。ext文件体系的存储方法是:将它们构成一个GDT,并将该GDT存放于某些块组中,存放GDT的块组和存放superblock和备份superblock的块沟通,也就是说它们是同时呈此刻某一个块组中的。读取时也老是读取Group0中的块组描写符表信息。

若是block巨细为4KB的文件体系分别了143个块组,每个块组描写符32字节,那么GDT就必要143*32=4576字节即两个block来存放。这两个GDT block中记录了全部块组的块组信息,且存放GDT的块组中的GDT都是完全沟通的。

下图是一个块组描写符的信息(通过dumpe2fs获取)。

好文分享:ext文件体系机制道理详解

2.4 保存GDT(Reserved GDT)

保存GDT用于往后扩容文件体系行使,防备扩容后块组太多,使得块组描写符超出当前存储GDT的blocks。保存GDT和GDT老是同时呈现,虽然也就和superblock同时呈现了。

譬喻前面143个块组行使了2个block来存放GDT,可是此时第二个block还空余许多空间,当扩容到必然水平常2个block已经无法再记录块组描写符了,这时就必要分派一个或多个Reserved GDT的block来存放超出的块组描写符。

因为新增进了GDT block,以是应该让每一个生涯GDT的块组都同时增进这一个GDT block,以是将保存GDT和GDT存放在统一个块组中可以直接将保存GDT调动为GDT而无需行使低效的复制本领备份到每个存放GDT的块组。

同理,新增进了GDT必要修改每个块组中superblock中的文件体系属性,以是将superblock和Reserved GDT/GDT放在一路又能晋升服从。

3.Data Block

好文分享:ext文件体系机制道理详解

如上图,除了Data Blocks其他的部门都表明过了。data block是直接存储数据的block,但究竟上并非云云简朴。

数据所占用的block由文件对应inode记录中的block指针找到,差异的文件范例,数据block中存储的内容是纷歧样的。以下是Linux中差异范例文件的存储方法。

  • 对付通例文件,文件的数据正常存储在数据块中。
  • 对付目次,该目次下的全部文件和一级子目次的目次名存储在数据块中。
  • 文件名不是存储在其自身的inode中,而是存储在其地址目次的data block中。
  • 对付标记链接,假如方针路径名较短则直接生涯在inode中以便更快地查找,假如方针路径名较长则分派一个数据块来生涯。
  • 装备文件、FIFO和socket等非凡文件没稀有据块,装备文件的主装备号和次装备号生涯在inode中。

通例文件的存储就不表明白,下面别离表明非凡文件的存储方法。

3.1 目次文件的data block

对付目次文件,其inode记录中存储的是目次的inode号、目次的属性元数据和目次文件的block指针,这内里没有存储目次自身文件名的信息。

而其data block的存储方法则如下图所示。

好文分享:ext文件体系机制道理详解

由图可知,在目次文件的数据块中存储了其下的文件名、目次名、目次自己的相对名称"."和上级目次的相对名称"..",还存储了指向inode table中这些文件名对应的inode号的指针(并非直接存储inode号码)、目次项长度rec_len、文件名长度name_len和文件范例file_type。留意到除了文件自己的inode记录了文件范例,其地址的目次的数据块也记录了文件范例。因为rec_len只能是4的倍数,以是必要行使""来添补name_len不足凑满4倍数的部门。至于rec_len详细是什么,只需知道它是一种偏移即可。

目次的data block中并没有直接存储目次中文件的inode号,它存储的是指向inode table中对应文件inode号的指针,临时称之为inode指针(至此,已经知道了两种指针:一种是inode table中每个inode记录指向其对应data block的block指针,一个此处的inode指针。题外话:现实上inode指针应该称之为存储在目次data blcok中的链接link,这个link和inode num逐一映射,以是删除文件的函数称为unlink(),暗示在目次的data block中删除这个链接)。一个很有说服力的例子,在目次只有读而没有执行权限的时辰,行使"ls -l"是无法获取到其内文件inode号的,这就表白没有直接存储inode号。现实上,由于在建设文件体系的时辰,inode号就已经所有分别好并在每个块组的inode table中存放好,inode table在块组中是有详细位置的,假如行使dumpe2fs查察文件体系,会发明每个块组的inode table占用的block数目是完全沟通的,如下图是某分区上个中两个块组的信息,它们都占用249个block。

好文分享:ext文件体系机制道理详解

除了inode指针,目次的data block中还行使数字名目记录了文件范例,数字名目和文件范例的对应相关如下图。

好文分享:ext文件体系机制道理详解

留意到目次的data block中前两行存储的是目次自己的相对名称"."和上级目次的相对名称"..",它们现实上是目次自己的硬链接和上级目次的硬链接。硬链接的本质后头声名。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读