资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Ext2,简介,HE,系统一处二部,苗海涛,主要内容,Ext2,粗略描述,详细的布局情况,目录结构,一、,Ext2,粗略描述,1.1,简介,1.2 block group,1.3,inode,1.4,总结,1.1,简介,The Second Extended File System,(,ext2,)文件系统是,linux,系统中的标准文件系统,对于,ext2,文件系统,磁盘首先被划分为一个个,block,每个,block,大小是相同的,一般为,1kByte,或,4kByte,这些,block,被聚在一起分成几个大的,block group,每个,group,中的,block,数量是固定的,1.2 block group,每个,block group,都对应一个,group descriptor,这些,group descriptor,被聚集在一起放在磁盘分区的开头部分,这个,descriptor,当中有几个重要的,block,指针,block bitmap,、,Inode,bitmap,、,Inode,table,Block bitmap:,块位图,大小,1,个,block,每个,bit,表示一个,block,使用情况,如果该,bit,为,1,表示这个,block,中有数据,为,0,表示该,block,是空闲的,假设一个,block,大小为,4096Byte,则,bitmap,可以表示,block,的个数为,8*4096,则一个,blodk,group,大小为,8*4096*4096Byte,Inode,bitmap:,索引节点位图,大小,1,个,block,与,block bitmap,类似,每个,bit,对应一个,inode,inode,对应于文件系统上的一个文件或目录,Inode,table:,索引节点表,为,block group,中所聚集到的全部,inode,放在一起形成的,大小,n,个,block,1.3,Inode,在,ext2,文件系统中,文件由,inode,进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的,inode,是不同的,这内核负责同步,一个,inode,当中记载最关键的信息是,这个,inode,中的用户数据存在什么地方,一个,inode,通过提供一些列的,block,指针来回答这个问题,这些,block,指针指向的,block,里面就存放了文件本身的内容,1.4,总结,总结一下,一个磁盘首先被划分为多个,block.,这些,block,聚集在一起,被分成几组,也就是,block group.,每个,block group,都有一个,group descriptor.,所有这些,descriptor,被聚在一起放在磁盘分区开头部分,跟在,super block,的后面,.,从,group descriptor,我们可以通过,block,指针找到这个,block group,的,inode,table,和,block bitmap,等信息,.,从,inode,table,里面,可以看到一个个的,inode,.,从一个,inode,里面的,block,指针,就可以找到文件本身真实数据内容,二、,Ext2,详细布局,2.1 Super Block,文件系统超级块,大小,1,个,block,记录分区的整体信息,Super block,从,1024,个,Byte,开始,(root block,大小固定,1024Byte),占用有效空间是,1024Byte,实际使用,1,个,block,存储,每个组的开头都有一份,super block,的,copy,s_log_block_size,:,这个字段算出,block,大小,为,0,则,block,大小,1024,为,1,则,block,大小,2048,为,2,则,block,大小,4096,s_blocks_count,:,记录硬盘分区上的,block,总数,s_blocks_per_group,:,记录每个,group,中,block,数量,s_inodes_per_group,:,每个,group,中,inode,数量,2.2 GDT,组描述符表,大小,n,个,block,每个组都有自己的,组描述符,(32Byte),所有的组描述符组合在一起形成了,组描述符表,(GDT),一块硬盘分区上有多少,block group,或者有多少个,group descriptors?,super block,中,s_blocks_count,记录硬盘分区上的,block,总数,s_blocks_per_group,记录每个,group,中,block,数量,/*,*Structure of a blocks group descriptor,*/,struct,ext2_group_desc,_le32,bg_block_bitmap,;,/*Blocks bitmap block*/,_le32,bg_inode_bitmap,;,/*,Inodes,bitmap block*/,_le32,bg_inode_table,;,/*,Inodes,table block*/,_le16,bg_free_blocks_count,;,/*Free blocks count*/,_le16,bg_free_inodes_count,;,/*Free,inodes,count*/,_le16,bg_used_dirs_count,;,/*Directories count*/,_le16,bg_pad,;,_le32 bg_reserved,3,;,;,3.3,inode,&,inode,table,关于每个文件都有一个文件属主、文件权限、时间戳、连接计数等信息,这些保存在,inode,中,文件系统完成一个文件逻辑块到设备逻辑块的转换,这个转换信息保存在,inode,中,以上两种信息组成一个,inode,代表一个文件,为了方便管理,通常把,inode,组织成一个,inode,表,而后用,inode,在此表中的索引来代表一个,inode,,因此一个,inode,号代表一个文件,硬盘格式化后,硬盘上的数据块和索引节点数量就确定下来,是一个固定值,只要存放文件就会占用数据块和索引节点,关于索引节点中的,i_blockEXT2_N_BLOCKS,Ext2_N_BLOCKS,字段保存了文件在数据块中的具体位置,通常该值为,15,此字段,i_block0i_block11,是直接保存数据块的地址,i_block12i_block14,分别是一级 二级 三级指针,这样的索引节点指向的文件大小可以非常大,但实际上该结构中,i_size,字段限制了索引节点指向文件的大小,该字段是,32,位无符号整数,所以最大文件只能是,4G,有,inode,号,怎么读取这个,inode,中的用户数据?,先获取该,group,的,group descriptor,从该,descriptor,中找到该,group,中的,inode,table,再从,inode,table,中找到第几个,inode,获取,inode,节点信息后 就可以读取,inode,中的用户数据了,一、,Ext2,目录结构,linux,中目录也是一种文件,目录内容保存着其它文件或目录的名称和索引节点,至少一个数据块给该目录,现在我们可以读取,inode,的内容了,再往后我们将要读取文件系统上的文件和目录的内容,目录是一种特殊的文件,这个文件按照固定的格式记录了目录中有哪些文件,以及他们的名字和,inode,号数等待,struct,ext2_dir_entry_2,_le32,inode,;,_le16,rec_len,;,_u8,name_len,;,_u8,file_type,;,char,name,EXT2_NAME_LEN,;,;,Inode,为,0,代表无效目录,/,文件,rec_len,:,下一个有效目录项的地址,它是偏移量,与目录项的起始地址相加就得到下一个有效目录项的起始地址,Name:,变成数组,最大,255,符号链接的,路径名,存放在索引节点的,i_blocks,字段,该字段是由,15,个,4,字节整数,组成的数组,因此无需数据块。但是,如果路径名大于,60,个字符,就需要一个,单独的数据块,硬链接一般情况下不占用磁盘空间,(,除非目录块被用完,),也不会引起,inode,数的,变化,硬链接当做普通文件,.,Q&A,tks,
展开阅读全文