Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深入浅出ext4文件系统之数据块组织和日志

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

作者头像
用户4700054
发布于 2023-02-26 06:40:57
发布于 2023-02-26 06:40:57
1.8K00
代码可运行
举报
运行总次数:0
代码可运行
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[操作系统] Ext系列文件系统
其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个块(block)。
DevKevin
2025/02/23
790
[操作系统] Ext系列文件系统
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
早起的鸟儿有虫吃
2025/04/11
980
从青铜到王者系列:深入浅出理解DeepSeek 3FS (2)从内核到用户态文件系统的设计之路
Fast commits for ext4
Linux 5.10 版本中包含了一个有望显著提高 ext4 文件系统性能的改动,人们称它为 "fast commits (快速提交)",加入了一种新的、更轻量级的日志方法。让我们来看一下这个功能具体是如何工作的、谁能从中受益、以及什么场景下适用。
用户9732312
2022/12/05
1.3K0
文件系统专栏 | 之ext4文件系统结构
上次讲了VFS层,这次说说文件系统层,文件系统层将不同的文件系统实现了VFS的这些函数,通过指针注册到VFS里面。所以,用户的操作通过VFS转到各种文件系统,linux用到最多的是ext4文件系统,我们就说这个吧。EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext2和ext3文件系统的后继版本。 ext4文件系统布局 一个Ext4文件系统被分成一系列块组。为减少磁盘碎片产生的性能瓶颈,块分配器尽量保持每个文件
刘盼
2022/08/29
3.6K0
文件系统专栏 | 之ext4文件系统结构
Linux Ext系列文件系统(看这一篇就够了!)
硬盘是典型的"块"设备, 操作系统读取硬盘数据的时候, 其实是不会一个个扇区地读取, 这样效率太低, 而是一次性连续读取多个扇区, 即一次性取⼀个”块”(block)。
用户11317877
2025/02/17
990
Linux Ext系列文件系统(看这一篇就够了!)
聊聊ext系列文件系统
以存储512M文件为例,展示了ext4_extent、ext4_extent_idx、ext4_extent_header之间的关系
用户4700054
2022/08/17
1.6K0
聊聊ext系列文件系统
【linux学习指南】Ext系列文件系统(二)引⼊⽂件系统“块“&&分区&&inode概念
其实硬盘是典型的“块”设备,操作系统读取硬盘数据的时候,其实是不会⼀个个扇区地读取,这样效率太低,⽽是⼀次性连续读取多个扇区,即⼀次性读取⼀个”块”(block)。
学习起来吧
2025/01/01
1340
【linux学习指南】Ext系列文件系统(二)引⼊⽂件系统“块“&&分区&&inode概念
从⻘铜到王者系列:深⼊浅出理解DeepSeek 3FS (2)从内核到⽤⼾态⽂件系统的设计之路
昵称:20点下班就是⼀件很幸福事情愿景:让⼩孩都可以听得懂我在讲什么。我能提供什么:多问⾃⼰⼀次为什么这样⽤
早起的鸟儿有虫吃
2025/03/26
860
从⻘铜到王者系列:深⼊浅出理解DeepSeek 3FS (2)从内核到⽤⼾态⽂件系统的设计之路
ext3,ext4,xfs和btrfs文件系统性能对比
应为原文:http://www.ilsistemista.net/index.php/linux-a-unix/6-linux-filesystems-benchmarked-ext3-vs-ext4
Albert陈凯
2018/04/04
9.2K0
ext3,ext4,xfs和btrfs文件系统性能对比
【linux学习指南】】Ext系列文件系统(三)ext2 文件系统的认识与构成
所有的准备⼯作都已经做完,是时候认识下⽂件系统了。我们想要在硬盘上储⽂件,必须先把硬盘格式化为某种格式的⽂件系统,才能存储⽂件。⽂件系统的⽬的就是组织和管理硬盘中的⽂件。在Linux 系统中,最常⻅的是ext2系列的⽂件系统。其早期版本为ext2,后来⼜发展出ext3和ext4。ext3 和ext4虽然对ext2进⾏了增强,但是其核⼼设计并没有发⽣变化,我们仍是以较⽼的ext2作为演⽰对象。
学习起来吧
2025/01/01
1160
【linux学习指南】】Ext系列文件系统(三)ext2 文件系统的认识与构成
Linux的文件系统及文件缓存知识点整理
硬盘分成相同大小的单元,我们称为块(Block)。一块的大小是扇区大小的整数倍,默认是4K。在格式化的时候,这个值是可以设定的。
luozhiyun
2020/06/08
4.3K0
Linux的文件系统及文件缓存知识点整理
磁盘文件系统二
但是,如果一个文件比较大,inode的块号不足以标识所有的数据块,就会使用间接块。文件系统会在硬盘上分配一个数据块,不存储文件数据,专门用来存储块号。该块被称为间接块。inode的长度是固定的。间接块占用的空间对于大文件来说是必要的。但是对于小文件不会带来额外的开销。当我们用到 i_block[12]的时候,就不能直接放数据块的位置了,要不然 i_block 很快就会用完了。这该怎么办呢?我们需要想个办法。我们可以让 i_block[12]指向间接块。也就是说,我们在 i_block[12]里面放间接块的位置,通过 i_block[12]找到间接块后,间接块里面放数据块的位置,通过间接块可以找到数据块。如果文件再大一些,i_block[13]会指向一个块,我们可以用二次间接块。二次间接块里面存放了间接块的位置,间接块里面存放了数据块的位置,数据块里面存放的是真正的数据。如果文件再大一些,i_block[14]会指向三次间接块。
没有故事的陈师傅
2021/06/24
1.1K0
磁盘文件系统二
Linux删除文件过程解析
1. 概述 ---- 当我们执行rm命令删除一个文件的时候,在操作系统底层究竟会发生些什么事情呢,带着这个疑问,我们在Linux-3.10.104内核下对ext4文件系统下的rm操作进行分析。rm命令本身比较简单,但其在内核底层涉及到VFS操作、ext4块管理以及日志管理等诸多细节。 2. 源码分析 ---- rm命令是GNU coreutils里的一个命令,在对一个文件进行删除时,它实际上调用了Linux的unlink系统调用,unlink系统调用在内核中的定义如下: SYSCALL_DEFINE1
腾讯数据库技术
2018/06/05
15.2K0
新建一个空文件占用多少磁盘空间?
操作完成后,是否要消耗掉我们的一些磁盘空间?需要的话,大概能消耗多少?嗯,是的,这个问题简单的超乎你的想象,但是不知道你否能给你自己一个满意的答案。
开发内功修炼
2022/03/28
5600
新建一个空文件占用多少磁盘空间?
浅谈ext4文件系统初始化
调试环境 $ modprobe -v ext4 $ dd if=/dev/zero of=/tmp/disk1 count=30 bs=1M $ losetup --show -f /tmp/disk1 /dev/loop0 $ mkfs.ext4 /dev/loop0 $ mount /tmp/disk1 /mnt/disk1 关于超级快基本知识 当使用者适应mkfs.ext4 /dev/sdb时候,系统按照ext4内部的布局规则写入写入先关数据。mount时候按照内置的布局规则读取这些信息
用户4700054
2022/08/17
1.6K0
浅谈ext4文件系统初始化
云盘文件系统比较:Ext4、XFS和Btrfs
在上一篇云硬盘性能分析的教程中,为大家介绍了如何评测云硬盘的读写性能。但是,我们使用硬盘,从来不是直接读写裸设备,而是通过文件系统来管理和访问硬盘上地文件。不少朋友询问,文件系统该如何对比,又该如何选择呢?
溪歪歪
2021/01/03
13.1K6
云盘文件系统比较:Ext4、XFS和Btrfs
深入理解Linux文件系统之ext2路径名查找
本文以ext2文件系统为例来剖析一个真实的文件系统如何查找文件,这对于深入理解文件系统至关重要。
用户7244416
2021/08/06
1.4K0
从磁盘存储维度观测ext4文件系统
inode是文件系统中每个文件的唯一标识,映射IO Block到磁盘扇区的对应关系。inode一般存储了文件的acess/modify/create的时间、访问权限、以及最重要的这个文件包含了哪些Blocks.这里需要注意的是ext4系统中当删除文件的时候,这个文件的inode是可以被回收然后被新文件重用。
用户4700054
2023/02/26
1.2K0
从磁盘存储维度观测ext4文件系统
运维Tips | Linux系统文件命令执行时inode表如何变化?
描述:文件元数据(Metadata)是文件的属性,它描述了文件的基本信息,例如文件大小、创建时间、类型、权限等。其通常是存放在inode (index node) 表中,inode 表中有很多条记录组成,第一条记录对应的存放了一个文件的元数据信息。
全栈工程师修炼指南
2024/05/28
2790
运维Tips | Linux系统文件命令执行时inode表如何变化?
Linux 性能调优之文件系统调优
不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已经和从前不一样了。——村上春树
山河已无恙
2024/02/26
8170
Linux 性能调优之文件系统调优
推荐阅读
相关推荐
[操作系统] Ext系列文件系统
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验