您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > Linux的EXT2文件系统与类EXT2的设计
2013.4Linux的EXT2文件系统类EXT2文件系统的设计2020/2/24西安交通大学计算机系2Ext文件系统minix文件系统结构文件名14个字符块设备最大容量64M(=8*(8*1024)*1024/(1024*1024))EXT2文件系统_minix文件系统引导块超级块inode位图逻辑块位图i节点数据区一个盘块minix文件系统360kB软盘文件系统结构示意图2020/2/24西安交通大学计算机系3EXT2文件系统_磁盘布局Ext文件系统Minix的第一次扩展文件名最大长度255个字符磁盘分区大小可达2GBExt2文件系统——第二代扩展文件系统磁盘分区大小可达4TB磁盘布局采用了组块2020/2/24西安交通大学计算机系4EXT2文件系统_引导块和超级块引导块BootBlock每个硬盘分区的开头1024字节,即0byte至1023byte是分区的启动扇区。存放由ROMBIOS自动读入的引导程序和数据,但这只对引导设备有效,而对于非引导设备,该引导块不含代码。这个块与ext2没有任何关系。超级块SuperBlock分区剩余的部分被分为若干个组。每个组里均由一个superblock块和一个GroupDescriptors(组描述符)块组成。Group0中的superblock被内核所用。定义了诸如文件系统的静态结构,包括块的大小,总块数,每组内inode数,空闲块,索引结点数等全局信息。其他Group中的SuperBlock则仅是Group0中的SuperBlock的一个拷贝。超级块的数据结构在ext2_fs.h定义为structext2_super_blockLinux启动时superblock0的内容读入内存,某个组损坏可用来恢复2020/2/24西安交通大学计算机系5EXT2文件系统_超级块structext2_super_blockTypeField释意__u32s_inodes_count;索引结点的总数__u32s_blocks_count;文件系统块的总数__u32s_r_blocks_count;为超级用户保留的块数__u32s_free_blocks_count;空闲块总数__u32s_free_inodes_count;空闲索引节点总数__u32s_first_data_block;文件系统中第一个数据块__u32s_log_block_size;用于计算逻辑块的大小__s32s_log_frag_size;用于计算片的大小__u32s_blocks_per_group;每个组的块个数__u32s_frags_per_group;每个组的片个数__u32s_inodes_per_group;每个组的索引节点数__u32s_mtime;文件系统的安装时间__u32s_wtime;最后一次对超级块进行写的时间__u16s_mnt_count;安装计数__s16s_max_mnt_count;最大可安装计数2020/2/24西安交通大学计算机系6EXT2文件系统_超级块__u16s_magic;用于确定文件系统版本的标志(ext2——0xEF53)__u16s_state;文件系统状态__u16s_errors;当检测到错误时如何处理__u16s_minor_rev_level;次版本号__u32s_lastcheck;最后一次检测文件系统状态的时间__u32s_checkinterval;两次对文件系统状态进行检测的最大可能时间间隔__u32s_rev_level;版本号,以此识别是否支持某些功能__u16s_def_fesuid;保留块的默认用户标识UID__u16s_def_fesgid;保留块的默认用户组标识GID__u32s_first_ino;第一个非保留的索引节点号__u16s_inode_size;索引结点结构的大小__u16s_block_group_nr;本Superblock所在的块组号__u32s_reserved[230];保留/*Paddingtotheendoftheblock*/注意文件系统的状态:没错:#defineEXT2_valid_fs0x0001有错:#defineEXT2_ERROR_fs0x00022020/2/24西安交通大学计算机系7EXT2文件系统_组描述符组描述符GroupDescriptors定义了块位图的块号,索引结点位图的块号、索引结点表的起始块号,本组空闲块的个数等组内信息。文件系统根据这些信息来查找数据块位图,索引结点位图,索引结点表的位置。数据结构在ext2_fs.h中定义:structext2_group_desc{TypeField释意__u32bg_block_bitmap;指向该组中块位图所在块的指针__u32bg_inode_bitmap;指向该组中块节点位图所在块的指针__u32bg_inode_table;指向该组中节点的首块的指针__u16bg_free_blocks_count;本组空闲块的个数__u16bg_free_inodes_count;本组空闲索引节点的个数__u16bg_used_dirs_count;本组分配给目录的节点数__u16bg_pad;填充__u32bg_reserved;保留};2020/2/24西安交通大学计算机系8EXT2文件系统_数据块及数据块位图数据块位图DataBlockBitmap这是ext2管理存储空间的方法。即位图法。每个位对应一个数据块,位值为0表示空闲,1表示已经分配。数据块位图定义为一个块大小。于是,一个组中的数据块个数就决定了。假设块大小为b字节。可以区别的块数为b*8个数据块DataBlocks每个组的数据最大个数是在块大小定义后就确定了的。所以组容量也就确定了。假设块大小为b字节。那么组容量就确定为(b*8)*b字节若1块=4K,则组块大小=4K*8*4K=128M2020/2/24西安交通大学计算机系9EXT2文件系统_索引节点位图及索引节点索引结点位图InodeBitmap与数据块位图相似,用来表示索引结点是否已经被使用。假设块大小为b字节,每个索引结点数据结构大小为128字节。最多可以有b*8个索引结点,索引结点表需要占用的存储空间大小为(b*8)*128字节。即(b*8)*128/b=8*128个块索引结点Inode索引结点表由若干个索引结点数据结构组成,需要占用若干个块。Ext2中的每个索引结点数据结构大小为128字节。每个索引结点即对应一个文件或是目录。是对其除文件名(目录名)以外的所有属性的描述。例如:文件类型,文件创建时间,访问时间,修改时间,文件所占数据块的个数,指向数据块的指针。其中,数据块指针是由15个元组的数据组成2020/2/24西安交通大学计算机系10EXT2文件系统_索引节点位图及索引节点前12个元组,(0至11)直接指向数据块。第12号元组(12)是一个1级子索引。指向的不是数据块,而是存放数据块指针的块。类似的,第13号元组(13)是一个2级子索引。第14号元组(14)是一个3级子索引。这种结构可以适应大文件的存储。假设文件块大小为b。则当文件长度小于b*12时,只要用前12个元组来指向其数据块。当文件长度大于b*12时,则用多级索引机制来指向其数据块。这体现了Ext2的文件的物理结构,即索引文件。使用索引结点来指向文件的数据块,并且索引结点本身是聚集在一起的。2020/2/24西安交通大学计算机系112020/2/24西安交通大学计算机系12EXT2文件系统_索引节点定义索引节点定义ext2_fs.h中的structext2_inodestructext2_inode{TypeField释意__u16i_mode;文件类型及访问权限__u16i_uid;文件拥有者的标识号UID__u32i_size;文件大小大小(字节)__u32i_atime;最后一次访问时间__u32i_ctime;创建时间__u32i_mtime;该文件内容最后修改时间__u32i_dtime;文件删除时间__u16i_gid;文件的用户组的组号__u16i_links_count;文件的链接计数__u32i_blocks;文件的数据块个数(以512字节计)__u32i_flags;打开文件的方式__u32[]i_block[EXT2_N_BLOCKS];指向数据块的指针数组__u32i_generation;文件的版本号(用于NFS)__u32i_file_acl;文件访问控制表(ACL已不再使用)__u32i_dir_acl;目录访问控制表(ACL已不再使用)__u8l_i_frag;每块中的片数__u8l_i_fsize;片的大小__u32l_i_reserved;保留};2020/2/24西安交通大学计算机系13EXT2文件系统_目录与文件目录与文件不是所有的文件都需要数据块,有些文件只需要索引结点即可。Ext2中,目录是一种特殊的文件。其数据块中的内容即目录表:所包含的文件(当然也包括子目录)的文件名,指向文件的索引节点号,文件类型。ext2_fs.h中数据结构的定义:structext2_dir_entry_2{__u32inode;索引节点号__u16rec_len;目录项长度__u8name_len;文件名长度__u8file_type;文件类型(1:普通文件,2:目录……)char[]name[EXT2_NAME_LEN];文件名};其中MAX_NAME_LEN定义为255。即文件名最大长度为255个字符(字节)。同时,目录项取为4的整数。故,目录项的长度范围是12至264字节。2020/2/24西安交通大学计算机系14EXT2文件系统_目录与文件目录文件的数据块实例其中,inode指向0的那一行,表示此文件已经被删除。同时,上一行的目录项长度扩展为两者之和(12+16)。2020/2/24西安交通大学计算机系15EXT2文件系统_文件的类型文件类型Ext2中文件类型有以下几种:文件类型号描述0未知1普通文件2目录3字符设备4块设备5管道(Pipe)6套接字7符号指针2020/2/24西安交通大学计算机系16EXT2文件系统的操作两个概念文件系统的设计目标在于:一方面,从用户的角度看,实现“按名取存”,文件系统的用户只要知道所需文件的文件名,就可存取文件中的信息,而无需知道这些文件究竟存放在什么地方。另一方面,从系统角度看,文件系统对文件存储器的存储空间进行组织、分配和回收,负责文件的存储、检索、共享和保护。用户角度的文件系统被称为VFS,虚拟文件系统。定义在这个层次上的操作,对于用户来说是文件系统所呈现所有属性。比如,列目录,建立目录,建立文件,打开文件,读写文件,重命名文件等。与每个操作相对应的是实际文件系统中的一系列底层操作。2020/2/24西安交通大学计算机系17EXT2文件系统的操作索引结点操作2020/2/24西安交通大学计算机系18EXT2文件系统的操作文件操作2020/2/24西安交通大学计算机系19EXT2硬盘空间管理存储空间的分配回收需要考虑两个因素避免文件碎片时效Ext2中新建立的文件并不是马上就分配数据块,而是分配索引结点。当有数据存入时,再分配数据块。故存储空间的分配与回收也分成两个部分索引结点的创建与删除数据块的分配与回收2020/2/24西安交通大学计算机系20EXT2硬盘空间管理_创建索引结点创建索引结点Ext2使用ext2_new_inode()来创建一个新的索引结点。创建成功则返回索引结点号,否则返回NULL。这个函数包括了以下几个步骤:⑴get_empty_inode()返回一个空结点⑵lock_super()互斥操作。即对superblock的P()操作⑶如果索引结点是目录,则将其分配到空闲块最多的组中。⑷如果索引结点不是目录,则从头开始“顺序查找”一个空结点分配给该文件。“顺序查找”的算法是:2020/2/24西安交通大学计算机系21EXT2硬盘空间管理_创建索引结点⑸load_
本文标题:Linux的EXT2文件系统与类EXT2的设计
链接地址:https://www.777doc.com/doc-3975708 .html