Electronic Joint Business

Solution for E-Business

了解Linux操作系统 (三) Linux文件系统

文章评分: 作为开源操作系统,Linux 一个很大优势就是支持多种文件系统。现代 Linux 内核几乎支持计算机系统曾使用过每一款文件系统,从基本的FAT到诸如JFS(Journaling File System)之类的高性能文件系统。不过,因为Ext2、Ext3和ReiserFS是大多数 Linux 发行版的原生文件系统(ReiserFS只有使用在Novell SUSE Linux上才能获得商业支持),所以在本文中我们主要了解这些文件系统的有关特性,其它鲜少使用的文件系统只略作说明。关于文件系统和硬盘子系统,参见 “调优硬盘子系统” 虚拟文件系统 VFS 虚拟文件系统VFS它是内核的一个子系统,提供了一个通用文件系统模型,该模型囊括了所能见到的文件系统常用功能和行为,并为应用程序提供一致性的文件系统接口,安装的所有物理文件系统不但依赖于VFS共存,而且也依靠VFS协同工作。 虚拟文件系统位于用户进程与各种Linux文件系统之间,作为一个抽象接口层,它提供用于访问文件系统对象的通用对象模型(如i-node、文件对象、页缓存、目录条目等等)和方法,对于用户进程来说,它屏蔽了文件系统之间的差异。用户进程不需要知道使用的是哪个文件系统,也不需要了解不同的文件系统需要呼叫哪个系统调用。 图14 阐明了VFS的概念。 日志记录 对于没有日志记录的文件系统来说,执行读写操作时,内核首先会更改文件系统的元数据,然后才写入实际的用户数据。这样的操作有时对于数据完整性会产生很高的风险。当对文件系统元数据进行写操作时系统突然崩溃,文件系统的一致性很可能遭到破坏。在下次重启时,fsck通过检查所有的元数据来查找不一致的地方,然后重启时来修复一致性。如果系统容量很大时,这一过程需要很长的时间才能完成。而在这期间,系统是不可用的。 有日志记录的文件系统可以通过在数据写入实际文件系统前先将变更的数据写入日志区(Journal Area)来解决这个问题。日志区可以被放置于文件系统中也可被放置于文件系统之外。被写入日志区的数据被称作日志记录(Journal Log)。它包含文件系统元数据的变化和实际的文件数据(如果支持)。 因为日志记录在写入实际用户数据到文件系统前需要写入日志记录,相对于没有日志记录的文件系统这会导致性能上的开销。维护数据的高一致性会牺牲多少的性能开销,取决写入用户数据前有多少信息需要写入硬盘。我们将在“Ext3”一节中讨论此问题。 Ext2 Ext2是Ext3文件系统的前身,一个快速、简单的文件系统。和现在其它大多数文件系统不同,它并没有日志功能。 图1-16向我们展示了Ext2文件系统的数据结构。文件系统以引导扇区开始,紧接着是块组(Block Group)。一个块组是由下面几项组成: Super block :存储文件系统信息,比如文件系统类型、大小、状态等等。Super block必须位于每个块组的顶部。 Block group descriptor:存储块组的相关信息。 Data block bitmaps:用于管理未使用的数据块。 i-node bitmaps:用户管理未使用的i-node。 i-node tables:存储i-node表。每个文件都有一个相应的i-node表,用来保存文件的元数据如:文件模式、uid、gid、atime、ctime、mtime、dtime和数据块的指针。 Data blocks:存储实际的用户数据。 为了提高性能,整个文件系统被分成许多小的块组,因为i-node表和存储用户数据的数据块(Data Block)可以在磁碟片上紧挨着存储,大大减少了寻道的时间。 为了查找组成文件的数据块,内核首先会找到文件的i-node。当一个进程请求打开/var/log/messages时,内核解析文件路径并查找/(根目录)的目录项,获得其下的文件及目录信息。下一步内核继续查找/var的i-node并查看/var的目录项,它也包含其下的文件及目录信息。内核继续使用同样的方法直到找到所要文件的i-node。Linux内核使用文件对象缓存如目录项缓存或i-node缓存,来加快查找相应i-node的速度。 当Linux内核找到文件的i-node后,它将尝试访问实际的用户数据块。正像我们所讲述的,i-node保存有数据块的指针。通过指针内核可以获得数据块。对于大文件,Ext2提供了直接/间接的数据块引用。图1-17描绘了其是怎样运作的。 文件系统结构和文件访问操作因文件系统的不同而千差万别,因而每个文件系统都各具特色。 Ext3 现在的Linux企业发行版中都支持 EXT3 文件系统, 它是广泛使用的 EXT2 […]

, , ,

Comments are currently closed.