11 个版本
使用旧的 Rust 2015
0.3.1 | 2017年11月8日 |
---|---|
0.3.0 | 2017年1月6日 |
0.2.8 | 2016年7月30日 |
0.2.7 | 2015年9月8日 |
0.2.0 | 2014年12月24日 |
#1158 in 文件系统
4,690 每月下载量
在 19 个 Crates 中使用 (17 个直接使用)
110KB
2K SLoC
Rust FUSE - 用户空间文件系统
关于
这个库不仅提供了绑定,实际上是对原始 FUSE C 库的改进重写,以充分利用 Rust 的架构。
文档
详情
一个工作的 FUSE 文件系统由三个部分组成
- 作为文件系统注册并在与用户空间进程通信的通信通道中转发操作的内核驱动程序。
- 帮助用户空间进程与内核驱动程序建立和运行通信的用户空间库 (libfuse)。
- 实际处理文件系统操作的本地实现。
内核驱动程序由 FUSE 项目提供,本地实现需要由开发人员提供。这个 Rust 库提供了这两个之间的替代品。这样,开发人员就可以在 Rust 中构建 FUSE 文件系统时充分利用 Rust 的类型接口和运行时特性。
除了单个设置(挂载)函数调用和最终的拆解(卸载)函数调用到 libfuse 之外,所有操作都在 Rust 中运行。
依赖关系
要运行挂载 FUSE 文件系统的程序,目标系统需要正确安装 FUSE(macOS 上的 OSXFUSE)。也就是说,需要内核驱动程序和库。某些平台可能还需要用户空间工具,如 fusermount
)。在 Linux 上,默认安装包 fuse
或者在 macOS 上安装 OSXFUSE
通常足够。
要构建,主机系统需要安装 FUSE 库和头文件。在 Linux 上,该软件包通常称为 libfuse-dev
。在 macOS 上,OSXFUSE
会安装所需的一切。构建过程还需要 pkg-config
来定位头文件和库。
用法
将以下内容放入您的 Cargo.toml
[dependencies]
fuse = "0.3"
并在您的 crate 根目录下
extern crate fuse;
要创建一个新的文件系统,实现Filesystem
特性。内核中的文件系统操作被调度到Filesystem
特性的方法中。大多数方法都有一个reply
参数,必须使用它来最终回答请求。所有方法都有默认实现,返回中性答案,因此如果您根本不实现任何方法,您仍然会得到一个什么也不做的可挂载文件系统。
实际上挂载文件系统时,将实现Filesystem
的对象和挂载点(现有)的路径传递给mount
函数。mount
将在文件系统未卸载之前不返回。
要挂载文件系统并继续运行其他代码,请使用spawn_mount
而不是mount
。 spawn_mount
会在挂载文件系统时启动一个后台线程来处理文件系统操作。它返回一个句柄,应存储以引用挂载的文件系统。如果丢弃句柄,则卸载文件系统。
要卸载文件系统,请使用您操作系统中的任何任意卸载/弹出方法。
请参阅示例目录以获取一些基本示例。
待办事项
还有很多事情要做。欢迎贡献力量。
- 尚未处理中断文件系统操作。
- 一个额外的更高级的API将会很棒。它应该提供路径名而不是inode号,并自动处理并发和中断(如FUSE C库的高级API)。
通常,请参阅GitHub上的问题列表,并在源文件中搜索包含"TODO"或"FIXME"注释的内容,以了解还缺少什么。
兼容性
在macOS上使用OSXFUSE和Linux上使用FUSE开发并测试,使用稳定版、测试版和夜间版Rust版本(有关详细信息,请参阅Travis CI)。
目前对FreeBSD上的FUSE的支持尚未测试(但可能经过少量调整即可正常工作)。
依赖关系
~0.8–1.1MB
~18K SLoC