您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > ext3文件系统的日志
EXT3文件系统的日志1基本概念和作用.....................................................................................................12日志的基本原理.....................................................................................................13日志的三种模式.....................................................................................................34日志的数据结构.....................................................................................................44.1概述..................................................................................................................44.2日志超级块......................................................................................................54.3描述块..............................................................................................................74.4提交块..............................................................................................................84.5撤消块..............................................................................................................85实例分析.................................................................................................................81基本概念和作用文件系统的一致性:块位图、inode位图、inode指向的数据块、实际的数据块,这些元素要保持一致。向文件中写进新的内容,文件占用了更多的块,块位图更新了,但inode还没有来得及更新,导致一些块被标明已使用,但不知道是哪个文件占用的。作用:日志文件系统在系统崩溃恢复方面更加有效率,只是简单的扫描日志文件并重做那些未完成的文件操作,就可以把文件系统恢复至一致的状态。2日志的基本原理Ext3文件系统本身不处理日志,而是利用日志块设备层(JournalingBlockDeviceLayer)或叫JBD的通用内核层提供的API。JBD致力于提供各种块设备上的日志实现,目前仅有Ext3文件系统使用它来管理日志,Ext3通过调用JBD的API来实现日志功能。举例来说,Ext3代码会将它正在执行的修改操作通知给JBD,在修改磁盘上特定数据之前要取得JBD的许可。作为对Ext3驱动所做操作的回应,JBD会在适当的时候来管理日志。Ext3与JDB之间的交互本质上基于三个基本单元:日志记录,原子操作和事务。日志记录本质上是文件系统将要发出的低级操作的描述。在某些日志文件系统中,日志记录只包括操作所修改的字节范围及字节在文件系统中的起始位置。然而,JDB层使用的日志记录由低级操作所修改的整个缓冲区组成。这种方式可能浪费很多日志空间(例如,当低级操作仅仅改变位图的一个位时),但是,它还是相当快的,因为JBD层直接对缓冲区和缓冲区首部进行操作。修改文件系统的任一系统调用都通常划分为操纵磁盘数据结构的一系列低级操作。如果这些低级操作还没有全部完成系统就意外宕机,就会损坏磁盘数据。为了防止数据损坏,Ext3文件系统必须确保每个系统调用以原子的方式进行处理。原子操作是对磁盘数据结构的一组低级操作,这组低级操作对应一个单独的高级操作。出于效率的原因,JBD层对日志的处理采用分组的方法,即把属于几个原子操作处理的日志记录分组放在一个单独的事务中。此外,与一个处理相关的所有日志记录都必须包含在同一个事务中。一个事务的所有日志记录都存放在日志的连续块中。JBD层把每个事务作为整体来处理。例如,只有当包含在一个事务的日志记录中的所有数据提交给文件系统时才回收该事务所使用的块,因此日志是循环使用的。如果事务数据已经写进日志之后,但在实际操作之前或期间发生系统错误,那么在下一次装载文件系统时,将会继续执行未作的操作。如果事务数据尚未写进日志就发生系统错误,则数据会丢失,但文件系统会继续保持一致性。3日志的三种模式在Ext3文件系统中,日志由三种模式:完全、顺序、写回。完全:将元数据和数据先写进日志,然后在写进相应的磁盘位置。既这种模式需要把数据写进磁盘两次。顺序:先将数据写进磁盘,在把元数据写进日志、再把元数据写进磁盘。写回:把数据写进磁盘、元数据先写进日志,再写进磁盘,但数据和元数据的写入没有固定的先后顺序。这种形式可以保证元数据的一致性,但不能保证数据的一致性。FullDataJournal(Data+Inode)Journal(Commit)Fixed(Data+Inode)Sync将Inode和数据写进日志日志写入完成,准备写进磁盘在适当的时候写进磁盘OrderedFixed(Data)Journal(Inode)Journal(Commit)Fixed(Inode)SyncSync将Inode写进日志日志写入完成,准备写进磁盘在适当的时候写进磁盘先将数据写进磁盘WritebackFixed(Data)journal(Inode)Journal(Commit)Fixed(Data)Fixed(Inode)Fixed(Data)sync数据可在任意时刻写入将Inode写进日志日志写入完成,准备写进磁盘在适当的时候写进磁盘一般情况下,性能最好的是写回,最差的是完全。但在异步随机写时,完全日志的性能会最好。因为写进日志时不需要随机写,而从日志写进文件时,随机写已经被调整成顺序写。写回的性能比顺序稍好一点点。4日志的数据结构4.1概述日志作为一个文件出现在文件系统中,默认inode为8,它存放在第一个块组中。日志文件的第一个数据块是日志超级块,后面的块按事务分成组,一个事务包含一组块。一个事务包含以下块:描述块、元数据块、提交块、撤消块。其中,若是FULLDATA日志模式,则元数据块包含元数据块和数据块。日志超级块、描述块、提交块、撤消块包含相同的12字节头部信息表1:日志文件数据块的头部数据结构字节范围含义是否必须0~3标志(0xC03B3998)是4~7块类型(见表2)是8~11事务序列号是表2:日志数据块头部结构中的块类型值含义1描述块2提交块3第一版超级块4第二版超级块5撤消块日志文件的数据全部是大端法表示(平台无关)4.2日志超级块第一版日志默认操作是记录所有数据的变化,第二版日志仅记录元数据的变化,但通过特殊的mount选项可以强制第二版日志记录全部数据的变化。表3:第1、2版日志超级块共有的数据结构字节范围含义是否必须0~11标准头(见表1)是12~15日志文件块大小是16~19日志文件包含的总块数是20~23日志的起始块是24~27第一个事务的序列号是28~31第一个事务的起始块是32~35错误编号否版本1的超级块只有上表的36个字节表4:第2版日志超级块特有的数据结构字节范围含义是否必须36~39兼容特性否40~43不兼容特性否44~47只读兼容特性否48~63日志的UUID否64~67文件系统使用日志的数目否68~71超级块副本的保存位置否72~75事务占用日志块数的最大值否76~79事务占用文件系统块数的最大值否80~255未用否256~1023文件系统正在使用日志的16字节ID否目前仅使用的一个特性是撤消(revoke)特性,它是不兼容特性,值为0x000000014.3描述块描述块的前12字节为表1所述的标准头,从第13个字节开始,是一条条的描述项,表5:描述项的数据结构字节范围含义是否必须0~3文件系统块号是4~7项标志是8~23UUID(如果设置了SAME_UUID,则没有此项)否描述项中的文件系统块按顺序对应着日志中的元数据块,即描述块后的第一个元数据块对应着第一条描述项中的文件系统块;第二个元数据块对应着第二条描述项中的文件系统块。表6:描述项中的项标志标志值含义0x00后面正常跟有UUID0x01日志块已经被转义(escaped)0x02本条和前一条有同样的UUID(SAME_UUID)0x04本事务已经删除了这个块(目前未使用)0x08描述块中的最后一项转义的含义是:当文件系统块的头四个字节和日志块头相同时,即也是0xC03B3998,为了不引起误会,在将这个数据块写进日志时,清除它的头四个字节,最终将它写进磁盘时在加进去。4.4提交块提交块只有12字节的标准头,它表示本事务结束。4.5撤消块撤消块在12字节标准头之后,是一个已取消修改的块列表表7:撤消块的数据结构字节范围含义是否必须0~11标准头是12~15撤消的文件系统块列表的结束位置在本块中的偏移量(offset)是16~offset文件系统块地址(4字节)列表是撤消块应用在序列号等于或小于撤消块的序列号的所有事务中。Afilesystemblockthatwasaddedtothejournalcanberevokedsothatthechangeisnotappliedduringarecovery.Thisisdoneusingarevokeblock,whichcontainsasequencenumberandalistofblocksthatwererevoked.Duringrecovery,anyblockthatislistedintherevokeblockandwhosesequencenumberislessthanthesequencenumberoftherevokeblock,willnotberestored.5实例分析在/dev/hdb2上创建一个新文件系统#icat-flinux-ext3/dev/hdb28|xxd0000000:c03b39980000000400000000000004000000016:000004000000000100000126000000000000032:000000000000000000000000000000000000048:a34c4be5c222460bb76fd45b518b083c0000064:000000010000000000000000000000000000080:000000000000000000000000000000000到3字节是签名,4到7字节显示这个块类型是4,表明它是第二版的超级块。8到11字节显示序列号是0,12到15字节显示日志块大小是1024字节(0x0400)。16到19显示日志由1024个块,20到23显示日志条目开始于日志块1.24到27显示第一个事务的序列号是294(0x0126),28到31显示这个事务始于块0。但日志项实际上开始于块1.这是因为此文件系统是正常卸载的,所有的日志都已提交完毕。挂载这个文件系统,并在它的根目录下创建一个文件new-file.t
本文标题:ext3文件系统的日志
链接地址:https://www.777doc.com/doc-1613473 .html