VFS(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。
这是Linux文件系统对外的接口。任何要使用文件系统的程序都必须经由这层接口来使用它。
在Linux中,VFS采用的是面向对象的编程方法。
VFS文件系统的基本结构是dentry结构体与inode结构体。
Dentry代表一个文件目录中的一个点,可以是目录也可以是文件。
Inode代表一个在磁盘上的文件,它与磁盘文件一一对应。
Inode与dentry不一定一一对应,一个inode可能会对应多个dentry项。(hard link)Mount时,linux首先找到磁盘分区的super block,然后通过解析磁盘的inode table与file data,构建出自己的dentry列表与indoe列表。
需要注意的是,VFS实际上是按照Ext的方式进行构建的,所以两者非常相似(毕竟Ext是Linux的原生文件系统)。
比如inode节点,Ext与VFS中都把文件管理结构称为inode,但实际上它们是不一样的。Ext的inode节点在磁盘上;VFS的inode节点在内存里。Ext-inode中的一些成员变量其实是没有用的,如引用计数等。保留它们的目的是为了与vfs-node保持一致。这样在用ext-inode节点构造vfs-inode节点时,就不需要一个一个赋值,只需一次内存拷贝即可。
如果是非EXT格式的磁盘,就没有这么幸运了,所以mount非EXT磁盘会慢一些。