【摘要】:文件系统的管理核心是对文件块的管理。Linux支持众多文件系统,实际的文件系统块分配算法非常复杂,文件系统直接影响操作系统的稳定性和可靠性。Linux的文件系统可以大致分成非日志文件系统和日志文件系统。Linux系统启动的时候会使用fsck程序检查磁盘。Linux系统支持混合使用日志文件系统和非日志文件系统,通过笔者对常见的日志文件系统和非日志文件系统对比,日志文件系统比常见的ext2非日志文件系统并没有太大的效率损失。
文件系统通过把存储设备划分成块,然后以把文件分散存放在文件块的方式把数据存储在设备中。文件系统的管理核心是对文件块的管理。文件系统要维护每个文件的文件块分配信息,而且分配信息本身也要存储在存储设备上。不同的文件系统有着不同的文件分配和读取方法。
通常有两种文件系统分配策略:块分配(block allocation)和扩展分配(extention allocati on)。块分配是每当文件大小改变的时候重新为文件分配空间;扩展分配是预先给文件分配好空间,只有当文件超出预分配的空间时一次性为文件分配连续的块。
Linux支持众多文件系统,实际的文件系统块分配算法非常复杂,文件系统直接影响操作系统的稳定性和可靠性。Linux的文件系统可以大致分成非日志文件系统和日志文件系统。
1.非日志文件系统
日志是记录文件系统操作的手段,非日志文件系统不记录文件系统的更新操作。记录日志有很多优点,但是非日志文件系统通常也工作稳定。在某些情况下,非日志文件系统存在不少问题。如写入文件操作,首先是更新文件的磁盘分区占用信息meta-data,然后写入文件内容。如果恰巧在更新文件meta-data信息还没有写入文件内容的时候,机器发生意外断点情况,会造成严重后果。读取未写入完成的文件会造成数据不一致的结果。
Linux系统启动的时候会使用fsck程序检查磁盘。fsck程序根据/etc/fstab文件描述的文件系统检查文件系统的meta-data信息是有效的。系统关闭的时候仍然会调用fsck程序把所有文件系统的缓冲数据写入到物理设备,并确认文件系统被彻底卸载。
回到最初的问题,当发生断电的时候,文件系统缓冲区的数据很可能没有写回磁盘。重新启动机器后,fsck对磁盘进行扫描,验证数据的正确性,对千数据不一致的情况会尽力修复。检查文件系统要全面检查meta-data数据,需要很长时间,并且不是所有的数据都可以修复。fsck对千无法修复的文件会简单地删除或者另存为另一个文件。如果在一个文件密集的数据中心,会造成大量文件被破坏,如果是系统的重要文件很可能会造成系统无法启动。
以上介绍的都是非日志文件系统的风险。Linux系统支持许多非日志文件系统,许多发行版使用的ext2文件系统就是非日志文件系统,其他的还有FAT、VFAT、HPFS、NTFS等文件系统。(www.chuimin.cn)
2.日志文件系统
日志文件系统是在传统的非日志文件系统上加入了记录文件系统操作日志功能。日志文件系统的设计思想是把文件系统的操作写入日志记录,在磁盘分区保存日志记录。使用日志文件系统最大的好处是可以在系统发生灾难,如掉电的时候,最大限度保证数据的完整性。
对日志文件系统的文件做写操作之前,首先是操作日志文件。如果恰巧发生断电故障,重新启动计算机后,fsck程序会根据日志记录恢复发生故障前的数据。使用日志文件系统后,文件系统所有操作都会记录到日志。系统每间隔一段时间会把更新后的meta-data和文件内容从缓冲区写入磁盘。与非日志文件系统不同的是,在更新meta-data之前,系统仍然会向日志文件写入一条记录。
日志文件系统每次更新meta-data和文件数据都需要写同步,这些操作需要更多的I/O操作,无形中增大了系统开销。尽管如此,日志文件系统仍然提高了文件和数据的安全性。从全局来看,日志文件系统的优点还是大千缺点的。使用日志文件系统,当计算机出现故障的时候能最大限度地保护文件数据。计算机重新启动后可以防止fsck程序对文件造成的破坏,也缩短了文件系统出错的扫描时间。
Linux系统支持混合使用日志文件系统和非日志文件系统,通过笔者对常见的日志文件系统和非日志文件系统对比,日志文件系统比常见的ext2非日志文件系统并没有太大的效率损失。有的日志文件系统采用了B+树算法,在操作大尺寸文件时,性能很可能比非日志文件系统还要好。
目前Linux支持的日志文件系统主要有:在ext2基础上开发的ext3文件系统;根据面向对象思想设计的ReiserFS;从SGI IRIX系统移植过来的XFS;从IBM AIX系统移植过来的JFS。其中ext3完全兼容ext2,其磁盘结构和ext2完全一样,只是加入日志技术。后三种文件系统广泛使用了B+树以提高文件系统的效率。
相关推荐