欢迎来到天天文库
浏览记录
ID:11550392
大小:514.50 KB
页数:11页
时间:2018-07-12
《ext3文件系统的日志》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、EXT3文件系统的日志1基本概念和作用12日志的基本原理13日志的三种模式24日志的数据结构44.1概述44.2日志超级块54.3描述块74.4提交块84.5撤消块85实例分析81基本概念和作用文件系统的一致性:块位图、inode位图、inode指向的数据块、实际的数据块,这些元素要保持一致。向文件中写进新的内容,文件占用了更多的块,块位图更新了,但inode还没有来得及更新,导致一些块被标明已使用,但不知道是哪个文件占用的。作用:日志文件系统在系统崩溃恢复方面更加有效率,只是简单的扫描日志文件并重做那些未完成的文件操作
2、,就可以把文件系统恢复至一致的状态。2日志的基本原理Ext3文件系统本身不处理日志,而是利用日志块设备层(JournalingBlockDeviceLayer)或叫JBD的通用内核层提供的API。JBD致力于提供各种块设备上的日志实现,目前仅有Ext3文件系统使用它来管理日志,Ext3通过调用JBD的API来实现日志功能。举例来说,Ext3代码会将它正在执行的修改操作通知给JBD,在修改磁盘上特定数据之前要取得JBD的许可。作为对Ext3驱动所做操作的回应,JBD会在适当的时候来管理日志。Ext3与JDB之间的交互本质上
3、基于三个基本单元:日志记录,原子操作和事务。日志记录本质上是文件系统将要发出的低级操作的描述。在某些日志文件系统中,日志记录只包括操作所修改的字节范围及字节在文件系统中的起始位置。然而,JDB层使用的日志记录由低级操作所修改的整个缓冲区组成。这种方式可能浪费很多日志空间(例如,当低级操作仅仅改变位图的一个位时),但是,它还是相当快的,因为JBD层直接对缓冲区和缓冲区首部进行操作。修改文件系统的任一系统调用都通常划分为操纵磁盘数据结构的一系列低级操作。如果这些低级操作还没有全部完成系统就意外宕机,就会损坏磁盘数据。为了防止
4、数据损坏,Ext3文件系统必须确保每个系统调用以原子的方式进行处理。原子操作是对磁盘数据结构的一组低级操作,这组低级操作对应一个单独的高级操作。出于效率的原因,JBD层对日志的处理采用分组的方法,即把属于几个原子操作处理的日志记录分组放在一个单独的事务中。此外,与一个处理相关的所有日志记录都必须包含在同一个事务中。一个事务的所有日志记录都存放在日志的连续块中。JBD层把每个事务作为整体来处理。例如,只有当包含在一个事务的日志记录中的所有数据提交给文件系统时才回收该事务所使用的块,因此日志是循环使用的。如果事务数据已经写进
5、日志之后,但在实际操作之前或期间发生系统错误,那么在下一次装载文件系统时,将会继续执行未作的操作。如果事务数据尚未写进日志就发生系统错误,则数据会丢失,但文件系统会继续保持一致性。1日志的三种模式在Ext3文件系统中,日志由三种模式:完全、顺序、写回。完全:将元数据和数据先写进日志,然后在写进相应的磁盘位置。既这种模式需要把数据写进磁盘两次。顺序:先将数据写进磁盘,在把元数据写进日志、再把元数据写进磁盘。写回:把数据写进磁盘、元数据先写进日志,再写进磁盘,但数据和元数据的写入没有固定的先后顺序。这种形式可以保证元数据的一
6、致性,但不能保证数据的一致性。一般情况下,性能最好的是写回,最差的是完全。但在异步随机写时,完全日志的性能会最好。因为写进日志时不需要随机写,而从日志写进文件时,随机写已经被调整成顺序写。写回的性能比顺序稍好一点点。1日志的数据结构1.1概述日志作为一个文件出现在文件系统中,默认inode为8,它存放在第一个块组中。日志文件的第一个数据块是日志超级块,后面的块按事务分成组,一个事务包含一组块。一个事务包含以下块:描述块、元数据块、提交块、撤消块。其中,若是FULLDATA日志模式,则元数据块包含元数据块和数据块。日志超级
7、块、描述块、提交块、撤消块包含相同的12字节头部信息表1:日志文件数据块的头部数据结构字节范围含义是否必须0~3标志(0xC03B3998)是4~7块类型(见表2)是8~11事务序列号是表2:日志数据块头部结构中的块类型值含义1描述块2提交块3第一版超级块4第二版超级块5撤消块日志文件的数据全部是大端法表示(平台无关)1.1日志超级块第一版日志默认操作是记录所有数据的变化,第二版日志仅记录元数据的变化,但通过特殊的mount选项可以强制第二版日志记录全部数据的变化。表3:第1、2版日志超级块共有的数据结构字节范围含义是否
8、必须0~11标准头(见表1)是12~15日志文件块大小是16~19日志文件包含的总块数是20~23日志的起始块是24~27第一个事务的序列号是28~31第一个事务的起始块是32~35错误编号否版本1的超级块只有上表的36个字节表4:第2版日志超级块特有的数据结构字节范围含义是否必须36~39兼容特性否40~43不兼容
此文档下载收益归作者所有