众所周知,文件系统是操作系统最为重要的一部分。每种操作系统都有自己的文件系统。文件系统直接影响着操作系统的稳定性和可靠性。
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
操作系统下的日志文件系统
转载于:https://blog.51cto.com/xqy1522/287048