简单来说,文件系统就是用来管理文件和磁盘的,是用户文件和磁盘之间的桥梁。要管理磁盘,文件系统必须有管理规则。所有的管理首先要分组,或者条带化,然后分组组织管理。划分的粒度是多少?通常,磁盘在逻辑上是以4KB为单位进行划分的,一个4k称为一个块。文件系统以块为最小管理单位进行磁盘管理。最小的管理单元划分后,需要重新分组。哪些块被分配到一个组中来做一件事情,或者一个组中可能只有一个块。这些组分别做什么?首先想到的是有一个存放文件的组,这个组叫做datablock。除了存储文件之外,还有一组用于存储文件的大小、创建时间、文件存储在哪个块等信息。这些信息称为元数据,这一组称为inode。此外,还必须有一个组来记录磁盘的整体情况,比如磁盘的大小、inode的大小等,这个组称为superblock。有几组磁盘抽象:bootblock、superblock、inodes、datablock。bootblock与引导有关,这里的文件系统与它关系不大。我们先来看看超级块。superblocksuperblock包含了文件系统的元数据,文件系统中有多少个inode和datablock,表示文件系统类型的magicnumber等都记录在superblock中。如何查找文件要查找存储在数据块中的文件,需要一个地方来记录文件的位置。记录文件位置的东西叫做索引节点(indexnode)。所有的indes节点都放在一个地方,这个地方就是inode。因此,inode存储的是一段数据,每段数据对应datablock中的一个文件。除了有指向文件所在块的指针外,还包括文件的模式、大小、时间戳等。如何找到目录可以通过索引节点找到文件,也可以找到目录。如果索引节点中的模式是一个目录,则在指向的块中记录一个目录项(目录数据块)。目录项记录了目录中所有文件的名称和文件所在的索引节点号。这样就可以到inode中的index节点去查询文件和下一级目录了。综上所述,文件系统的种类很多,比如ext3、ext4、xfs等,它们的实现比较复杂,但是文件系统的原理却很简单,就是本文提到的基本要素:文件数据,inode用于查找文件,以及管理整个文件系统的superblock。现在的复杂文件系统就是源于这样的设计思想。稍后我们将介绍文件系统的设计细节。
