首页 > 解决方案 > 如何在 macos 上实现虚拟文件系统?

问题描述

我已经看到一些应用程序能够在 MacOS 上的 Finder 中将自己表示为外部磁盘。通常,这些是云存储应用程序,例如PCloud DriveWD Discovery。我想知道他们是如何做到这一点的。

我意识到云存储可能只是实现了一些远程文件系统协议,例如 Samba 或 AFP。但我仍然不太明白应用程序如何将文件系统直接挂载到 Finder 中。此外,如果虚拟文件系统不依赖于网络存储,是否有更有效的方法来挂载它?

标签: macosfinderkernel-extensionvirtualfilesystem

解决方案


这是一个相当高级的问题,所以我将给出一个高级的答案。我不知道您列出的具体示例如何实现它,但这应该不难找到。

据我所知,选项如下:

  • 从根本上讲,您可以创建一个 VFS kext。这就是首先在 macOS 中实现对 HFS+、APFS、FAT、SMB、AFP 等的支持的方式。Kernel.framework 中的头文件主要是<sys/vnode.h><sys/vnode_if.h><vfs/vfs_support.h>。这为您提供了最大的权力,但也很困难,并且安装 kexts 的用户体验不断恶化。(除非用户做一些相当复杂的杂技,否则它们根本不会在 ARM64 Mac 上加载。)
  • MacFUSE 可以为您完成一些繁重的工作。一些许可问题,它又通过 kext 实现,因此 UX 问题也适用于此。
  • 使用NSFileProvider. 这适用于云风格的虚拟文件系统,但在某种程度上可以用于不同但相关的场景。
  • 实现一个网络文件系统服务器,然后使用 API 挂载。
  • 通过另一种方法(例如通过 DriverKit SCSI 控制器驱动程序或通过 iSCSI 目标)实现托管常规文件系统的块设备。仅当数据源可合理地表示为块设备时,这才真正有意义。

推荐阅读