设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 重新 试卷 创业者
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

好文分享:EXT文件系统机制原理详解(11)

发布时间:2019-09-18 12:09 所属栏目:21 来源:骏马金龙
导读:之所以会这样,是因为挂载文件系统后,挂载点原来的inode记录暂时被标记为不可用,关键是没有指向该inode记录的inode指针了。在卸载文件系统后,又重新启用挂载点原来的inode记录,/目录下的mnt的inode指针又重新指

之所以会这样,是因为挂载文件系统后,挂载点原来的inode记录暂时被标记为不可用,关键是没有指向该inode记录的inode指针了。在卸载文件系统后,又重新启用挂载点原来的inode记录,"/"目录下的mnt的inode指针又重新指向该inode记录。

(3).挂载后,挂载点的元数据和data block是分别存放在不同文件系统上的。

(4).挂载点即使在挂载后,也还是属于源文件系统的文件。

7.3 多文件系统操作关联

假如下图中的圆代表一块硬盘,其中划分了3个区即3个文件系统。其中根是根文件系统,/mnt是另一个文件系统A的入口,A文件系统挂载在/mnt上,/mnt/cdrom也是一个文件系统B的入口,B文件系统挂载在/mnt/cdrom上。每个文件系统都维护了一些inode table,这里假设图中的inode table是每个文件系统所有块组中的inode table的集合表。

好文分享:ext文件系统机制原理详解

如何读取/var/log/messages呢?这是和"/"在同一个文件系统的文件读取,在前面单文件系统中已经详细说明了。

但如何读取A文件系统中的/mnt/a.log呢?首先,从根文件系统找到/mnt的inode记录,这是单文件系统内的查找;然后根据此inode记录的block指针,定位到/mnt的data block中,这些block是A文件系统的data block;然后从/mnt的data block中读取a.log记录,并根据a.log的inode指针定位到A文件系统的inode table中对应a.log的inode记录;最后从此inode记录的block指针找到a.log的data block。至此,就能读取到/mnt/a.log文件的内容。

下图能更完整的描述上述过程。

好文分享:ext文件系统机制原理详解

那么又如何读取/mnt/cdrom中的/mnt/cdrom/a.rpm呢?这里cdrom代表的文件系统B挂载点位于/mnt下,所以又多了一个步骤。先找到"/",再找到根中的mnt,进入到mnt文件系统中,找到cdrom的data block,再进入到cdrom找到a.rpm。也就是说,mnt目录文件存放位置是根,cdrom目录文件存放位置是mnt,最后a.rpm存放的位置才是cdrom。

继续完善上图。如下。

好文分享:ext文件系统机制原理详解

8.ext3文件系统的日志功能

相比ext2文件系统,ext3多了一个日志功能。

在ext2文件系统中,只有两个区:数据区和元数据区。如果正在向data block中填充数据时突然断电,那么下一次启动时就会检查文件系统中数据和状态的一致性,这段检查和修复可能会消耗大量时间,甚至检查后无法修复。之所以会这样是因为文件系统在突然断电后,它不知道上次正在存储的文件的block从哪里开始、哪里结束,所以它会扫描整个文件系统进行排除(也许是这样检查的吧)。

而在创建ext3文件系统时会划分三个区:数据区、日志区和元数据区。每次存储数据时,先在日志区中进行ext2中元数据区的活动,直到文件存储完成后标记上commit才将日志区中的数据转存到元数据区。当存储文件时突然断电,下一次检查修复文件系统时,只需要检查日志区的记录,将bmap对应的data block标记为未使用,并把inode号标记未使用,这样就不需要扫描整个文件系统而耗费大量时间。

虽说ext3相比ext2多了一个日志区转写元数据区的动作而导致ext3相比ext2性能要差一点,特别是写众多小文件时。但是由于ext3其他方面的优化使得ext3和ext2性能几乎没有差距。

9.ext4文件系统

回顾前面关于ext2和ext3文件系统的存储格式,它使用block为存储单元,每个block使用bmap中的位来标记是否空闲,尽管使用划分块组的方法优化提高了效率,但是一个块组内部仍然使用bmap来标记该块组内的block。对于一个巨大的文件,扫描整个bmap都将是一件浩大的工程。另外在inode寻址方面,ext2/3使用直接和间接的寻址方式,对于三级间接指针,可能要遍历的指针数量是非常非常巨大的。

ext4文件系统的最大特点是在ext3的基础上使用区(extent,或称为段)的概念来管理。一个extent尽可能的包含物理上连续的一堆block。inode寻址方面也一样使用区段树的方式进行了改进。

默认情况下,EXT4不再使用EXT3的block mapping分配方式 ,而改为Extent方式分配。

以下是ext4文件系统中一个文件的inode属性示例,注意最后两行的EXTENTS。

  1. Inode: 12 Type: regular Mode: 0644 Flags: 0x80000 
  2. Generation: 476513974 Version: 0x00000000:00000001 
  3. User: 0 Group: 0 Size: 11 
  4. File ACL: 0 Directory ACL: 0 
  5. Links: 1 Blockcount: 8 
  6. Fragment: Address: 0 Number: 0 Size: 0 
  7.  ctime: 0x5b628ca0:491d6224 -- Thu Aug 2 12:46:24 2018 
  8.  atime: 0x5b628ca0:491d6224 -- Thu Aug 2 12:46:24 2018 
  9.  mtime: 0x5b628ca0:491d6224 -- Thu Aug 2 12:46:24 2018 
  10. crtime: 0x5b628ca0:491d6224 -- Thu Aug 2 12:46:24 2018 
  11. Size of extra inode fields: 28 
  12. EXTENTS: 
  13. (0):33409 

(1). 关于EXT4的结构特征

EXT4在总体结构上与EXT3相似,大的分配方向都是基于相同大小的块组,每个块组内分配固定数量的inode、可能的superblock(或备份)及GDT。

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读