Ext3介绍

对于ext3文件系统,磁盘空间划分一系列block groups,每个group有位图来跟踪inode和data块的分配和范围。其物理布局如下:

Superblock:位于group内第0个block,为了保证兼容,前1024B字节为0,SB从1024B偏移处存储,大小1024B。存储的是文件系统相关信息,在多个group中有备份(0,1,3,5,7,9,25,37,49,81等)。大部分信息在格式化时确定,并只读。可以用dumpe2fs命令查看;

Group Descriptor:位于group内第1个block,描述group信息,如inode bitmap,data blockbitmap等位置信息。group描述符在多个group中有备份。为了保证文件再写入的时候,尽量在一个连续的空间上,ext3文件系统将32768(0x8000)个block组成一个group,group通过Group Descriptor描述,所有的Group Descriptor存在Group Descriptor Table中,整个 desc table 总大小不能超过 1个 block 的大小,对于4096B的block,则最多1024B*4 / 32B = 128个group;

block bitmap:占用1个block,描述block的使用情况;用于group内block的分配;

inode bitmap:占用1个block,描述inode的使用情况;用于group内inode的分配;

inode table:占用多个block,存放inode信息。每个inode 128Byte ,inode是描述数据的数据,即文件系统元数据,是最重要的一部分,包含了文件的权限,拥有者,时间信息,数据存储在哪些 block 上等信息;inode通过多级索引表对block进行管理;inode分配后,会更新到inode bitmap中;

data block:占用多个block,存放数据信息。block分配后,会更新到inode的block索引表和block bitmap中;

JBD介绍

Ext3文件系统作为日志文件系统,其本身不处理日志,而是利用日志块设备(Journaling Block Device)或叫JBD 的通用内核层。JDB有3个核心概念:日志记录,原子操作和事务。

日志记录(journal:本质上是文件系统将要发出的低级操作的描述。在某些日志文件系统中,日志记录只包括操作所修改的字节范围及字节在文件系统中的起始位置。然而,JDB 层使用的日志记录由低级操作所修改的整个缓冲区组成。这种方式可能浪费很多日志空间(例如,当低级操作仅仅改变位图的一个位时),但是,它还是相当快的,因为JBD 层直接对缓冲区和缓冲区首部进行操作。

原子操作(handle:修改文件系统的任一系统调用都通常划分为操纵磁盘数据结构的一系列低级操作。如果这些低级操作还没有全部完成系统就意外宕机,就会损坏磁盘数据。为了防止数据损坏,Ext3文件系统必须确保每个系统调用以原子的方式进行处理。需要原子地完成的一组修改或写操作,叫做原子操作。

事务(transaction:将每个原子操作都写入到日志之中可能不那么高效。为了更高的性能,JBD 将一组原子操作打包为一个事务,并将事务一次写入日志。一个事务的所有日志记录都存放在日志的连续块中。JDB的操作单位是事务。

当事务正在提交时,它的生命周期经历了下面的一系列状态:

  1. 运行(running):事务当前在内存中,还可以接受新的原子操作。在一个系统中,仅有一个事务可以处于运行状态。
  2. 锁定(locked):事务不再接受新的原子操作,但现有原子操作们还没有完成。一旦所有原子操作都完成了,事务将进入下一个状态。
  3. 写入(flush):事务中的所有原子操作都完成了,事务正在写入日志。
  4. 提交(commit):事务已写入日志。事务会写一个提交块,指示事务log已写入日志。
  5. 完成(Finished):事务写到日志之后,它会留在那直到所有的块都被更新到磁盘上的实际位置。

Ext3日志模式

Ext3既可以只对元数据做日志,也可以同时对文件数据块做日志。

日志写入分3个阶段:

  • Journal Write:事务写入到日志空间;
  • Journal Commit:写入commit块;一个完整commit到日志区的事务以JFS_DESCRIPTOR_BLOCK开始,以JFS_COMMIT_BLOCK结束;
  • CheckPoint Write:事务写入到磁盘空间,并且其在日志的空间被回收。CheckPointing的触发场景较多,如文件系统缓存达到阈值,日志剩余空间达到阈值,定时器超时等等。

同时,Ext3提供三种日志模式:

  • Writeback

    只有对文件系统元数据的改变才记入日志,也是最快的模式。数据块直接写入磁盘上的真实位置(fixed location),这种模式不保证日志和数据的写入顺序。回写模式是三种模式中一致性最差的,它只保证文件系统元数据的一致性,不保证数据的一致性。

  • Ordered

    只有文件系统元数据才写入日志。但是数据会保证在元数据写入到日志前写入真正存储位置。相比于writeback模式,这种模式提供了更高的一致性保护:数据和元数据都保证一致性。

  • Journal

    文件系统所有数据和元数据的改变都记入日志。这意味着所有数据块会被写2次,一次写入日志,然后再写入磁盘上的真实位置(fixed location)。和ordered一样,data模式提供了相同强度的一致性保护。

日志模式对比分析:

  • 相较于无日志文件系统,日志模式在随机写场景下性能较高;
  • writeback和ordered在大文件顺序写场景下性能较高;
  • data将乱序转换为顺序,获取顺序的高性能;所以data在异步小文件随机写场景下性能较高;
  • data和ordered提供相同的一致性保护;
  • 有些场景下data性能较高,有些场景下ordered性能较高;
  • ordered模式下,fixed data write, journal inode write,journal commit write依次顺序写入。当日志存于独立的设备上时,这种限制会不必要的降低性能;
  • 大量临时文件的场景下,data和ordered的性能较低,因为定时器刷新元数据到日志时,相应的数据也必须写入,不必要的临时文件写入,增加IO负荷。

Ext3日志视图

日志是管理一个块设备的更新的内部记录(log)。更新首先会放到日志之中,然后再写到它们在磁盘上的真实位置。Ext3的日志(journal)可以看做一个文件,其inode固定为8,位于第一个group中,,其物理布局如下,包含超级块、描述块、提交块等。

Ext3日志的详细内部视图如下,首先是日志的superblock,然后是每个事务描述块,最后是数据块。完整的事务分3部分:事务开始块,数据索引项,事务提交块。

参考文献:

Linux Kernel 2.6.32

Analysis and Evolution of Journaling File Systems

ext3 journaling filesystem (stephen c. tweedie)

journal block device源代码分析

--EOF--

Ext3文件系统及JDB介绍的更多相关文章

  1. Ext3文件系统mount选项和文件属性介绍

    mount选项 设置方式 ext3 mount选项可以通过多个方式进行设置:1)内核编译时: 内核menuconfig通过CONFIG_EXT3_DEFAULTS_TO_ORDERED编译控制选项,来 ...

  2. 高性能Linux服务器 第6章 ext3文件系统反删除利器ext3grep extundelete工具恢复rm -rf 误删除的文件

    高性能Linux服务器 第6章  ext3文件系统反删除利器ext3grep  extundelete工具恢复rm -rf 误删除的文件 只能用于ext3文件系统!!!!!!!高俊峰(高性能Linux ...

  3. 在Linux环境中使用Ext3文件系统

      Linux缺省情况下使用的文件系统为Ext2,ext2文件系统的确高效稳定.但是,随着Linux系统在关键业务中的应用,Linux文件系统的弱点也渐渐显露出来了:其中系统缺省使用的ext2文件系统 ...

  4. ext3文件系统反删除利器ext3grep应用实战

    推荐:10年技术力作:<高性能Linuxserver构建实战Ⅱ>全网发行,附试读章节和全书实例源代码下载! 一."rm –rf"带来的困惑 国外一份非常著名的Linux ...

  5. Linux ext2/ext3文件系统详解

    转载: Linux ext2/ext3文件系统使用索引节点来记录文件信息,作用像windows的文件分配表.索引节点是一个结构,它包含了一个文件的长度.创建及修改时间.权限.所属关系.磁盘中的位置等信 ...

  6. 87 resize2fs-增大或者收缩未加载的“ext2/ext3”文件系统的大小

    resize2fs命令被用来增大或者收缩未加载的"ext2/ext3"文件系统的大小.如果文件系统是处于mount状态下,那么它只能做到扩容,前提条件是内核支持在线resize., ...

  7. 81 dumpe2fs-打印“ext2/ext3”文件系统的超级块和快组信息

    dumpe2fs打印"ext2/ext3"文件系统的超级块和快组信息. 语法 dumpe2fs (选项) (参数) 选项 -b:打印文件系统中预留的块信息: -ob<超级块& ...

  8. ext3文件系统基础

    http://blog.csdn.net/haiross/article/category/1488205/2   block size: 是文件系统最小的单位,Ext2/Ext3/Ext4 的区块大 ...

  9. ext3文件系统,reiserfs,xfs,jsf那种性能好点

    ext2 是一个旧的 Linux 档桉系统,没有日志功能. 启用的时间通常需要很久.目前有许多 日志型态 的档桉系统可以以更快的速度及更好的效率完成系统启用和检查. ext3 为 ext2 的日志版, ...

随机推荐

  1. SpringMVC配置拦截器实现登录控制

    SpringMVC读取Cookie判断用户是否登录,对每一个action都要进行判断.之前使用jstl标签在页面上判断session如果没有登录就使用如下代码跳转到登录页面. <c:if tes ...

  2. [NHibernate]HQL查询

    目录 写在前面 文档与系列文章 查询的几种方式 HQL查询 一个例子 总结 写在前面 上篇文章介绍了nhibernate在项目中的基本配置,包括数据库连接字符串的设置,映射文件的配置及需注意的地方,这 ...

  3. [Search Engine] 搜索引擎技术之查询处理

    我们之前从开发者的角度谈了一些有关搜索引擎的技术,其实对于用户来说,我们不需要知道网络爬虫到底是怎样爬取网页的,也不需要知道倒排索引是什么,我们只需要输入我们的查询词query,然后能够得到我们想要的 ...

  4. spring常见问题

    问题1:提示说:cvc-elt.1: Cannot find the declaration of element 'beans' 解决方法:从网上搜了一些,有的说是因为网络原因访问不到xsd文件,因 ...

  5. 【Alpha版本】 第二天 11.8

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 我要招聘详情的展示 注册界面的实现 填写招聘时用户填写各个日期到可 ...

  6. 第三次个人作业—“K米”评测

    第一部分 调研,评测 评测 1.上手体验: 软件欢迎界面,色彩对比鲜明,前三图深色调,最后一条则充满了艳丽的色彩,让人对这个产品突然充满了期待. 软件界面加载速度慢,很多地方点击进去要等好久才能出现界 ...

  7. c++笔记整理

    一:导读 假设编写了一个C++程序,如何让他允许起来呢,这取决于计算机环境和所使用的C++编译器. 1.使用文本编辑器编写程序,并将其保存在文档中,====此就是源代码 2.编译源代码,编译过程就意味 ...

  8. 用python修改haproxy配置文件

    需求: 当用户输入域名的时候,显示出来下面的记录 当用户需要输入添加纪录的时候,添加到你需要的那个域名下面 global log 127.0.0.1 local2 daemon maxconn 256 ...

  9. Redis 3.0正式版发布,正式支持Redis集群

    Redis是一个开源.基于C语言.基于内存亦可持久化的高性能NoSQL数据库,同时,它还提供了多种语言的API.近日,Redis 3.0在经过6个RC版本后,其正式版终于发布了.Redis 3.0的最 ...

  10. Delete,Update与LEFT Join

    UPDATE:UPDATE A SET ApproverID=NULL FROM [SH_MaterialApplyBuyBill] A LEFT JOIN [SH_MaterialApplyBuyB ...