Ext2格式分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ext2格式分析
1、Ext2磁盘数据结构
任何Ext2分区中的第一个块从不受Ext2文件系统的管理,因为这一块是为分区的引导扇区所保留的。Ext2分区的其余部分被分成块组(block group),每个块组的分布图如图所示。正如你从图中所看到的,一些数据结构正好可以放在一块中,而另一些可能需要更多的块。在Ext2文件系统中的所有块组大小相同并被顺序存放,因此,内核可以从块组的整数索引很容易地得到磁盘中一个块组的位置:
由于内核尽可能地把属于同一个文件的数据块存放在同一块组中,所以块组减少了文件碎片。块组中的每个块包含下列信息之一:
1.文件系统的超级块的一个拷贝
2.一组块组描述符的拷贝
3.一个数据块位图
4.一个索引节点位图
5.一个索引节点表
6.属于文件的一大块数据,即数据块
如果一个块中不包含任何有意义的信息,就说这个块是空闲的。
从上图中可以看出,超级块与组描述符被复制到每个块组中。
其实呢,只有块组0中所包含超级块和组描述符才由内核使用,而其余的超级块和组描述符都保持不变;事实上,内核甚至不考虑它们。当e2fsck程序对Ext2文件系统的状态执行一致性检查时,就引用存放在块组0中的超级块和组描述符,然后把它们拷贝到其他所有的块组中。如果出现数据损坏,并且块组0 中的主超级块和主描述符变为无效,那么,系
统管理员就可以命令e2fsck引用存放在某个块组(除了第一个块组)中的超级块和组描述符的旧拷贝。通常情况下,这些多余的拷贝所存放的信息足以让e2fsck把Ext2分区带回到一个一致的状态。
那么有多少块组呢?这取决于分区的大小和块的大小。其主要限制在于块位图,因为块位图必须存放在一个单独的块中。块位图用来标识一个组中块的占用和空闲状况。所以,每组中至多可以有8×b个块,b是以字节为单位的块大小。例如,一个块是 1024 Byte,那么,一个块的位图就有8192个位,一个块组正好就对应8192个块(位图中的一个bit描述一个块)。
Ext2超块(super Block)
Ext2超块中包含了描叙文件系统基本尺寸和形态的信息,是用定义在include/Linux /ext2_fs.h中ext2_supe_block数据结构描述的。文件系统管理器利用它们来使用和维护文件系统。通常安装文件系统时只读取数据块组0中的超块,但是为防止文件系统被破坏,每个数据块组都包含了它的拷贝。超块中的主要信息如下:
Magic Number:文件系统安装软件用来检验是否是一个真正的EXl2文件系统超块。当前Exl2版本中为0xEF53。
Block Size:以字节记数的文件系统块大小,如1024字节。
Blocks per Group:每个组中块数目。当文件系统创建时此块大小被固定下来。
Free Blocks:文件系统中的空闲块数。
Free Inodes:文件系统中空闲Inode数。
First Inode:文件系统中第一个Inode号。EX配根文件系统中第一个Inode将是指向‘/’目录的人口。
ExT2组描述符(Group Descript)
每个数据块组都拥有一个描叙结构的组描叙符,它是定义在include/Linux/ext2一fs.h中的ext2一group—desc结构。组描叙符放置在一起形成了组描叙符表。每个数据块组在超块拷贝后包含整个组描叙符表。象超块一样,所有数据块组中的组描叙符表被复制到每个数据块组中以防文件系统崩溃。EX配文件系统仅使用第一个拷贝(在数据块组0中)。组描叙符主要包含以下信息:
Blocks Bitm印:对应此数据块组的块分配位图的块号,在块分配和回收时使用。
Inode Bitmap:对应此数据块组的Inode分配位图的块号,在Inode分配和回收时使用。
Inode Table:对应数据块组的Inode表的起始块号。每个Inode用下面的EX佗Inode 结构来表示。
Free blocks count,Free Inodes count,USed directory count
ExT2目录
在ExT2文件系统中目录是包含文件存取路径的特殊文件。目录文件是一组目录人口的链表,它们包含以下信息:
Inode:对应每个目录入口的1node,被用来索引储存在数据块组的Inode表中的Inode 数组。
name length:以字节记数的目录人口长度。
name:目录人口的名称
ExT2索引节点(hlode)
ExT2通过一个Inode结构来说明一个文件,每个Inode有唯一的编号。Inode描叙文件的物理位置以及文件的存取权限、文件修改时间及文件类型。每个数据块组的EX他Inode 被保存在Inode表中,同时还有一个位图被系统用来跟踪已分配和未分配的Inode。图2给出了EXl2 Inode的格式,ext2_in_ode定义在include/Linux/ext2_fS.h中。EXl2目录仅是一个包含指向其目录人口指针的特殊文件(也用Inode表示)。EXl2 Inode还可以描叙特殊设备文件,虽然它们不是真正的文件,但可以通过它们访问设备。所有那些位于/dev 中的设备文件可用来存取Linux设备,例如mount程序可把设备文件作为参数。
块位图、Inode位图和Inode表
每个块组都有一个块位图,用来描述本块组中数据块的使用状况。块位图的每一位(bit)表示一个数据块的使用情况,“l”表示对应的数据块已占用,“0”表示空闲。各位(bit)的顺序与块组中数据块的顺序一致。
Inode位图反映了Ino(ie表中各个表项的使用情况,其使用方法与块位图类似。一个块组中所有文件的Inode形成了Inode表。表项的序号就是lzlode号。InO(1e表在块组中要占用几个逻辑块由超级块中s_inodes_per_group给出。
2、ExT2文件系统的特点
EX配文件系统是标准的Linux文件系统,具有如下特点:
(1)物理地址使用了15个数据块指针,采用综合索引方式,最大可支持4(jB的文件;
(2)使用变长的目录项,既不浪费磁盘空间,又能支持最长达255个字符的文件名;
(3)使用位图来管理空闲数据块和索引节点,解决了采用链表来管理未分配数据块和节点带来的一系列问题;
(4)使用了块组的概念,使数据的读写更快、更有效,系统也变得安全可靠;
(5)性能高且易于扩展。
但是,EX配系统还存在一些不足,主要体现在下述几个方面:
(1)无ACL控制机制。Linux采用了UNIX的权限控制机制,将文件的用户分为3类:文件主、组用户和其他用户。而不是对任何特定的用户和用户组,让每个文件与特定的存取权限相关联。而且,权限控制强度也不如其它操作系统(如Windows NT、Novell等)强。这需要增强Linux的权限控制机制。
(2)未采用逻辑删除技术。LinuX下的文件一旦删除,文件就无法恢复,可以采用一个逻辑删除的选项允许用户在必要时恢复以前已删除的文件内容。
(3)文件无压缩机制。EX舵下的文件尚未采用压缩机制,文件全部按照原码存放,磁盘空间浪费较大。
(4)文件未加密存放。EX佗中的文件按照明文存放,一旦Exlr2分区所在的磁盘被盗,Ex配上的文件就可以完全恢复过来,这样Linux系统的安全性就要大打折扣。
(5)块片技术(block fragmentation)未实现。系统管理员对磁盘的访问通常选择较大的块,这样在大块上存放小文件就会浪费很多空间。通过在大块的不同片上存放多个小文件的方法可以节省不少的磁盘空间。