linux下日志文件系统

来源:互联网 发布:java b2b2c 开源 编辑:程序博客网 时间:2024/04/26 20:47

日志文件系统介绍

日志文件系统可以在系统发生断电或者其他系统故障时保证整体数据的完整性,linux是目前支持日志文件系统最多的操作系统之一。比如说:ext3、reiserfs、XFS和JFS日志技术,采用标准的测试工具PostMark和Bonnie++进行测试,根据性能进行分析。

所谓日志文件系统是在传统文件系统的基础上,加入文件系统更改的日志记录,它的设计思想是:跟踪记录文件系统的变化,并将变化内容记录入日志。日志文件系统在磁盘分区中保存有日志记录,写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,系统重启时,会根据日志记录来恢复中断前的写操作。在日志文件系统中,所有的文件系统的变化都被记录到日志,每隔一定时间,文件系统会将更新后的元数据及文件内容写入磁盘。在对元数据做任何改变以前,文件系统驱动程序会向日志中写入一个条目,这个条目描述了它将要做些什么,然后它修改元数据。

目前Linux的日志文件系统主要有:

在Ext2基础上开发的Ext3

根据面向对象思想设计的ReiserFS

由SGIIRIX系统移植过来的XFS

由IBM AIX系统移植过来的JFS

其中EXT3完全兼容EXT2,其磁盘结构和EXT2完全一样,只是加入日志技术;

而后三种文件系统广泛使用了B树以提高文件系统的效率。

XFS日志延迟更新

       针对元数据的变化,XFS会生成大量的日志流量。在最糟糕的情况下,几乎所有的实际输入/输出流量都用于日志——而不是用于用户试图想要写入的数据。多年来人们试图采用多种办法来解决这个问题,比如对算法进行重大改变,另外进行许多重大的优化和调整。不需要的一点是任何一种磁盘上格式变化,不过这在将来可能由于其他原因而在筹划之中。

  元数据密集型的工作负载最后可能会在很短的时间内多次改变同一个目录块;那些改变每一次都会生成一个记录,记录必须写入到日志中。这正是导致巨大日志流量的根源。解决这个问题的办法从概念上来说很简单:延迟日志更新,并且将针对同一目录块的变更合并到一个条目中。这些年来,以一种可扩展的方式实际落实这个概念颇费周折,但是现在取得了进展;延迟的日志(delayed logging)将是3.3内核中唯一得到支持的XFS日志模式。

  实际的延迟日志技术主要由ext3文件系统借鉴而来。由于这种算法已知切实可行,证明它同样适用于XFS所需的时间则短得多。除了性能上的优点外,这一变化最终促使代码数量减少。有谁想详细了解其工作原理,应该会在内核文档树中的filesystems/xfs-delayed-logging.txt找到所需内容。

  延迟日志是一大变化,但绝不是唯一的变化。日志空间预留快速路径是XFS中非常热门的路径;现在它是无锁的,不过慢速路径现阶段仍需要全局锁。异步元数据写回代码形成了非常分散的输入/输出,结果大幅降低了性能。现在,元数据写回在写出之前已被延迟和分类。用Dave的话来说,这意味着文件系统在做输入/输出调度程序的工作。但是输入/输出调度程序处理的请求序列通常限制在128个条目,而XFS的延迟元数据写回序列可以有数千个条目,所以有必要在输入/输出提交之前在文件系统中完成分类操作。“活动日志项”(Active log item)这种机制可以累计变化,并批量运用变化,以此改进(庞大的)分类日志项列表的性能。元数据缓存也被移到了页面缓存器的外面,页面缓存器往往会在不合适的时间收回页面。等等。

Ceph文件系统的日志介绍

ceph是分布式文件系统,在设计之初,没有考虑到大量小文件写性能的场景,

导致该场景下性能很差,后来社区改进了一个版本,就是目前默认使用jounral;

这里的journal可以是一个文件,也可以是一个磁盘或者分区;

它主要的作用:

a、提高小文件的写性能

b、为意外掉电这样的故障做数据保护


主要步骤:

1)创建日志journal,根据日志路径并挂载

2)所有写类型操作(包括delete操作)都会先记录到journal文件


日志的回放功能:

1)       从日志文件中取出内容来回放(根据操作的序列号,保证掉电或者其它系统故障不导致数据的丢失)

2)       将所有操作都记录到journal中。

0 0
原创粉丝点击