摘自:http://oss.org.cn/kernel-book/ch09/9.2.3.htm
Ext2的索引节点
Ext2和Unix类的文件系统一样,使用索引节点来记录文件信息。每一个普通文件和目录都有唯一的索引节点与之对应,索引节点中含有文件或目录的重要信息。当你要访问一个文件或目录时,通过文件或目录名首先找到与之对应的索引节点,然后通过索引节点得到文件或目录的信息及磁盘上的具体的存储位置。Ext2的索引节点的数据结构叫ext2_inode,在include/Linux/ext2_fs.h中定义,下面是其结构及各个域的含义。(不同版本,该结构略有不同)。
struct ext2_inode {
__u16i_mode;/* 文件类型和访问权限 */
__u16i_uid;/* 文件拥有者标识号*/
__u32i_size;/* 以字节计的文件大小 */
__u32i_atime;/* 文件的最后一次访问时间 */
__u32i_ctime;/* 该节点最后被修改时间 */
__u32i_mtime;/* 文件内容的最后修改时间 */
__u32i_dtime;/* 文件删除时间 */
__u16i_gid;/* 文件的用户组标志符 */
__u16i_links_count;/* 文件的硬链接计数 */
__u32i_blocks;/* 文件所占块数(每块以512字节计)*/
__u32i_flags;/* 打开文件的方式 */
union/*特定操作系统的信息*/
__u32i_block[Ext2_N_BLOCKS];/* 指向数据块的指针数组 */
__u32i_version;/* 文件的版本号(用于 NFS) */
__u32i_file_acl;/*文件访问控制表(已不再使用) */
__u32i_dir_acl;/*目录 访问控制表(已不再使用)*/
__u8l_i_frag;/* 每块中的片数 */
__u32 i_faddr;/* 片的地址 */
union/*特定操作系统信息*/
}
从中可以看出,索引节点是用来描述文件或目录信息的。
以下,对其中一些域作一定解释。
(1)前面说过,Ext2通过索引节点中的数据块指针数组进行逻辑块到物理块的映射。在Ext2索引节点中,数据块指针数组共有15项,前12个为直接块指针,后三个分别为“一次间接块指针”、“二次间接块指针”、“三次间接块指针”,如图9.4所示。
图9.4索引节点的数据块指针数组示意图
所谓“直接块”,是指该块直接用来存储文件的数据,而“一次间接块”是指该块不存储数据,而是存储直接块的地址,同样,“二次间接块”存储的是“一次间接块”的地址。这里的所说的块,指的都是物理块。Ext2默认的物理块大小为1K,块地址占4个字节(32位),所以每个物理块可以存储256个地址。这样,文件大小最大可达12K+256K+64M+16G。但实际上,Linux是32位的操作系统,故文件大小最大只能为4G。
系统是以逻辑块号为索引查找物理块的。例如,要找到第100个逻辑块对应的物理块,因为256+12>100>12,所以要用到一次间接块,在一次间接块中查找第88项,此项内容就是对应的物理块的地址。而如果要找第1000个逻辑块对应的物理块,由于1000>256+12,所以要用到二次间接块了。
(2)索引节点的标志(flags)取下列几个值的可能组合。
EXT2_SECRM_FL0x00000001
完全删除标志。设置这个标志后,删除文件时,随机数据会填充原来的数据块。
EXT2_UNRM_FL0x00000002
可恢复标志。设置这个标志后,删除文件时,文件系统会保留足够信息,以确保文件仍能恢复(仅在一段时间内)
EXT2_COMR_FL0x00000004
压缩标志。设置这个标志后,表明该文件被压缩过。当访问该文件时,文件系统必须采用解压缩算法进行解压。
EXT2_SYNC_FL0x00000008
同步更新标志。设置该标志后,则该文件必须和内存中的内容保持一致,对这种文件进行异步输入、输出操作是不允许的。这个标志仅用于节点本身和间接块。数据块总是异步写入磁盘的。
除了这几个常用标志外,还有12个标志就不一一介绍了。
(3)索引节点在磁盘上是经过编号的。其中,有一些节点有特殊用途,用户不能使用。这些特殊节点也在include/Linux/ext2_fs.h中定义。
#define EXT2_BAD_INO1
该节点所对应的文件中包含着该文件系统中坏块的链接表
#define EXT2_ROOT_INO2
该文件系统的根目录所对应的节点
#define EXT2_IDX_INO3
ACL(访问控制链表)节点
#define EXT2_DATA_INO4
ACL节点
#define EXT2_BOOT_LOADER_INO5
用于引导系统的文件所对应的节点
#define EXT2_UNDEL_DIR_INO6
文件系统中可恢复的目录对应的节点
没有特殊用途的第一个节点号为11
#defineEXT2_FIRST_INO11
(4)文件的类型、访问权限、用户标识号、用户组标识号等将在后面介绍。
与Ext2超级块类似,当磁盘上的索引节点调入内存后,除了要填写VFS的索引节点外,系统还要根据它填写另一个数据结构,该结构叫ext2_inode_info,其作用也是为了存储特定文件系统自己的特性,它在include/Linux/ext2_fs_i.h中定义如下:
struct ext2_inode_info
{
__u32i_data[15];/*数据块指针数组*/
__u32i_flags;/*打开文件的方式*/
__u32i_faddr;/*片的地址*/
__u8i_frag_no;/*如果用到片,则是第一个片号*/
__u8i_frag_size;/*片大小*/
__u16i_osync;/*同步*/
__u32i_file_acl;/*文件访问控制链表*/
__u32i_dir_acl;/*目录访问控制链表*/
__u32i_dtime;/*文件的删除时间*/
__u32i_block_group;/*索引节点所在的块组号*/
/******以下四个域是用于操作预分配块的*************/
__u32i_next_alloc_block;
__u32i_next_alloc_goal;
__u32i_prealloc_block;
__u32i_prealloc_count;
__u32i_dir_start_lookup
inti_new_inode:1/* Is a freshly allocated inode */
};
VFS索引节点中是没有物理块指针数组的域,这个Ext2特有的域在调入内存后,就必须保存在ext2_inode_info 这个结构中。此外,片作为Ext2比较特殊的地方,在ext2_inode_info 中也保存了一些相关的域。另外,Ext2在分配一个块时通常还要预分配几个连续的块,因为它判断这些块很可能将要被访问,所以采用预分配的策略可以减少磁头的寻道时间。这些用于预分配操作的域也被保存在ext2_inode_info结构中。
相关推荐
2. **分配连续的索引节点**:从当前块组中查找一组连续的未使用的索引节点,并将其分配给该目录。 3. **更新索引节点位图**:将这些索引节点在位图中标记为已分配,以避免后续其他文件占用这些预留的索引节点。 4. *...
根据块的大小,一个块可以包含不同数量的索引节点(例如,1024 字节的块可以容纳 8 个索引节点,4096 字节的块可以容纳 32 个索引节点)。 ##### 6. 目录实现 `ext2` 使用特殊类型的文件来实现目录。这种文件的...
Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。 索引节点(inode)是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。 一个文件系统维护...
它引入了Inode(索引节点)的概念,每个文件和目录都由一个Inode唯一标识,存储文件的各种元数据,如所有权、权限、大小、创建时间等。EXT2文件系统不支持日志记录,这可能导致在系统崩溃或非正常关机时数据丢失,但...
3. **inode(索引节点)**:每个文件和目录在EXT2中都有一个对应的inode,存储文件的元数据,如所有权、权限、修改时间等,以及指向文件数据块的指针。 4. **目录项**:目录是一个特殊的文件,包含了一系列目录项,...
Ext2的另一个特点是将磁盘块组织成块组,每个块组包含相邻的数据块和索引节点,这一设计使得系统能够更快地访问存放在单个块组中的文件,减少了磁盘寻道时间。在创建Ext2文件系统时,系统会预先为普通文件分配磁盘块...
1. **块组结构**:EXT2将硬盘划分为多个块组,每个组包含一定数量的数据块、索引节点块、超级块以及块位图和inode位图,这样的设计有利于空间管理。 2. **inode**:每个文件和目录都有一个唯一的inode,存储了关于...
俺花了两块的大洋在论文网载的,希望你们喜欢。很不错的,和Fat文件系统比照收获更大啊!查看需要特殊阅读器,需要的mailto:gwx324@126.com
4. **索引节点(Inode)**:每个文件和目录都有一个对应的索引节点,存储文件的元数据,如所有权、权限、修改时间、大小等,以及指向文件实际数据块的指针。 5. **块映射表(Block Bitmap)**:记录了块的使用情况...
3. **Inode(索引节点)**:每个文件或目录都有一个对应的inode,存储了关于文件的基本信息,如权限、所有者、大小、修改时间以及数据块位置等。inode采用位图方式表示,便于快速查找。 4. **数据块(Data Blocks)...
- **块分组**:Ext2将磁盘块划分为多个组,每个组包含相邻磁道的数据块和索引节点,这种设计有助于减少磁盘寻道时间,提高文件访问速度。 - **预分配**:在文件增长时,提前预留物理上相邻的块,减少文件碎片,提升...
1. **分块和 inode**: Ext2采用了分块存储数据,并且每个文件都有一个独立的inode(索引节点),用来存储文件的元信息,如文件权限、所有者、修改时间等。 2. **日志式和非日志式**: Ext2是非日志式的文件系统,这...
2. **索引节点(Inode)**:EXT2中的每个文件和目录都有一个独特的索引节点,存储了关于文件的所有元数据,如文件大小、权限、修改时间等,但不直接存储文件内容。 3. **快速文件创建**:由于EXT2使用直接分配方式...
在Ext2中,每一个文件或目录都有一个inode(索引节点),其中包含了该文件的所有元数据,如权限、所有者、创建和修改时间等,但不包括文件名。文件名实际上是在目录项中存储的,而目录项中包含了一个指向相应inode的...
ext2的设计考虑了效率和性能,允许系统管理员根据预期的文件长度和分区大小来调整块大小(1k至4k),并根据分区预计的文件数量分配索引节点,以优化磁盘空间的使用。 为了提高访问速度,ext2将磁盘块组织成组,确保...
4. **inode机制**:EXT2使用inode(索引节点)存储文件元数据,如文件大小、修改时间、所有者信息等,每个文件和目录都有一个对应的inode。 5. **快速创建与删除**:EXT2支持快速创建和删除文件,无需移动大量数据...
* 索引节点(Inodes):索引节点是 Ext2 文件系统中的文件索引,用于存储文件的 metadata 信息,如文件所有者、文件权限、文件大小等。 * 超级块(Superblocks):超级块是 Ext2 文件系统中的特殊块,用于存储文件...
1. **文件分配机制**:EXT 2使用inode(索引节点)来存储文件的元数据,包括文件权限、大小、创建时间等信息。文件数据则分布在数据块中,通过inode指针进行引用。 2. **日志记录**:虽然EXT 2最初设计时不支持日志...