文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构; 即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。 因此,可以说"我有2个文件系统"意思是他有2个分区,一个存文件,或他用 "扩展文件系统",意思是文件系统的种类。
磁盘或分区和它所包括的文件系统的不同是很重要的。 少数程序(包括最有理由的产生文件系统的程序)直接对磁盘或分区的原始扇区进行操作; 这可能破坏一个存在的文件系统。 大部分程序基于文件系统进行操作,在不同种文件系统上不能工作。
一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。
大部分UNIX文件系统种类具有类似的通用结构,即使细节有些变化。 其中心概念是超级块superblock, i节点inode, 数据块data block,目录块directory block, 和间接块indirection block。 超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。 i节点包括除了名字外的一个文件的所有信息,名字与i节点数目一起存在目录中, 目录条目包括文件名和文件的i节点数目。 i节点包括几个数据块的数目,用于存储文件的数据。 i节点中只有少量数据块数的空间,如果需要更多,会动态分配指向数据块的指针空间。 这些动态分配的块是间接块;为了找到数据块,这名字指出它必须先找到间接块的号码。
UNIX文件系统通常允许在文件中产生孔(hole) (用lseek ; 请看手册), 意思是文件系统假装文件中有一个特殊的位置只有0字节,但没有为这文件的这个位置 保留实际的磁盘空间(这意味着这个文件将少用一些磁盘空间)。 这对小的二进制文件经常发生,Linux共享库、一些数据库和其他一些特殊情况。 (孔由存储在间接块或i节点中的作为数据块地址的一个特殊值实现,这个特殊地址说明 没有为文件的这个部分分配数据块,即,文件中有一个孔。)
孔有一定的用处。在笔者的系统中,一个简单的测量工具显示在200MB使用的磁盘空间中, 由于孔,节约了大约4MB。在这个系统中,程序相对较少,没有数据库文件。有关这个测 量工具的细节请看附录 A.