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

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

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

第14个指针i_block[13]是二级间接寻址指针,它指向一个如故存储了指针的block,可是这个block中的指针还继承指向其他存储指针的block,即i_block[13] --> Pointerblock1 --> PointerBlock2 --> datablock。

第15个指针i_block[14]是三级间接寻址指针,它指向一个任然存储了指针的block,这个指针block下尚有两次指针指向。即i_block[13] --> Pointerblock1 --> PointerBlock2 --> PointerBlock3 --> datablock。

个中因为每个指针巨细为4字节,以是每个指针block能存放的指针数目为BlockSize/4byte。譬喻blocksize为4KB,那么一个Block可以存放4096/4=1024个指针。

如下图。

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

为什么要分间接和直接指针呢?假如一个inode中15个指针满是直接指针,若是每个block的巨细为1KB,那么15个指针只能指向15个block即15KB的巨细,因为每个文件对应一个inode号,以是就限定了每个文件最大为15*1=15KB,这显然是不公道的。

假如存储大于15KB的文件而又不太大的时辰,就占用一级间接指针i_block[12],这时可以存放指针数目为1024/4+12=268,以是能存放268KB的文件。

假如存储大于268K 的文件而又不太大的时辰,就继承占用二级指针i_block[13],这时可以存放指针数目为[1024/4]^2+1024/4+12=65804,以是能存放65804KB=64M阁下的文件。

假如存放的文件大于64M,那么就继承行使三级间接指针i_block[14],存放的指针数目为[1024/4]^3+[1024/4]^2+[1024/4]+12=16843020个指针,以是能存放16843020KB=16GB阁下的文件。

假如blocksize=4KB呢?那么最大能存放的文件巨细为([4096/4]^3+[4096/4]^2+[4096/4]+12)*4/1024/1024/1024=4T阁下。

虽然这样计较出来的不必然就是最大能存放的文件巨细,它还受到另一个前提的限定。这里的计较只是表白一个大文件是怎样寻址和分派的。

着实看到这里的计较数值,就知道ext2和ext3对超大文件的存取服从是低下的,它要查对太多的指针,出格是4KB巨细的blocksize时。而ext4针对这一点就举办了优化,ext4行使extent的打点方法代替ext2和ext3的块映射,大大进步了服从也低落了碎片。

6 单文件体系中文件操纵的道理

在Linux上执行删除、复制、重定名、移动等操纵时,它们是怎么举办的呢?尚有会见文件时是怎样找到它的呢?着实只要领略了前文中先容的几个术语以及它们的浸染就很轻易知道文件操纵的道理了。

注:在这一末节所表明的都是在单个文件体系下的举动,在多个文件体系中怎样请看下一个末节:多文件体系关联。

6.1 读取文件

当执行"cat /var/log/messages"呼吁在体系内部举办了什么样的步调呢?该呼吁能被乐成执行涉及了cat呼吁的探求、权限判定以及messages文件的探求和权限判定等等伟大的进程。这里只表明和本节内容相干的怎样探求到被cat的/var/log/messages文件。

  • 找到根文件体系的块组描写符表地址的blocks,读取GDT(已在内存中)找到inode table的block号。

由于GDT老是和superblock在统一个块组,而superblock老是在分区的第1024-2047个字节,以是很轻易就知道第一个GDT地址的块组以及GDT在这个块组中占用了哪些block。

着实GDT早已经在内存中了,在体系开机的时辰会挂载根文件体系,挂载的时辰就已经将全部的GDT放进内存中。

  • 在inode table的block中定位到根"/"的inode,找出"/"指向的data block。

前文说过,ext文件体系预留了一些inode号,个中"/"的inode号为2,以是可以按照inode号直接定位根目次文件的data block。

  • 在"/"的datablock中记录了var目次名和指向var目次文件inode的指针,并找到该inode记录,inode记录中存储了指向var的block指针,以是也就找到了var目次文件的data block。

通过var目次的inode指针,可以探求到var目次的inode记录,可是指针定位的进程中,还必要知道该inode记录地址的块组以及地址的inode table,以是必要读取GDT,同样,GDT已经缓存到了内存中。

  • 在var的data block中记录了log目次名和其inode指针,通过该指针定位到该inode地址的块组及地址的inode table,并按照该inode记录找到log的data block。
  • 在log目次文件的data block中记录了messages文件名和对应的inode指针,通过该指针定位到该inode地址的块组及地址的inode table,并按照该inode记录找到messages的data block。
  • 最后读取messages对应的datablock。

将上述步调中GDT部门的步调简化后较量轻易领略。如下:找到GDT-->找到"/"的inode-->找到/的数据块读取var的inode-->找到var的数据块读取log的inode-->找到log的数据块读取messages的inode-->找到messages的数据块并读取它们。

6.2 删除、重定名和移动文件

留意这里是不超过文件体系的操纵举动。

  • 删除文件分为平凡文件和目次文件,知道了这两种范例的文件的删除道理,就知道了其他范例非凡文件的删除要领。

对付删除平凡文件:

(1)找到文件的inode和data block(按照前一个末节中的要领探求);

(2)将inode table中该inode记录中的data block指针删除;

(3)在imap中将该文件的inode号标志为未行使;

(4)在其地址目次的data block中将该文件名地址的记录行删除,删除了记录就丢失了指向inode的指针;

(5)将bmap中data block对应的block号标志为未行使。

(编辑:湖南网)

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

热点阅读