我刚刚在用户空间中遇到了一个 VFS 和一个文件系统,比如FUSE。
现在,据我了解,它模拟文件系统,以便应用程序可以具有标准的文件系统层次结构。但我不明白,为什么我们需要一个单独的文件系统呢?我们不能只创建一个常规的文件夹结构并放置应用程序将使用的文件吗?
所以,我的问题是:
什么是 VFS?
您能否给出一些真实世界的示例,使用 VFS 的用例。
使用 VFS 有什么好处?
任何基于 Java 的 VFS?
VFS 和 FUSE 是相关的,但并不完全相同。FUSE 的主要目的是将几乎像文件但不完全一样的东西(例如远程服务器上的文件或 ZIP 文件中的文件)转换为“真实的”目录和文件。查看FUSE 文件系统的花名册以了解这有什么好处;希望这可以更清楚地说明为什么 FUSE 在很多情况下都能胜过“普通旧文件”。
VFS 是文件的应用程序接口 (API)。如果您不熟悉 API 的概念,我建议您查看“虚拟文件系统”的 Wikipedia 页面;它从操作系统内核的角度描述了 VFS 是什么。是的,您的操作系统内核(无论是 Windows、Linux 还是 MacOS)都有 VFS!一些用户空间程序,例如 GNOME,也有一个(称为 GnomeVFS)。
VFS 的目的是以统一的方式将文件和目录呈现给应用程序;它们来自 CD-ROM、硬盘或 USB 记忆棒或 RAM 磁盘上的 Linux 或 Windows 文件系统,或者来自网络服务器。操作系统内核对 VFS 的使用可能是显而易见的。那为什么还有用户空间的,比如 GnomeVFS?答案是您不希望每个文件系统及其狗都驻留在内核中,因为这样的代码以超级用户权限运行,其中的任何错误都可能导致整个机器崩溃。当然,缺点是用户空间 VFS 只对使用它们的应用程序有用,例如只有 GNOME 应用程序可以“看到”GnomeVFS;不能在 GnomeVFS 树中执行“ls”。解决方案是 FUSE:它的确切目的和描述是将用户空间 VFS 变成内核 VFS。
VFS 不是指“假”文件系统,而是指 POSIX 操作系统向应用程序进程提供的抽象文件系统接口。例如:
open()
close()
read()
write()
所有文件系统实现(ext3、XFS、reiserfs 等)都在它们使用的任何特定结构和算法之上公开相同的接口。
FUSE 是一种为该接口提供不在内核中运行的代码的方法。这可以显着提高稳定性和安全性,因为内核代码具有特权,而用户空间代码则没有。这种分离使得编写具有大量外部依赖项的文件系统变得更加明智。FUSE 网页描述了许多使用 FUSE 构建的文件系统。