首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

快速了解虚拟文件系统VFS

前言 为什么 Linux 内核的文件系统类型那么多,都能挂载上呢?为什么系统里可以直接 mount 其他文件系统呢?...甚至能把 windows 下的文件夹挂载到 windows 上,为什么 Linux虚拟文件系统这么强大?这得益于它的数据结构设计得十分精妙。好像听过,Linux 有什么解决不了的?加一层。...VFS 是什么 虚拟文件系统,简称 VFS(Virtual Filesystem),是一个内核软件层。...VFS 的作用 概括地讲,VFS 有两个作用: 处理与 Unix 标准文件系统相关的所有系统调用 为各种文件系统提供一个通用的接口 VFS 支持的文件系统类型 以下列出以下常见的文件系统类型,本文暂时不对其进行详细分析...关键数据结构介绍 Linux VFS 抽象出 4 种类型的数据结构,实现将不同类型的文件系统挂载到目录结构中。

2K20

解析Linux中的VFS文件系统文件系统的注册(二)

文件系统的注册 这里的文件系统是指可能会被挂载到目录树中的各个实际文件系统,所谓实际文件系统,即是指VFS 中的实际操作最终要通过它们来完成而已,并不意味着它们一定要存在于某种特定的存储设备上。...比如在笔者的 Linux 机器下就注册有 "rootfs"、"proc"、"ext2"、"sockfs" 等十几种文件系统。...3.1 文件系统的数据结构 在 Linux 源代码中,每种实际的文件系统用以下的数据结构表示(include/linux/fs.h): 1 struct file_system_type { 2... 在众多的实际文件系统中,之所以单独介绍 rootfs 文件系统的注册过程,实在是因为该文件系统 VFS 的关系太过密切,如果说 ext2/ext3 是 Linux 的本土文件系统,那么 rootfs...文件系统则是 VFS 存在的基础。

1.9K60
您找到你想要的搜索结果了吗?
是的
没有找到

Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

二、VFS 虚拟文件系统 Linux支持各种各样的文件系统格式,如 ext2、 ext3、 reiserfs、 FAT、 NTFS、 iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式...Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统VFS,Virtual File...VFS 是应用程序和具体的文件系统之间的一个层。不过,在某些情况下,一个文件操作可能由VFS 本身去执行,无需调用下一层程序。...从某种意义上说,可以把VFS 看成“通用”文件系统,它在必要时依赖某种具体的文件系统。 ?...对于 ext2文件系统来说,在磁盘存储布局上也有 inode和超级块的概念,所以很容易和 VFS中的概念建立对应关系。

75720

Linux 虚拟文件系统

虚拟文件系统介绍 Linux使用了虚拟文件系统(VFS,Virtual Filesystem,下文统称“虚拟文件系统”),它不是磁盘文件的组织格式,而是抽象出来的文件树的集合,它通过标准接口动态的向其中增加或移除对应的目录...VFS最终的转写入不同的文件系统,再通过文件系统的驱动最终写入硬件设备。...vfs.png 虚拟文件系统对象类型 虚拟文件系统,有四个主要对象类型: Superblock 表示特定加载的文件系统 Inode 表示特定的文件 Dentry 表示一个目录项,路径的一个组成部分...File 虚拟文件系统最后一个主要对象是文件对象,文件对象表示进程已打开的文件。如果我们站在用户空间的角度考虑虚拟文件系统 ,文件对象会首先进入我们的视野。...94%E2%80%94VFS/

1.5K51

解析Linux中的VFS文件系统文件系统的来源与简介(一)

最近挂载了N多的文件系统,大致了不同文件系统的相应特性及挂载方式,却还是对Linux文件系统没有从源码方面去了解。不求甚解确实不好不好。...于是借鉴一些大牛的博客及自己的理解,总结了博客系列: 一、VFS是什么: VFSLinux中的一个虚拟文件文件系统,也称为虚拟文件系统交换层(Virtual Filesystem Switch),是一种软件机制...等); (2)通过系统调用到VFS到实际文件系统的操作。...二、文件系统种类: (1)基于磁盘的文件系统; (2)网络文件系统(NFS); (3)伪文件系统(sysfs、proc); VFS 目录树结构: ?...Reference: https://www.ibm.com/developerworks/cn/linux/l-vfs/ 在链接中,文章选用的是Linux2.4.20,我选择Linux3.4.2来分析源码

2.1K90

Ext2文件系统布局,文件数据块寻址,VFS虚拟文件系统

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程中的一些概念性问题...二、VFS 虚拟文件系统 Linux支持各种各样的文件系统格式,如 ext2、 ext3、 reiserfs、 FAT、 NTFS、 iso9660等等,不同的磁盘分区、光盘或其它存储设备都有不同的文件系统格式...Linux内核在各种不同的文件系统格式之上做了一个抽象层,使得文件、目录、读写访问等概念成为抽象层的概念,因此各种文件系统看起来用起来都一样,这个抽象层称为虚拟文件系统VFS,Virtual File...VFS 是应用程序和具体的文件系统之间的一个层。不过,在某些情况下,一个文件操作可能由VFS 本身去执行,无需调用下一层程序。...从某种意义上说,可以把VFS 看成“通用”文件系统,它在必要时依赖某种具体的文件系统。 ?

1.7K01

Linux虚拟文件系统初探

什么是VFS?...Linux内核使用工厂的设计模式抽象出实际文件系统统一接口,这个就是虚拟文件系统(VFS),根据应用程序调用虚拟文件系统接口,根据不同的文件系统类型(xfs/zfs/ext4)来调用实际文件系统的接口...VFS自身仅仅存在于内存,VFS自身定义了几个重要的数据结构:inode、dentry、super_block,通过这几个重要的结构将真实硬盘的文件系统抽象到内存,通过dentry、inode这几个对象来进行文件的读写操作...// linux 5.4.85/include/linux/fs.h 取出super_block核心字段 struct super_block { // 文件系统块大小 unsigned long...文件系统中的dentry就是反应这里的树状关系 在linux中每个文件都有一个dentry,这个dentry链接到上层目录的dentry.根目录有一个dentry结构,根目录中的文件和目录的dentry

73220

VFS- 内核是如何抽象文件系统

Linux 当中文件系统千奇百种,比较常见的有 EXT3、EXT4,还有基于内存的 ramfs、tmpfs 和基于网络的 nfs,和基于用户态的 fuse,当然 fuse 应该不能完全的文件系统,只能算是一个能把文件系统实现放到用户态的模块...这个 wiki 上列出了很多 Linux文件系统类型。...对于这些文件系统Linux 做了一层抽象就是 VFS 虚拟文件系统,这个其实就是软件设计必然的过程,对于不同的实现规定统一的接口,也就是定义与实现分离,如果想要自己实现一个文件系统的话只要实现一个满足...VFS 层的文件系统就能加入到内核当中。...这是文件系统本身这个结构在操作系统里的组织结构,接下来分析文件系统满足 VFS 要包含哪些内容。

1.7K30

细说|Linux虚拟文件系统原理

虚拟文件系统简介 为了实现 一切对象皆是文件 这个目标,Linux 内核提供了一个中间层:虚拟文件系统(Virtual File System)。...今天,我们就来介绍虚拟文件系统的原理与实现。 虚拟文件系统原理 在阐述虚拟文件系统的原理前,我们先来介绍一个 Java 例子。通过这个 Java 例子,我们能够更容易理解虚拟文件系统的原理。...虚拟文件系统原理 上面的 Java 例子已经大概说明虚拟文件系统的原理,但由于 Linux 是使用 C 语言来编写的,而 C 语言并没有接口这个概念。...调用过程如下: 2. file_operations结构 底层文件系统需要实现虚拟文件系统的接口,才能被虚拟文件系统使用。...正是有了 虚拟文件系统Linux 才能支持各种各样的文件系统

1.2K10

深入理解Linux VFS和Page Cache

编者注:在分析完 Linux inode 基础概念 之后,让我们看下inode在内存中对应的文件系统抽象VFS,然后分析下关于 磁盘操作 中Page Cache的回写策略。...VFS虚拟文件系统层) VFS虚拟文件系统层(进程与文件系统之间的抽象层),与它相关的数据结构只存在于物理内存当中。...其目的是屏蔽下层具体文件系统操作的差异,为上层的操作提供一个统一接口,正是由于VFS的存在,Linux中允许多个不同的文件系统共存。...VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的Inode、各种操作函数的转换入口等。...LinuxVFS依靠四个主要的数据结构来描述其结构信息,分别为超级块、索引结点、目录项和文件对象,这些数据结构大都会与磁盘上的对应上。 超级块(Super Block):超级块对象表示一个文件系统

2.9K21

虚拟文件系统

这样的好处是,用户不用关心使用了什么文件系统,只需要使用统一的方式去处理文件即可。那么Linux是如何做到的呢?这就得益于 虚拟文件系统(Virtual File System,简称 VFS)。...虚拟文件系统 为不同的文件系统定义了一套规范,各个文件系统必须按照 虚拟文件系统的规范 编写才能接入到 虚拟文件系统中。...VFS 主要为用户和内核架起一道桥梁,用户可以通过 VFS 提供的接口访问不同的文件系统,如下图: ? 下面我们开始分析 虚拟文件系统 的实现原理。...虚拟文件系统抽象数据结构 Linux奉行了Unix的理念:一切皆文件,比如一个目录是一个文件,一个设备也是一个文件等,因而文件系统Linux中占有非常重要的地位。...注册文件系统 Linux为了支持不同的文件系统而创造了虚拟文件系统虚拟文件系统更像一个规范(或者说接口),真实的文件系统需要实现虚拟文件系统的规范(接口)才能接入到Linux内核中。

1.5K30

Linux内核设备驱动之虚拟文件系统笔记整理

/******************** * 虚拟文件系统VFS ********************/ (1)VFS介绍 虚拟文件系统VFS作为内核的子系统,为用户空间程序提供了文件系统的相关接口...VFS使得用户可以直接使用open()等系统调用而无需考虑具体文件系统和实际物理介质。 VFS提供了一个通用的文件系统模型,该模型囊括了我们所能想到的文件系统的常用功能和行为。...a.调用模型 write(): 用户空间 –> sys_write(): VFS –> 文件系统的写方法: 文件系统 –> 物理介质 (2)VFS采用的主要对象 VFS采用了面向对象的思路,采用一组数据结构来代表通用的文件对象...VFS中包括了四个主要的对象类型。 a.超级块对象super_block 所有文件系统都必须实现超级块,该对象用于存储特定文件系统的信息,通常存储在磁盘的特定扇区中,每个文件系统只有一个超级块。...对于不基于磁盘的文件系统,比如基于内存的文件系统sysfs,linux会在使用现场创建超级块并将其保存到内存中。 超级块的结构体为super_block,定义在。

2.1K20

从 lsof 开始,深入理解Linux虚拟文件系统

要了解这些,就要先弄清楚并不容易,下面将从一些基本概念入手,一步步将这些梳理清楚: 什么是虚拟文件系统VFS:virtual filesystem)? 什么是通用文件模型?...object) 目录项对象(dentry object) 文件的概念 文件的表达 内存表达 磁盘表达 目录树的构建 软链接 vs 硬链接 文件 & 磁盘管理 索引节点状态 文件 & 进程管理 操作:打开&删除 虚拟文件系统...图片 所有与文件相关的操作的入口都是虚拟文件系统VFS),而非特定的额文件系统(如Ext3、ReiserFS和NFS)。VFS 提供了系统库和特定文件系统之间的接口。...因此,VFS 不仅充当抽象层,而且实际上它提供了一个文件系统的基本实现,可以由不同的实现来使用和扩展。因此,要了解文件系统是如何工作的,就要先了解VFS 。...目录树 综合来说,Linux 的 根文件系统(system’s root filessystem) 是内核启动mount的第一个文件系统

38310

从 lsof 开始,深入理解 Linux 虚拟文件系统

虚拟文件系统(virtual filesystem) 下图显示了Linux操作系统中负责文件管理的基本组件。上半区域为用户模式,下半区域为内核模式。...所有与文件相关的操作的入口都是虚拟文件系统VFS),而非特定的额文件系统(如Ext3、ReiserFS和NFS)。VFS 提供了系统库和特定文件系统之间的接口。...因此,VFS 不仅充当抽象层,而且实际上它提供了一个文件系统的基本实现,可以由不同的实现来使用和扩展。因此,要了解文件系统是如何工作的,就要先了解VFS 。...目录树 综合来说,Linux 的 根文件系统(system's root filessystem) 是内核启动mount的第一个文件系统。...start_kernel   vfs_caches_init     mnt_init       init_rootfs // 注册rootfs文件系统       init_mount_tree

1.3K40

Linux存储栈

前言: 随着Linux的版本升高,存储栈的复杂度也随着增加。作者在这里简单介绍目前Linux存储栈。...2,vfs vfs的主要作用就是抽象,各种各样的文件系统都有各自的实现,但是用户态的读写始终就是read,write,readv,writev,pread,pwrite等等几个API。...如上图,尽管后端、驱动、层次各不相同,但是经过vfs的抽象,都成了“文件”。 3,virtio-blk 第一条蓝色的路径。在图中示例,使用裸数据的方式访问,没有经过文件系统,直接到了块层。...用户使用裸数据的方式访问,经过vfs,并不需要具体的文件系统处理,vfs把请求转到通用块层,块层继续把请求转成scsi请求,scsi generic layer继续向下请求,最后通过PCI协议出来请求数据...7,网络文件系统 例如上图的第五条深绿色的路径,/mnt/nfs是使用nfs来mount的。 用户请求经过vfsvfs并不会把请求交给通用块层,而是转发到socket。

5.2K132

吴锦华 明鑫 : 用户态文件系统 ( FUSE ) 框架分析和实战

FUSE官网: https://github.com/libfuse/libfuse FUSE实现机制分析 在这个章节,我们首先对于虚拟文件系统做一个简单介绍,Linux下的文件系统都依赖于虚拟文件系统...[1508138698498_4052_1508138723355.jpg]虚拟文件系统介绍(VFSLinux支持ext,ext2,xia,minix,umsdos,msdes,fat32 ,ntfs...对于用户来说,我们不要去关心不同文件系统的具体操作过程,而只是对一个虚拟的文件操作界面来进行操作,这个操作界面就是 Linux虚拟文件系统(VFS ) 。...在 Linux 的内核文件中,VFS 和具体的文件系统程序都放在 Linux\FS 中,其中每一种文件系统对应一个子目录,另外还有一些共用的 VFS 程序。...VFS 使 Linux 同时安装、支持许多不同类型的文件系统成为可能。VFS 拥有关于各种特殊文件系统的公共界面,如超级块、inode、文件操作函数入口等。

8.2K32

文件系统考古4:如何支持多个文件系统

两个抽象概念 Steven 研究了文件系统的各种操作,决定将他们抽象为两个概念: vfs虚拟文件系统,代表文件系统 vnode,虚拟 inode,代表文件 vfs虚拟文件系统,它提供统一的接口,使操作系统可以以一致的方式访问不同的文件系统...它包含 struct *vnodeops 指针,作为 vfs 的一部分,有指针 struct *vfs 指向文件系统实例。...lookuppn 函数会跟随这个指针,并调用 vfs 的根函数,以获取该文件系统的根 vnode,替换当前正在处理的 vnode。...在 Linux 系统中 通过查看 Linux 内核源代码,我们可以找到 Kleiman 设计的总体结构,尽管 Linux 内核的复杂性和丰富性掩盖了其中大部分内容。...Linux 内核拥有丰富的文件系统类型,并且还添加了许多在 40 年前的 BSD 中不存在的功能。

20730

深入理解Linux Kernel内核整体架构(图文详解)

VFS(Virtual File System),虚拟文件系统。...3.4 虚拟文件系统(Virtual Filesystem, VFS)传统意义上的文件系统,是一种存储和组织计算机数据的方法。...而为了兼容,操作系统或者内核,要以相同的表现形式,同时支持多种类型的文件系统,这就延伸出了虚拟文件系统VFS)的概念。...VFS的功能就是管理各种各样的文件系统,屏蔽它们的差异,以统一的方式,为用户程序提供访问文件的接口。...Linux内核就是这样做的,除了传统的磁盘文件系统之外,它还抽象出了设备文件系统、内存文件系统等等。这些逻辑,都是由VFS子系统实现。 VFS子系统包括6个子模块(见下图),它们的功能如下: 1.

1.8K20

linux系统组成及结构

由于 Linux 支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统....虚拟文件系统(VirtualFileSystem,VFS):隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统...虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。...虚拟文件系统VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。...在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。

1.5K20
领券