众所周知,文件系统是操作系统最为重要的一部分。每种操作系统都有自己的文件系统。文件系统直接影响着操作系统的稳定性和可靠性。 Linux 下的文件系统通常有两种,即日志文件系统和非日志文件系统,以下简单介绍两类文件系统。

    一、 非日志文件系统

    非日志文件系统在工作时,不对文件系统的更改进行日志记录。

    文件系统通过为文件分配文件块的方式把数据存储在磁盘上。每个文件在磁盘上都会占用一个以上的磁盘扇区,文件系统的工作就是维护文件在磁盘上的存放,记录文件占用了哪几个扇区。另外扇区的使用情况也要记录在磁盘上。文件系统在读写文件时,首先找到文件使用的扇区号,然后从中读出文件内容。如果要写文件,文件系统首先找到可用扇区,进行数据追加。同时更新文件扇区使用信息。不同的文件系统用不同的方法分配和读取文件块。例如, dos/windows 就使用 fat 文件系统,而 windows NT 则采用 NTFS 文件系统。

    非日志文件系统能够工作得很稳定,但是,它存在不少问题。各位请看,对于一个普通的日志文件系统,如 Ext2 文件系统,如果系统刚将文件的磁盘分区占用信息( meta-data )写入到磁盘分区中,还没有来得及将文件内容写入磁盘,这时意外发生了:系统断电了,结果会造成:文件的内容仍然是老内容,而 meta-data 信息是新内容,二者不一致了。

    让我们再看一下 Linux 系统中 fsck 是如何工作的:通常情况下,当 Linux 系统启动时,首先运行 fsck ,由它扫描 /etc/fstab 文件中列出的所有本地文件系统。 fsck 的工作就是确保要装载的文件系统的元数据是处于可使用的状态。当系统关闭时, fsck 又把所有的缓冲区数据转送到磁盘,并确保文件系统被彻底卸载,以保证系统下次启动时能够正常使用。

    然而意想不到掉电或者其它故障会导致系统死机、重启。出现这种情况时,操作系统来不及卸载文件系统。重启后, fsck 对磁盘进行彻底扫描,全面地检查元数据,竭尽全能修正检查过程中能找到的所有错误。对所有的元数据做彻底的一致性检查极其耗时。文件系统越大,完成彻底的扫描时间就越长。 Fsck 也会碰到它无法修复的磁盘错误。碰到这种情况,就是简单地将文件删除或另存为一个文件。在高密度访问的数据中心, fsck 可能会造成极大的数据文件破坏。只有当 fsck 完成扫描、检查与修复工作后, Linux 系统才能开始使用。当然,如果有严重的文件或数据丢失的话,系统很可能无法重新启动了!

    非日志文件系统的种类:

    Linux 可以支持种类繁多的文件系统,几乎所有的 Linux 发行版都用 ext2 作为默认的文件系统。 Ext2 文件系统就是一个非日志文件系统。此外, Linux 支持的其它非日志文件系统还有: FAT VFAT HPFS OS/2 )、 NTFS Windows NT )、 Sun UFS 等。

    二、 日志式文件系统

    日志文件系统则是在非日志文件系统的基础上,加入了文件系统更改的日志记录。

    日志文件的设计思想是:跟踪记录文件系统的变化,并将变化内容记录入日志。日志式文件系统的思想来自于大型数据库系统。数据库操作由多个相关的、相互依赖的子操作组成,任何一个子操作的失败都意味着整个操作的无效性,所以,对数据的任何修改都要求回复到操作以前的状态。日志式文件系统采用了类似的技术。

    日志文件系统在磁盘分区中保存有日志记录,写操作首先是对记录文件进行操作,若整个写操作由于某种原因(如系统掉电)而中断,系统重启时,会根据日志记录来恢复中断前的写操作。这个过程只需要几秒钟到几分钟。

    日志文件系统是如何工作的?

    在日志文件系统中,所有的文件系统的变化、添加和改变都被记录到 日志 (即记录文件 metadata 信息的数据)中。每隔一定时间,文件系统会将更新后的文件 metadata 及文件内容写入磁盘,之后删除这部分日志。重新开始新日志记录。

    在对元数据做任何改变以前,文件系统驱动程序会向日志中写入一个条目,这个条目描述了它将要做些什么。然后,它继续并修改元数据。通过这种方法,日志文件系统就拥有了近期元数据被修改的历史记录,当检查到没有彻底卸载的文件系统的一致性问题时,只要根据数据的修改历史进行相应的检查即可了。也即日志文件系统除了存储数据和元数据( metadata )以外,它们还保存有一个日志,我们可以称之为元元数据(关于元数据的元数据)。

    日志文件系统使得数据、文件变安全了,但是系统开销加大了。每一次更新和大多数的日志操作都需要写同步,这需要更多的磁盘 I/O 操作。从日志文件的原理出发,将那些需要经常写操作的分区上使用日志文件系统是一个好的主意。

    Linux 系统中可以混合使用日志文件系统或非日志文件系统。日志增加了文件操作的时间,但是,从文件安全性角度出发,磁盘文件的安全性得到了重大的提高。笔者对日志文件系统进行了测试,日志文件系统的性能并不比 ext2 文件系统有太大的性能损失,有的日志文件系统由于采用 B+ 树算法,在操作一些大尺寸的文件时,性能反面比非日志文件系统的性能还要好。

    使用日志文件系统有什么好处?

    文件的安全提高了,文件被破坏的机率降低了,对磁盘的扫描时间缩短了,扫描次数减少了。当系统意外宕机后,不会再有文件内容的丢失,至少文件应该保持上一个版本的内容;采用日志文件系统,通常系统每重新启动 20 30 次后,才会对磁盘进行一次整体扫描,扫描次数减少了。

    Linux 操作系统下的日志文件系统

    XFS 文件系统: SGI xfs   http://oss.sgi.com/projects/xfs/

    JFS 文件系统: IBM jfs http://oss.software.ibm.com/developerworks/opensource/jfs/

    Reiserfs 文件系统: http://www.namesys.com

    EXT3 文件系统: http://www.zip.com.au/~akpm/linux/ext3/

    Vertas 文件系统: http://www.veritas.com/products/ …… roductId=filesystem