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

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

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

留意,在第(5)步之前,因为data block还未被标志为未行使,在superblock中如故以为这些data block是正在行使中的。这暗示尽量文件已经被删除了,但空间却还没有开释,df也会将其统计到已用空间中(df是读取superblock中的数据块数目,并计较转换为空间巨细)。

什么时辰会产生这种环境呢?当一个历程正在引用文件时将该文件删除,就会呈现文件已删除但空间未开释的环境。这时步调已经举办到(4),外界无法再找到该文件,但因为历程在加载该文件时已经获取到了该文件全部的data block指针,该历程可以获取到该文件的全部数据,但却暂且不会开释该文件空间。直到该历程竣事,文件体系才将未执行的步调(5)继承完成。这也是为什么偶然辰du的统计功效比df小的缘故起因,关于du和df统计功效的不同,具体内容见:具体说明du和df的统计功效为什么纷歧样。

  • 重定名文件分为同目次内重定名和非同目次内重定名。非同目次内重定名现实上是移动文件的进程,见下文。

同目次内重定名文件的举措仅仅只是修改地址目次data block中该文件记录的文件名部门,不是删除再重建的进程。

假如重定名时有文件名斗嘴(该目次内已经存在该文件名),则提醒是否包围。包围的进程是包围目次data block中斗嘴文件的记录。譬喻/tmp/下有a.txt和a.log,若将a.txt重定名为a.log,则提醒包围,若选择包围,则/tmp的data block中关于a.log的记录被包围,此时它的指针是指向a.txt的inode。

  • 移动文件

同文件体系下移动文件现实上是修改方针文件地址目次的data block,向个中添加一行指向inode table中待移动文件的inode指针,假如方针路径下有同名文件,则会提醒是否包围,现实上是包围目次data block中斗嘴文件的记录,因为同名文件的inode记录指针被包围,以是无法再找到该文件的data block,也就是说该文件被标志为删除(假如多个硬链接数,则另当别论)。

以是在同文件体系内移动文件相等快,仅仅在地址目次data block中添加或包围了一笔记录罢了。也因此,移动文件时,文件的inode号是不会改变的。

对付差异文件体系内的移动,相等于先复制再删除的举措。见后文。

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

关于文件移动,在Linux情形下有一个很是经典网上却又没任何表明的题目:/tmp/a/a能包围为/tmp/a吗?谜底是不能,但windows能。为什么不能?见mv的一个经典题目(mv的本质)。

6.3 存储和复制文件

  • 对付文件存储
  • (1).读取GDT,找到各个(或部门)块组imap中未行使的inode号,并为待存储文件分派inode号;
  • (2).在inode table中完美该inode号地址行的记录;
  • (3).在目次的data block中添加一条该文件的相干记录;
  • (4).将数据添补到data block中。
  • 留意,添补到data block中的时辰会挪用block分派器:一次分派4KB巨细的block数目,当添补完4KB的data block后会继承挪用block分派器分派4KB的block,然后轮回直到添补完全部数据。也就是说,假如存储一个100M的文件必要挪用block分派器100*1024/4=25600次。
  • 另一方面,在block分派器分派block时,block分派器并不知道真正有几多block要分派,只是每次必要分派时就分派,在每存储一个data block前,就去bmap中标志一次该block已行使,它无法实现一次标志多个bmap位。这一点在ext4中举办了优化。
  • (5)添补完之后,去inode table中更新该文件inode记录中指向data block的寻址指针。
  • 对付复制,完全就是另一种方法的存储文件。步协调存储文件的步调一样。

7 多文件体系关联

在单个文件体系中的文件操纵和多文件体系中的操纵有所差异。本文将对此做出很是具体的声名。

7.1 根文件体系的非凡性

这里要明晰的是,任何一个文件体系要在Linux上能正常行使,必需挂载在某个已经挂载好的文件体系中的某个目次下,譬喻/dev/cdrom挂载在/mnt上,/mnt目次自己是在"/"文件体系下的。并且恣意文件体系的一级挂载点必需是在根文件体系的某个目次下,由于只有"/"是自引用的。这里要声名挂载点的级别和自引用的观念。

若是/dev/sdb1挂载在/mydata上,/dev/cdrom挂载在/mydata/cdrom上,那么/mydata就是一级挂载点,此时/mydata已经是文件体系/dev/sdb1的进口了,而/dev/cdrom所挂载的目次/mydata/cdrom是文件体系/dev/sdb1中的某个目次,那么/mydata/cdrom就是二级挂载点。一级挂载点必需在根文件体系下,以是可简述为:文件体系2挂载在文件体系1中的某个目次下,而文件体系1又挂载在根文件体系中的某个目次下。

再表明自引用。起主要说的是,自引用的只能是文件体系,而文件体系示意情势是一个目次,以是自引用是指该目次的data block中,"."和".."的记录中的inode指针都指向inode table中统一个inode记录,以是它们inode号是沟通的,即互为硬链接。而根文件体系是独一可以自引用的文件体系。

  1. [root@xuexi /]# ll -ai / 
  2. total 102 
  3.  2 dr-xr-xr-x. 22 root root 4096 Jun 6 18:13 . 
  4.  2 dr-xr-xr-x. 22 root root 4096 Jun 6 18:13 ..  

(编辑:湖南网)

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

热点阅读