您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > ext2文件系统简介
Ext2简介HE系统一处二部苗海涛主要内容•Ext2粗略描述•详细的布局情况•目录结构一、Ext2粗略描述•1.1简介•1.2blockgroup•1.3inode•1.4总结1.1简介•TheSecondExtendedFileSystem(ext2)文件系统是linux系统中的标准文件系统•对于ext2文件系统,磁盘首先被划分为一个个block,每个block大小是相同的,一般为1kByte或4kByte,这些block被聚在一起分成几个大的blockgroup,每个group中的block数量是固定的1.2blockgroup•每个blockgroup都对应一个groupdescriptor,这些groupdescriptor被聚集在一起放在磁盘分区的开头部分,这个descriptor当中有几个重要的block指针blockbitmap、Inodebitmap、Inodetable•Blockbitmap:块位图,大小1个block,每个bit表示一个block使用情况,如果该bit为1表示这个block中有数据,为0表示该block是空闲的假设一个block大小为4096Byte,则bitmap可以表示block的个数为8*4096,则一个blodkgroup大小为8*4096*4096Byte•Inodebitmap:索引节点位图,大小1个block,与blockbitmap类似,每个bit对应一个inode,inode对应于文件系统上的一个文件或目录•Inodetable:索引节点表,为blockgroup中所聚集到的全部inode放在一起形成的,大小n个block1.3Inode•在ext2文件系统中,文件由inode进行唯一标识。一个文件可能对应多个文件名,只有在所有文件名都被删除后,该文件才会被删除。此外,同一文件在磁盘中存放和被打开时所对应的inode是不同的,这内核负责同步•一个inode当中记载最关键的信息是这个inode中的用户数据存在什么地方,一个inode通过提供一些列的block指针来回答这个问题,这些block指针指向的block里面就存放了文件本身的内容1.4总结•总结一下,一个磁盘首先被划分为多个block.这些block聚集在一起,被分成几组,也就是blockgroup.每个blockgroup都有一个groupdescriptor.所有这些descriptor被聚在一起放在磁盘分区开头部分,跟在superblock的后面.从groupdescriptor我们可以通过block指针找到这个blockgroup的inodetable和blockbitmap等信息.从inodetable里面,可以看到一个个的inode.从一个inode里面的block指针,就可以找到文件本身真实数据内容二、Ext2详细布局2.1SuperBlock•文件系统超级块,大小1个block,记录分区的整体信息•Superblock从1024个Byte开始(rootblock大小固定1024Byte),占用有效空间是1024Byte,实际使用1个block存储,每个组的开头都有一份superblock的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.2GDT•组描述符表,大小n个block•每个组都有自己的组描述符(32Byte),所有的组描述符组合在一起形成了组描述符表(GDT)•一块硬盘分区上有多少blockgroup或者有多少个groupdescriptors?superblock中s_blocks_count记录硬盘分区上的block总数,s_blocks_per_group记录每个group中block数量/**Structureofablocksgroupdescriptor*/structext2_group_desc{__le32bg_block_bitmap;/*Blocksbitmapblock*/__le32bg_inode_bitmap;/*Inodesbitmapblock*/__le32bg_inode_table;/*Inodestableblock*/__le16bg_free_blocks_count;/*Freeblockscount*/__le16bg_free_inodes_count;/*Freeinodescount*/__le16bg_used_dirs_count;/*Directoriescount*/__le16bg_pad;__le32bg_reserved[3];};3.3inode&inodetable•关于每个文件都有一个文件属主、文件权限、时间戳、连接计数等信息,这些保存在inode中•文件系统完成一个文件逻辑块到设备逻辑块的转换,这个转换信息保存在inode中•以上两种信息组成一个inode代表一个文件•为了方便管理,通常把inode组织成一个inode表,而后用inode在此表中的索引来代表一个inode,因此一个inode号代表一个文件•硬盘格式化后,硬盘上的数据块和索引节点数量就确定下来,是一个固定值,只要存放文件就会占用数据块和索引节点•关于索引节点中的i_block[EXT2_N_BLOCKS]Ext2_N_BLOCKS字段保存了文件在数据块中的具体位置,通常该值为15,此字段i_block[0]~i_block[11]是直接保存数据块的地址,i_block[12]~i_block[14]分别是一级二级三级指针,这样的索引节点指向的文件大小可以非常大但实际上该结构中i_size字段限制了索引节点指向文件的大小,该字段是32位无符号整数,所以最大文件只能是4G•有inode号,怎么读取这个inode中的用户数据?先获取该group的groupdescriptor,从该descriptor中找到该group中的inodetable,再从inodetable中找到第几个inode,获取inode节点信息后就可以读取inode中的用户数据了一、Ext2目录结构•linux中目录也是一种文件,目录内容保存着其它文件或目录的名称和索引节点,至少一个数据块给该目录•现在我们可以读取inode的内容了,再往后我们将要读取文件系统上的文件和目录的内容,目录是一种特殊的文件,这个文件按照固定的格式记录了目录中有哪些文件,以及他们的名字和inode号数等待structext2_dir_entry_2{__le32inode;__le16rec_len;__u8name_len;__u8file_type;charname[EXT2_NAME_LEN];};Inode为0代表无效目录/文件rec_len:下一个有效目录项的地址它是偏移量,与目录项的起始地址相加就得到下一个有效目录项的起始地址Name:变成数组,最大255符号链接的路径名存放在索引节点的i_blocks字段,该字段是由15个4字节整数组成的数组,因此无需数据块。但是,如果路径名大于60个字符,就需要一个单独的数据块硬链接一般情况下不占用磁盘空间(除非目录块被用完),也不会引起inode数的变化,硬链接当做普通文件•...Q&Atks
本文标题:ext2文件系统简介
链接地址:https://www.777doc.com/doc-3265216 .html