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. ecshop后台权限审核列表

    1.权限语言包 languages\zh_cn\admin\priv_action.php //微仓 $_LANG['depot'] = '微仓管理'; $_LANG['depot_list_is_c ...

  2. JMS开发步骤和持久化/非持久化Topic消息

    ------------------------------------------------ 开发一个JMS的基本步骤如下: 1.创建一个JMS connection factory 2.通过co ...

  3. 大组合数:Lucas定理

    最近碰到一题,问你求mod (p1*p2*p3*……*pl) ,其中n和m数据范围是1~1e18 , l ≤10 , pi ≤ 1e5为不同的质数,并保证M=p1*p2*p3*……*pl ≤ 1e18 ...

  4. PHP打印测试,PHP调试技巧

    第一步: 在 php.ini 中,将 display_errors 设置为 On: 第二步: 在 框架的 开始处,添加如下代码: <?php if (isset($_GET['debug'])) ...

  5. jquery.SuperSlide.js只需要调用一个插件就能实现网页大部分特效--推荐

    很棒的一个插件,http://www.superslide2.com/

  6. configparser模块

    configparser模块 echo   $@ $# $? $* configparse用于处理特定格式的文件,其本质上利用open来操作文件(比如配置文件) **********配置文件***** ...

  7. java27

    1:反射(理解)    (1)类的加载及类加载器    (2)反射:        通过字节码文件对象,去使用成员变量,构造方法,成员方法    (3)反射的使用        A:通过反射获取构造方 ...

  8. Unity3D 更新文件下载器

    使用说明: 1)远端更新服务器目录 Package |----list.txt |----a.bundle |----b.bundle 2)list.txt是更新列表文件 格式是 a.bundle|r ...

  9. delphi 各新版本特性收集

    delphi 各新版本特性收集 http://www.cnblogs.com/dreamszx/p/3602589.html

  10. 读取properties文件方式

    //src目录下 static Properties pro = new Properties(); //jar包时用(ide也可以) // pro.load(Tool.class.getClassL ...