当前位置:
文档之家› LinuxEXT4文件系统分析
LinuxEXT4文件系统分析
Abstract: Compared with EXT3 file system, the theory and data structure of EXT4 file system was introduced.By analyzing the WRITE operation,the procedcure of EXT4 file system was explained,and the study will supply some references for users who choosing core of Linux.
接指针,第 14 个是二级间接指针,第 15 个是三级间接指针,将这三种情况都写在一个联合体中,根据实际的情况选择节点号,根据
节点的类型来选择用联合体中的那个数据结构。 与 EXT3 不同的是,在 EXT4 文件系统中,增加了 5 个项,用于扩充索引节点,通过
这个结构解决了这对于对精度要求很高的程序的要求。
__le32 i_atime_EXTra; /* 扩展的存储时间(nsec << 2 | epoch) */
__le32 i_crtime; /* 文件创建时间 */
__le32 i_crtime_EXTra;};/* 扩展文件创建时间 (nsec << 2 | epoch) */
上述结构体中有两个联合体,是为了节省空间考虑,因为 i 节点的索引有三种情况前 12 个直接指向物理块,第 13 个 是 一 级 间
1.4 i 节点的扩展信息的数据结构
这个结构体是日志式文件系统所特有的,用来支持完成日志文件的各种操作[3]。 也是 2.6 内核与 2.4 内核的不同之处。 i 节点文
__le16 bg_used_dirs_count; /* 使用中的目录数 */
__u16 bg_flag;
/* 用于 32 位地址对齐 */
__u32 bg_reserved[3];
__le32 bg_block_bitmap_hi; /* 文件块位图所在的块的索引的高 32 位 */
__le32 bg_inode_bitmap_hi; /* 存放文件节点位图的块的索引高 32 位 */
__le8 h_i_fsize; /* 碎片大小 */
3444 计算机工程应用技术
本栏目责任编辑:梁 书
第 7 卷第 14 期 (2011 年 5 月)
Computer Knowledge and Technology 电脑知识与技术
__le16 h_i_mode_high;
__le16 h_i_uid_high;
__le32 s_free_blocks_count_hi;} /* 可用文件块数高 32 位 */
合 适 的 特 定 设 备 和 不 适 合 的 特 定 设 备 的 不 同 是 在 ,如 果 在 不 合 适 的 特 定 设 备 中 有 一 位 设 备 是 内 核 无 法 识 别 的 ,内 核 将 会 拒 绝
__le32 bg_inode_table_hi;}; /* 文件节点表在外存中的第一个块的索引高 32 位 */
1.3 i 节点数据结构
struct EXT4_inode {
__le16 i_mode;
/* 文件模式,表示文件类型以及存取权限 */
__le16 i_uid; /* 所属用户的 id 的低 16 位 */
__le32 i_file_acl; /* 文件 ACL */
__le32 i_dir_acl; /* 目录 ACL */
__le32 i_faddr; /* 碎片地址 */
union {
struct {
__le8 l_i_frag; /* 碎片号 */
__le8 l_i_fsize; /* 碎片大小 */
} masix2;//2 级间接指针数据结构
} osd2;
/* OS dependent 2 */
__le16 i_EXTra_isize;
__le16 i_pad1;
__le32 i_ctime_EXTra; /* 节点扩展的创建时间(nsec << 2 | epoch) */
__le32 i_mtime_EXTra; /* 扩展的修改时间(nsec << 2 | epoch) */
__le32 s_log_block_size; /* 数据块大小 */
__le32 s_log_frag_size; /* 文件碎片大小 */
/*20*/ __le32 s_blocks_per_group; /* 每一组文件块的数目 */
__le32 s_frags_per_group; /* 每一组碎片数目 */
__le32 bg_inode_bitmap; /* 存放文件节点位图的块的索引 */
__le32 bg_inode_table;
/* 文件节点表在外存中的第一个块的索引 */
__le16 bg_free_blocks_count; /* 可用的文件块数 */
__le16 bg_free_inodes_count; /* 可用的节点数 */
ISSN 1009-3044 C第om7pu卷te第r Kn1o4wl期edge (a2n0d1T1ec年hno5log月y )电脑知识与技术
Vol.7, No.14, May 2011,pp.3443-3446,3472
E-mail: kfyj@ Computer Knowledge and Techhnttoplo:/g/yw电ww脑.d知nz识s.n与e技t.c术n
__le32 s_inodes_per_group; /* # 每一组节点数目 */
__le32 s_mtime;
/* 最近被安装到内存的时间 */
…………
/*150*/ __le32 s_blocks_count_hi;/* 文件块数的高 32 位 */
__le32 s_r_blocks_count_hi; /* 保留未用的文件块数高 32 位 */
__le16 i_pad1;
__le16 l_i_uid_high; /* I 节点用户 id 高位 */
__le16 l_i_gid_high; /* I 节点组号高位 */
__le32 l_i_reserved2;
} linux2;//1 级间接指针数据结构
struct {
__le8 h_i_frag; /* 碎片号 */
1.2 组描述符 Group Descriptor
组描述符合超级块一样,记录的信息与整个文件系统相关。 当某一个组的超级块或 inode 受损时,这些信息可以用于恢复文件
系统。 因此,为了更好的维护文件系统,每个块组中都保存关于文件系统的备份信息。
struct EXT4_group_desc
{__le32 bg_block_bitmap; /* 文件块位图所在的块的索引 */
__le16 i_links_count; /* 连接数目 */
__le32 i_blocks; /* I 节点文件块数 */
__le32 i_flags; /* 文件标志 */
union {
struct {
__le32 l_i_reserved1;
} linux1;
struct {
__le32 h_i_translator;
} hurd1;
struct {
__le32 m_i_reserved1;
} masix1;
} osd1;
/* OS dependent 1 */
__le32 i_block[EXT4_N_BLOCKS];/* 文件块索引数组,数组大小 15*/
__le32 i_generation; /* 文件修改 (for NFS) */
启动文件系统。 在 EXT4 中,e2fsck 的要求更加严格,如果他既不能在合适的特定设备中,也不能在不合适的特定设备中识别出一个
设备 ,他一定会终止程序并且不会将它所不能识别的设备模块化。
收 稿 日 期 :2011-03-25 基金项目:本文的研究得到 2009 浙江省青年教师资助项目以及浙江省教育厅科研项目(20071302)资助 作 者 简 介 :陆 亚 文 (1978-),女 ,浙 江 杭 州 人 ,硕 士 ,主 要 从 事 计 算 机 图 形 学 ,人 工 智 能 等 方 向 的 研 究 。
Key words: EXT4; daily record; handle; inode
EXT4 文件系统是日志文件系统,100%兼容 EXT3 文件系统,与 EXT3 文件系统相比的主要区别是它能快速更新文件存储。 计 算机开始从磁盘上读取或写入数据都必须保证文件系统中文件与目录的一致性,所有日志文件中的数据均以数据块的形式存放在 存储设备中,当磁盘分区时文件系统即被创建,按照文件形式、目录形式支持存储数据,组织数据的使用。 EXT4 提供并使用了一个通 用日志层 (jbd) [1],该层既可在文件系统中使用,还能够应用到其它设备中,对 NVRAM 设备,EXT4 就能支持。 当由于软件或硬件错 误导致文件系统崩溃时, EXT4 使用与 e2fsck 同样代码来修复崩溃的文件系统,因此在出现数据崩溃时,EXT4 具有和 EXT3 同样的 防止数据丢失的优点[2]。 但是,上述这些优点不是 EXT4 独有的,但只有 EXT4 才尽数具备,这正是 EXT4 的优势。
__le16 h_i_gid_high;
__le32 h_i_author;
} hurd2; //直接指向物理块的节点的数据结构的补充
struct {
__le8 m_i_frag; /* 碎片号 */
__le8 m_i_fsize; /* 碎片大小 */
__le16 m_pad1;