Linux,内核,如何挂载文件系统?这实际上是做什么的?

Meg*_*oma 6 filesystems

我的问题是关于 Linux 源代码,以及它是否真的包含本地安装、解析和使用文件系统所需的代码,或者是否已将其添加到源代码中。

如果 Linux 源代码包含通过文件系统等解析和访问/组织文件的代码,那么可以肯定地说文件系统由编码到 Linux 中的设备驱动程序控制,或者此过程是否因发行版、发布等

Linux如何使用其他存储设备上的文件系统访问文件,即用户空间程序如何访问proc、ext3、ext4等,ext3、ext4被认为是“设备驱动程序”,因为它们直接与硬件操作,还是我有错吗?

Gil*_*il' 11

内核中有一个组件(称为虚拟文件系统,简称 VFS),为所有文件系统提供通用接口。它了解文件类型(常规文件、目录、符号链接等)、元数据(时间、权限等)和文件内容等内容。

每个 Linux 进程都位于指定文件系统挂载位置的命名空间中。通常所有进程都位于同一个命名空间中;命名空间主要用于支持虚拟化。命名空间本质上是一组路径,每个路径都有一个内部文件系统引用。挂载和卸载包括更改该命名空间。

当进程访问文件时,VFS 组件根据进程的命名空间和当前目录解析路径,并确定文件位于哪个挂载点。然后,VFS 根据与挂载点关联的内部文件系统引用,将与文件相关的命令分派给适当的文件系统驱动程序。

将命令转换为数据存储或检索是文件系统驱动程序的工作。每种文件系统类型。大多数文件系统驱动程序不直接与硬件交互,而只与其他驱动程序交互。磁盘支持的文件系统(ext4、btrfs、vfat 等)的驱动程序将命令转换为块存储操作(从分区或其他块设备读取和写入扇区)。网络支持的文件系统(nfs、cifs 等)的驱动程序将命令转换为通过网络通道进行的通信。内部内核文件系统(proc、sysfs 等)的驱动程序独立工作。的FUSE文件系统驱动程序上的用户级过程转到该命令。


Ign*_*ams 6

对于每个文件系统,都有一个用 API 编写的驱动程序,Linux 的VFS在遇到存储在该类型文件系统上的对象时可以调用该 API 。这允许关于 Linux 的面向文件和文件系统的系统调用的整个目录层次结构的透明度(尽可能多,例如对 VFAT 没有权限,因此chown(2)将失败)。