关于centos下初识日志式文件系统( 三 )


1 向/etc/fstab的选项字段添加适当的字符串例如 data=http://www.ljsggw.cn/internet/journal
# /dev/sda3 /var ext3 defaults,data=http://www.ljsggw.cn/internet/writeback 1 2
2 在调用 mount 时直接指定 -o data=http://www.ljsggw.cn/internet/journal 命令行选项 。
# mount -o data=http://www.ljsggw.cn/internet/journal /dev/sdb1 /mnt
如果我们想要查看某一个文件系统的日志方式应该怎么查询,这里可以通过dmesg 命令:
# dmesg | grep -B 1 "mounted filesystem"
kjournald starting. Commit interval 5 seconds
EXT3-fs: mounted filesystem with ordered data mode.
【关于centos下初识日志式文件系统】--
EXT3 FS on sda1, internal journal
EXT3-fs: mounted filesystem with ordered data mode.
--
EXT3 FS on sdb1, internal journal
EXT3-fs: mounted filesystem with journal data mode.
--
EXT3 FS on sdb1, internal journal
EXT3-fs: mounted filesystem with writeback data mode.
4、选择日志模式
速度
在一些典型的情况下,使用选项data=http://www.ljsggw.cn/internet/writeback可以显著地提高速度,但是同时会降低对数据一致性的保护 。在这些情况下,数据一致性的保护基本上与ext2文件系统相同,不同的是在正常操作时,系统不断地维护文件系统的完整性(这是其它日志文件系统使用的日志模式) 。这包括频繁的共享写操作,还包括频繁地创建和删除大量的小文件,例如发送大量的小电子邮件信息 。如果你从ext2切换到ext3,发现应用程序性能大幅度下降,选项data=writeback可能会对你提高性能有帮助 。即使你没有获得昂贵的数据一致性保护措施,你仍然可以享受ext3的好处(文件系统总是保持一致) 。Red Hat还在做工作,以提高ext3某些方面的性能,所以ext3的某些方面性能在将来可以获得改善 。这也意味着即使你现在选择了data=writeback,你也需要以data=journal的缺省值重新测试将来的版本,来确定新版本的改变是否与自己的工作有关 。
数据完整性
在大多数情况下,用户都是在文件的末尾写入数据 。仅仅在某些情况下(例如数据库),用户在现存文件的中间写入数据 。甚至覆盖现存文件的操作,是通过先截断该文件,然后再从文件末尾写入数据来实现的 。在data=http://www.ljsggw.cn/internet/ordered模式中,如果正在写文件时系统崩溃,那么数据块可能被部分改写,但是写入过程并没有完成,所以系统存在不属于任何文件的不完整数据块 。在data=ordered模式中,崩溃后残存无序数据块的唯一情况是在崩溃过程中一个程序正在重写某个文件 。在这种情况下,无法绝对保证写入顺序,除非该程序使用了fsync()和O_SYNC强制写操作按特定顺序进行 。
ext3文件系统还涉及到如何cache中的数据刷到硬盘上 。它是通过kupdate进程来实现定期刷的,默认是5秒检查一次,将超过30秒的脏数据刷到硬盘。
在as 3.0中可以通过修改/proc/sys/vm/bdflush来达到目的 。而在as 4.0中可以通过修改/proc/sys/vm/dirty_writeback_centisecs和/proc/sys/vm/dirty_expire_centisecs来达到目的 。
由于默认是ordered模式,在这种模式下面,如果一个IO先写数据文件,然后再写日志文件 。假如说在写完数据文件之后,写日志文件之前时,系统发生crashed,则这部分数据将会丢失,这在数据库是绝对不允许的,不管是Oracle还是MySQL 。所以对数据库的写来说,每一次写操作都会先写到pagecache中,然后通知kernelthread 将这个buffers刷到硬盘,然后再将元数据写日志,最后才返回写成功的操作 。这样对数据库来说写操作是明显不如写祼设备快。
所以说在采用Ext3跑数据库的情况下,将日志模式设为journal模式,性能反而应该会有所提升(没有测试过,理论上分析应该 是这样) 。因为在journal模式下数据库一个写操作,先是直接将数据和文件系统的变化写到日志中(绕开cache直接写,性能较好),然后将数据写到cache 中,接着由kupdate进程将数据刷新到硬盘上 。相比之下,对DB来讲,它的性能应该比前面一种要快。

推荐阅读