14 个版本
0.6.1 | 2023年9月19日 |
---|---|
0.6.0 | 2022年7月12日 |
0.5.1 | 2020年8月17日 |
0.5.0 | 2019年5月11日 |
0.3.0 | 2017年2月1日 |
#225 in 文件系统
每月下载 241 次
在 5 个 Crates 中使用 (直接使用 4 个)
65KB
1.5K SLoC
FUSE-MT
此代码是对 Rust FUSE crate 的封装,增加了以下功能
- 在多个线程上调度系统调用,例如,I/O 不会阻塞目录列出。
- 将inode转换为路径,以简化文件系统实现。
fuser
crate 提供了对 FUSE 内核 API 的最小、低级访问,而此 crate 则更高级,类似于 FUSE C API。
它包括一个示例文件系统,该文件系统使用此 crate 将所有系统调用传递给任意路径的另一个文件系统。
这是一个正在进行中的项目。欢迎提交错误报告、拉取请求和其他反馈!
关于实现的一些随机笔记
- 文件系统将实现的特质称为
FilesystemMT
,并且与 FUSE crate 传统的无返回值方法和包含“回复”参数不同,这些方法返回它们的值。这对我来说感觉更自然。它们还接受&Path
参数而不是inode数字。 - 目前,以下调用被调度到其他线程
- 读取
- 写入
- 刷新
- fsync
- 其他调用在主线程上同步运行,因为它们预计会很快完成,或者它们需要修改 InodeTranslator 的内部状态,我希望避免在那里需要加锁。
- inode/path 转换始终在主线程上执行。
- 限制并发读/写操作的数量可能是一个好主意。我还没有确定 FUSE 会发出多少个挂起的读/写请求,所以这可能不是一个问题。
依赖关系
~1.8–2.8MB
~48K SLoC