Linux

虚拟文件系统(Virtual Files System, VFS)是驻留在用户进程与各种类型的Linux文件系统之间的一个抽象接口层。VFS提供了访问文件系统对象的通用对象模型(比如索引节点、文件对象、分页缓存、目录条目,等等)和方法。它对用户进程隐藏了实现每个文件系统的差异。有了VFS,用户进程不需要知道系统使用的是哪一个文件系统,为每个文件系统运行哪一个系统调用

ext2

□ 超级块(Super Block)。 文件系统的信息存储在这里。超级块的精确副本被放置在每个块组的顶部。

□ 块组描述符(Block group descriptor)。 块组上的信息被存储在这里。

□ 数据块位图(Data block bitmaps)。 用于空闲数据块管理。

□ 索引节点位图(I-node bitmaps)。 用于空闲索引节点的管理。

□ 索引节点表(I-node tables)。 索引节点表存储在这里。每个文件有一个相应的索引节点表,其中保存了文件的元数据,比如文件模式、uid、gid、atime、ctime、mtime和到数据块的指针。

□ 数据块(Data blocks)。 实际的用户数据存储的位置。

要查找组成一个文件的数据块,首先要查找文件的索引节点。如果一个进程请求打开/var/log/messages,那么kernel会解析文件路径,搜索/(根目录)的目录条目,该目录条目中有它(根目录)下面文件和目录的信息。接下来内核可以找到/var的索引节点,并且查看/var的目录条目,该目录条目中也有/var下面文件和目录的信息。内核以此方式一直向下搜索直到找到文件的索引节点。Linux内核使用一个文件对象缓存,比如目录条目缓存或者索引节点缓存来加速查找符合条件的索引节点。

一旦Linux内核找到了文件的索引节点,它会试图找到实际的用户数据块。正如前面描述的,索引节点有到数据块的指针。通过它,内核可以得到数据块。对于大文件,Ext2实现数据块直接/间接的引用。图1-17说明了以上描述的工作过程。