您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > linux代码导读-ext2文件系统
Linux内核源代码导读中国科学技术大学计算机系陈香兰(0551-3606864)xlanchen@ustc.edu.cnSpring2009Ext2文件系统简介3EXT2文件系统是EXT文件系统的升级,在Linux中得到了广泛的使用。介绍EXT2文件系统的磁盘组织目录项和支持的文件类型4(一)EXT2文件系统的磁盘组织除了引导扇区之外,EXT2磁盘分区被顺序划分为若干个磁盘块组(BlockGroup)。每个块组由若干个磁盘块,按照相同的方式组织,具有相同的大小。EXT2磁盘块组中的磁盘块按顺序被组织成:一个用作超级块的磁盘块。在这个磁盘块里,存放了文件系统超级块的一个拷贝;N个记录组描述符的磁盘块;1个记录数据块位图的磁盘块;1个记录索引结点位图的磁盘块;N个用作索引结点表的磁盘块;N个用作数据块的磁盘块。冗余,使用块组0e2fsck更新或恢复块组大小主要受限于块位图5EXT2的超级块每个块组的第一个磁盘块用来保存所在EXT2fs的超级块多个块组中的超级块形成冗余在某个或少数几个超级块被破坏时,可用于恢复被破坏的超级块信息。(e2fsck)注意:大多数数据结构存在两个版本磁盘存储版本,例如ext2_super_block(阅读)内存版本,例如ext2_sb_info(阅读)6组描述符组描述符用来描述一个磁盘块组的相关信息数据结构为ext2_group_desc(阅读)7索引结点EXT2中所有的索引结点大小相同,都是128个字节。数据结构磁盘存储数据结构ext2_inode(阅读)内存中结构ext2_inode_info(阅读)理论基础:文件数据块的组织方式链式(显式vs隐式)索引方式(直接索引,一级索引,二级索引,等等;组合索引)8关于索引节点中的i_block[]ext2的索引结点中使用了组合索引方式。前12项用作直接索引第13项用作间接索引第14项用作二次间接索引第15项用作三次间接索引9索引节点表EXT2的一个磁盘块组中的索引结点存储在一组连续的磁盘块中,形成一个索引结点表。这组磁盘块中的第一个磁盘块的块号存储在超级块的bg_inode_table数据项中。根据磁盘块的大小,可以计算出每个磁盘块能容纳多少个索引结点根据索引结点的总个数,可以计算出索引结点表所需要占用的磁盘块的个数。10数据块位图和索引结点块位图EXT2的空闲盘块分配算法采用了位图法位图:便于查找数据块或索引结点的分配信息每个位(bit)都对应了一个磁盘块:0,表示对应的磁盘块(或索引结点)空闲1,表示占用。2个位图分别占用一个专门的磁盘块。根据磁盘块的大小,可以计算出每个块组中最多能容纳的数据块个数和索引节点块个数。11(二)EXT2中的目录项和文件类型在EXT2中,目录是一种特殊的文件,这种文件的数据块中存放了该目录下的所有目录项12新版的目录项结构13EXT2支持的文件类型EXT2在目录项中存放了文件的类型信息。文件类型可以是0~7中的任意一个整数。它们分别代表如下含义:0:文件类型未知;1:普通文件类型;2:目录;3:字符设备;4:块设备;5:有名管道FIFO;6:套接字;7:符号链接。14注意:15(三)创建一个ext2文件系统在磁盘上创建文件系统通常有两个步骤:格式化磁盘Linux中:superformat或者fdformat创建文件系统Ext2:mke2fsmke2fs的缺省参数磁盘块大小:1024字节分片:目前不支持,因此与磁盘块一样分配inode的个数:1/8192B永久保留的块的个数:5%16创建流程1.初始化超级块和组描述符2.Optionally,检查是否有坏块,若有创建坏块列表3.对每个块组,保留所有用来存放超级块、组描述符、inode表、2个位图的磁盘块4.初始化每个块组中的位图5.初始化每个块组中的inode表6.创建/root目录7.创建lost+found目录(供e2fsck使用,与坏块相关)8.为上述两个目录而更新位图信息9.若有坏块,则将其在lost+found目录中组织起来17以1.44MB的软盘为例,创建ext2文件系统后18(四)Ext2提供的各种对象方法超级块对象方法19索引节点对象方法20文件对象方法21(五)管理ext2的磁盘空间存储在磁盘上的文件与用户所“看到”的文件有所不同:用户感觉,文件在逻辑上是连续的而在磁盘上,存储文件数据的磁盘块可能分散在磁盘各处用户感觉,文件可能比较大而在磁盘上,由于文件空洞的存在,分配给文件的磁盘空间可能小于用户感觉到的文件大小。22涉及到如下操作:创建/删除一个索引节点数据块的寻址文件空洞分配/释放一个数据块23创建/删除一个索引节点创建一个磁盘索引节点删除一个索引节点24关于数据块的寻址任何一个常规文件都会包含一系列数据块文件内块号vs.逻辑块号根据数据在文件中的偏移可以计算逻辑块号:首先计算出文件内块号=(偏移f-1)/块大小的商+1根据索引信息,查询到逻辑块号25混合索引示意图26文件大小限制27关于文件空洞Afileholeisaportionofaregularfilethatcontainsnullcharactersandisnotstoredinanydatablockondisk.这是UNIX文件一直以来都有的一个特性例如命令:创建一个大小为1024×6+1字节的文件,这个文件有一个1024×6=6144个字节大小的空洞。只有最后一个字节存放了字母“X”文件空洞可以节省磁盘空间Ext2通过数据块的动态分配来实现这一点:当且仅当一个进程要写数据到文件中的时候才真正分配磁盘块28分配/释放一个数据块当一个文件需要新的数据块来存放数据时当一个文件被删除或者被截断时Thanks!Theend.
本文标题:linux代码导读-ext2文件系统
链接地址:https://www.777doc.com/doc-3786790 .html