在以后的章节中会讲到Linux内核会涉及到cache与buffer以提高读取磁盘的效率。但cache/buffer却会导致一些很严重的问题,尤其在RHEL非正常关机时。
在RHEL开机时,会执行fsck以检查并修复“脏”(dirty)的文件系统,完成后才会挂载所有需要挂载的文件系统。RHEL在前一次关机时未能卸载所有的文件系统会造成这些文件系统的配置全部标注为“脏” 。RHEL在开机时,就得花许多时间来检查与修复文件系统。明白了:非正常关机的坏处了吧!其实远远不止这些……
对于个人或家用来说,大不了放着,你慢慢的检查修复吧。但是对企业呢?这可是很严重的问题!!!
为了引起大家的重视,我们就一起来看看吧!
如果证券交易所安装了RHEL,然而在今天早上发生了不正常关机的情况,那么RHEL可能得花上一整个上午的时间来修复数百GB甚至上TB的文件系统,所有股票买卖人可能会怎样???你说严重不???
为了解决此问题,日志文件系统就应运而生了!
日志文件系统的解决之道!!!
上述问题最大的元凶就是:cache/buffer 。cache/buffer是存放在内存中,所以系统发生不正常关机时,这些在cache/buffer的数据就来不及存回磁盘中;于是造成了某些文件系统上的数据毁损。
日志式文件系统,则把cache/buffer记录在磁盘中。利用磁盘中某些特殊的扇区存放cache/buffer数据。当数据写入到内存的cache/buffer时,具备日志功能的文件系统就会立即把cache/buffer的数据同步写入磁盘中的那引起特殊扇区。这个提供日志功能的扇区,称之为日志区块。
就算系统不正常关机,在下次启动时,fsck只要发现文件系统是具备日志功能的,就会利用日志区块中保存的数据直接复原成为宕机那一刹那的cache/buffer!
这样就缩短了fsck检查与修复文件系统的时间了。
ext3就是一个提供日志功能的文件系统。
思考:关于ext3文件系统方面的知识,上网google、daidu吧!
为何才能产生ext3文件系统呢?有2种方式:
⑴ 新建ext3文件系统
⑵ 从ext2升 级
下面来看看:
⑴ 新建ext3文件系统
使用mkfs命令:
mkfs -t ext3 device
mkfs.ext3 [options…] device
由于ext3完全兼容ext2文件系统,因此mkfs.ext3也支持“mkfs与mkfs.ext2常用参数表”及下表所示的参数:
mkfs.ext3常用参数
参数
|
说明
|
-J journal_options
|
指定ext3的日志功能细节
|
-R raid_options
|
指定与磁盘阵列有关的参数
|
温馨提醒:新建ext3文件系统后,原本文件系统上的所有文件数据都将全部被清除,故,若采用新建方式产生ext3文件系统,先备份所有数据!
⑵ 从ext2升级
从ext2升级成为ext3不会破坏原本文件系统上的内容。
从ext2升级成为ext3,必须使用tune2fs工具:
tune2fs -j device
Device : 是ext2文件系统的设备文件名称。
下面来看看实例吧:
① /dev/hda8文件系统是ext2 。
② 此处有file2 ~ file5共5 个文件。
③ 开始升级前,先卸载/dev/hda8,提示:设备正在忙碌中。
④ 用fuser –vm查看哪些进程正在使用/mnt/tmp/目录的文件系统,结果是PID为3217的bash程序正在使用。
思考:⑤ 如何结束使用某一文件系统的进程?
① 再卸载/dev/hda8成功了。
② 把/dev/hda8升 级成为ext3 。
③ 把/dev/hda8 再次挂载到/mnt/tmp/目录。注:因为尚未更新/etc/fstab中的设置值,避免mount命令从/etc/fstab决定/dev/hda8的文件系统类型,故必须特别指定/dev/hda8是一个ext3的文件系统。
④ 检查一下,/dev/hda8是否以ext3的方式挂载的。
⑤ 查看可知,原来的文件都还在,完全没有破坏。
将ext2文件系统升级成为ext3时,必须注意2件事:
⑴ 别忘记修改/etc/fstab的设置。
将ext2文件系统升级成为ext3后,一定要去修改/etc/fstab文件系统的类型字段,否则,下次开机时,RHEL仍会把文件系统当做ext2文件系统挂载,这样无法享有ext3提供的好处。
⑵ 如果升级根文件系统,别忘记重新建立initrd影像文件。
安装RHEL时,如果根文件系统为ext2,则安装程序产生的初始化内存磁盘中,不会提供ext3的模块。这会导致RHEL启动时,因无法顺利挂载ext3的根文件系统而使开机失败。
所以,升级根文件系统后,一定要再度执行以下命令,以便产生支持ext3文件系统的initrd影像文件。
[root@RHEL5 ~]#mkinitrd /boot/initrd -$ (uname) $ (uname -r)