前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入浅出ext4文件系统之数据块组织和日志

深入浅出ext4文件系统之数据块组织和日志

作者头像
用户4700054
发布2023-02-26 14:40:57
1.3K0
发布2023-02-26 14:40:57
举报
ext4inode数据块存储形式
  • ext4目前在kernel中的实现有两种分别是基于block基于extent基于block的方式存储文件数据块的元数据有direct block(直接数据块)indirect block(一级间接数据块,pointer to direct blocks)double indirect block(二级间接数据块,pointer to indirect blocks)triple indirect(三级间接数据块,pointer to double indirect blocks).早期是采用这样方式存储,但是有2个弊端其一假设文件是10T文件,基于这样存储形式,整个文件的block元数据是非常多的(由于每个block大小固定);其二如果要读取这个大文件的中一部分数据,查找目标数据块的效率相对比较低。
  • 基于 extent存储形式本质采用b-tree数据结构存储,这个不同于基于 block方式,大文件的extent是采用偏移量+长度变长的形式记录数据块的位置,每个extent作为B-Tree的节点。根据这样的设计,超大文件的数据块在B-Tree树高度不会太高。这样设计有几个好处,第一是大文件的数据块的元数据存储大量减少(extent采用了变长方式存储);第二是B-Tree检索和查找的效率相对较高(比多个间接块好很多)。extent数据结构定义如下:
代码语言:javascript
复制
struct ext4_extent {
	__le32	ee_block;	/* first logical block extent covers */
	__le16	ee_len;		/* number of blocks covered by extent */
	__le16	ee_start_hi;	/* high 16 bits of physical block */
	__le32	ee_start_lo;	/* low 32 bits of physical block */
};
  • ext4磁盘inode结构中的i_block保存文件数据块元数据的B-Tree.
代码语言:javascript
复制
struct ext4_inode {
	__le16	i_mode;		/* File mode */
	__le16	i_uid;		/* Low 16 bits of Owner Uid */
	__le32	i_size_lo;	/* Size in bytes */
	__le32	i_atime;	/* Access time */
	__le32	i_ctime;	/* Inode Change time */
	__le32	i_mtime;	/* Modification time */
	__le32	i_dtime;	/* Deletion Time */

	//  整个B-Tree的root,EXT4_N_BLOCKS = 15
	__le32	i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
	/******忽略*******/
};
ext4journal日志模式
  • journal日志模式中writeback模式性能最佳,journal模式性能最差,ordered日志模式是默认的日志模式
  • ext4中的日志是通过journal_startjournal_stop来进行原子操作

Delayed Allocation特性

  • Delayed Allocation在数据被写入的期间可以使用的特性,这个特性主要是延迟实际数据块的空间申请,当数据需要被flush到磁盘的时候实际申请。这样做能组织文件碎片和提供CPU利用率
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 存储内核技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ext4中inode数据块存储形式
  • ext4中journal日志模式
  • Delayed Allocation特性
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档