虚拟文件系统?VFS!

2020-06-16

对虚拟文件系统不是很懂,但又很想懂。怎么办?学啊!网络是朋友,文档是老师。gogogo…

  • Linux中允许众多不同的文件系统共存,如ext2,ext3,vfat等;
  • 通过使用同一套文件I/O系统调用即可对Linux中的任意文件进行操作,而无需考虑其所在的具体文件系统格式;
  • 更进一步,对文件的操作可以跨文件系统而执行。我们可以使用cp命令从vfat文件系统格式的硬盘拷贝数据到ext3文件系统格式的硬盘;
  • 而这样的操作,涉及到两个不同的文件系统。

1

“一切皆是文件”是unix/linux的基本哲学之一。不仅普通的文件、目录、字符设备、块设备、套接字等在unix/linux中都是以文件被对待;她们虽然类型不同,但是对其提供的却是同一套操作界面!

2

是怎么实现这一特性的呢?虚拟文件系统!virtual file system,简称VFS。是Linux内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时也提供了内核中的一个抽象功能,允许不同的文件系统共存。系统中的所有文件系统不但依赖VFS共存,而且也依靠VFS协同工作。

但,VFS又是怎么来统一的的呢?

为了能够支持各种实际文件系统,VFS定义了所有文件系统都支持的基本的、概念上的接口和数据结构;同时实际文件系统也提供VFS所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式上与VFS的定义保持一致。

换句话说,一个实际的文件系统想要被Linux支持,就必须提供一个符合VFS标准的接口,才能与VFS协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS层和内核的其他部分看来,所有文件系统都是相同的。

3

可见,正是由于在内核中引入了VFS,跨文件系统的文件操作才能实现,“一切皆文件”的口号才得以承诺。

但貌似,我还是没明白虚拟文件系统是怎么操作的?我只知道多了一个抽象层,来隐藏了具体文件系统的实现细节。可能我还得了解一些基本概念!