为什么Samba需要VFS模块?

为什么Samba需要VFS模块?

在此输入图像描述

学习桑巴舞时看到这张图。我对这张图片中的 VFS 模块感到困惑。

  1. 为什么我们在 samba 服务器中需要这个 VFS 模块,而不是直接将预期的系统调用传递给 C 库?我知道在客户端我们需要 cifs.ko 或 smbfs 以便内核了解已安装的文件系统。

    例如,当客户端想要读取文件时。它通过网络将相应的协议命令传递给服务器。服务器的以太网卡将接收它并传输到应用层。然后应用层的CIFS协议会解释这个命令并将其传递给c库,最终导致sys_read()系统调用。在这个过程中,VFS 似乎是不必要的。

  2. 这个模块是强制性的吗?如果没有,如何检查是否已编译?

谢谢

补充:

该图旨在描述smbd进程架构。它想表达的是smbd具有多进程、单线程的架构。我在一篇比较 Samba 3.0 和另一个名为 Sametime 的 CIFS 服务器的文章中看到了这一点。

答案1

/var/samba/share1/dir/file4 小时没有任何答案,所以我将添加我的猜测:这可能是一个将物理路径(如)转换为逻辑路径( )的层share1\dir\file,以及必要的文件名转换、权限检查等。因此,这是必要的而不是可选的。

协议实现本身可能已经在逻辑路径上运行,并且简单地将它在 VFS 中找到的任何内容放到线上。

答案2

目前尚不完全清楚该图的含义。但Linux中的所有文件系统调用都是由VFS处理的。从这个意义上说,VFS为系统调用提供服务的内核部分。但和你一样,我不确定为什么该图显示 VFS 进行阻塞系统调用。

但你的解释也不正确。如果您所说的客户端是指应用程序层的某些东西,那么 Samba 应该是透明的。它只是认为它正在访问另一个文件系统,并将使用标准系统调用来执行此操作(即通过 VFS)。然后内核将通过网络路由这些调用。

答案3

我认为 VFS 模块扩展了 posix 文件系统的功能。

https://www.samba.org/samba/docs/man/Samba-Developers-Guide/vfs.html

例如,对特定文件系统的扩展属性的支持是可选的。但是您可以选择性地启用/禁用它。

答案4

VFS 模块是一个抽象层,为不同的文件系统实现提供一致的接口。

虚拟文件系统

A虚拟文件系统(VFS)或虚拟文件系统开关是更具体的文件系统之上的抽象层。 VFS 的目的是允许客户端应用程序以统一的方式访问不同类型的具体文件系统。例如,VFS 可用于透明地访问本地和网络存储设备,而客户端应用程序不会注意到差异。 ...

SAMBA 和所有用户空间进程都需要 VFS 模块才能访问实际的文件系统。

相关内容