Linux中虚拟文件系统简称VFS,是操作系统用来抽象不同文件系统的接口层。让用户可以以统一方式访问和操作各种文件系统,而不是关心底层的具体实现差异。VFS让linux支持多种文件系统如ext4、NTFS、FAT、XFS、NFS等提供一个统一接口用于管理文件和目录。
虚拟文件系统主要用途是提供一个抽象层,让不同文件系统可以在同一操作系统中协同工作。充当了内核和文件系统之间的中介。提供对硬盘、网络文件系统及其他类型存储介质的同意访问。
如抽象化文件系统,吧不同文件类型抽象成一致的接口,这样程序员不需要关心文件存储的底层细节。实现接口统一,用户和应用程序可以通过统一接口和文件系统交互,不需要关注底层文件系统不同。VFS支持linux系统挂在和访问多种不同类型的文件系统。比如同一台linux中挂在一个ext4分区、一个NTFS分区,甚至是一个通过NFS协议挂在的远程文件系统。
VFS是由一组核心数据结构和接口组成,提供了对文件系统的同意访问。VFS工作依赖的关键数据结构:
struct file:代表一个打开的文件。每次打开文件时,都会在内核中创建一个 struct file 实例,包含了文件的描述符、指针、读写位置等信息。
struct inode:代表文件系统中的一个文件或目录(inode 是文件系统的基本单位)。它存储了文件的元数据,如权限、大小、创建时间等,但不包括文件内容本身。
struct dentry:代表目录项。它包含了文件系统中的目录信息,用来定位文件或目录。
struct super_block:代表文件系统的一个超级块,它存储了关于文件系统的元数据,如文件系统类型、块大小、根目录等信息。
VFS工作流程大致是打开文件、对文件进行操作如读写、删除、重命名等。VFS会根据操作系类型和文件系统类型,调用相应文件系统驱动函数来执行,挂载文件系统,在系统启动时,VFS会通过super_block 加载文件系统的元数据,并使其成为系统的一部分。每个文件系统都会与一个挂载点相关联,VFS 会通过挂载点来管理不同文件系统的访问。
VFS提供文件的打开、关闭、读取、写入,文件权限和属性管理,文件路径分析,文件系统的挂在和卸载,文件系统缓存等。
VFS是linux内核重要部分,利用数据结构来提供抽象层,切支持多种文件系统。理解好VFS有利于更好理解linux文件系统架构,特别是用于开发和存储、文件访问相关应用中。