centos下初识日志式文件系统(ext3)详解

2020-01-30 16:29:21于海丽

Ext3的最大特性就是在ext2的基础上增加了日志功能,所以ext3文件系统也经常被人们称之为日志文件系统,但日志文件系统觉不仅仅只有ext3,还有诸如JFS、reiserFS和XFS,以及我们在Windows上经常见到的NTFS等。

Ext3的日志特性主要是依靠其下层一个名为“日志块设备层”的中间设备来完成,叫做JBD(Journaling Block Device layer 简称JBD)。JBD并不是文件系统规范的一部分,它和ext3文件系统的规范是没有任何的关系的,而JBD正是文件系统事务处理功能的实现基础。简而言之,JBD 被设计成在任何块设备上实现日志的特殊目的(越说越抽象,事务是个啥玩意儿啊⊙﹏⊙….)

关于事务,有过数据库开发经验或者做数据运维的同学肯定不会陌生。这里咱不就结概念,也不拘泥学术定义,大家只要知道事务的主要作用就是为了保证操作的原子性。这句话如何理解?比如说,在金融系统中,要从账户A转账X元到账户B。这一业务必须要确保从A账户成功划出了X元,然后往B账户成功增加了X元。只有这两个操作同时成功才能任务是转账成功,任何一个操作失败该业务必须终止。假如从A账户转出X元成功,当往B账户写入时出现了错误,那么从A账户转出的X元必须被退还到A账户。更极端的情况是,此时A账户所在的数据由于种种原因又崩溃了,那么数据库的事务机制必须保证A账户的X元不会丢失。这就是数据库业务操作的原子性。在日志文件系统中这种对文件数据操作的原子性是由JBD来提供保证,Ext3 通过“钩子(hooking in)”JBD的API 来实现其日志记录的功能。JBD层本身虽然代码不多,但却是个相当复杂的软件部分,这里我们先不鸟它,以后有机会再陪它玩玩儿。

日志文件系统当然要记录日志,而日志也需要占存储空间。所以,日志文件系统就是在存储介质上开辟一个块特殊的区域专门用于存储日志信息:

我们利用一幅图来简单描述ext3底层的layout: