axfs_vfs 技术文档
路径:
components/axfs_crates/axfs_vfs类型:库 crate 分层:组件层 / 可复用基础组件 版本:0.1.2文档依据:Cargo.toml、README.md、src/lib.rs、src/structs.rs、src/path.rs
axfs_vfs 是旧文件系统栈使用的 VFS trait 契约。它提供的不是完整的挂载与名字空间对象模型,而是一组足够让 ax-fs、axfs_ramfs、axfs_devfs 和格式适配层对接起来的最小接口集合。
1. 架构设计分析
1.1 设计定位
axfs_vfs 的设计非常克制:
- 它只定义文件系统与节点的基础操作接口。
- 它把“当前目录”“挂载点选择”“跨文件系统路径路由”等更高层逻辑留给
ax-fs去做。 - 它更像一个稳定的旧栈 ABI,而不是一个带运行时对象图的 VFS 内核框架。
因此,理解 axfs_vfs 的最好方式不是把它看成 Linux VFS 的缩影,而是把它看成“旧栈统一节点能力的 trait 合同”。
1.2 核心模块
src/lib.rs:定义VfsOps、VfsNodeOps、VfsNodeRef以及默认错误语义。src/structs.rs:定义VfsNodeAttr、VfsNodePerm、VfsNodeType、VfsDirEntry、FileSystemInfo。src/path.rs:提供字符串级路径规范化工具canonicalize()。src/macros.rs:提供impl_vfs_dir_default!、impl_vfs_non_dir_default!两个宏,用于快速补齐“不适用操作返回错误”的默认实现。
1.3 核心对象与限制
VfsOps
用于表达“一个文件系统实例”,核心接口只有:
mount()umount()format()statfs()root_dir()
其中 mount()/umount() 只是回调钩子,并不负责全局挂载图管理。
VfsNodeOps
用于表达文件与目录节点。它既承担文件读写接口,也承担目录遍历和创建删除接口,因此实现者通常会结合 impl_vfs_dir_default! 或 impl_vfs_non_dir_default! 来屏蔽不适用的方法。
属性模型
VfsNodeAttr 只记录:
- 权限位
- 节点类型
- 字节大小
- 512B block 数
它没有 uid/gid、时间戳、设备号、链接数等更完整的 Unix 元数据。
名字长度限制
VfsDirEntry 内部使用固定的 63 字节缓冲区存名字,超长名字只会报警告。这是旧栈接口级别的硬限制之一。
1.4 与 axfs-ng-vfs 的差异澄清
axfs_vfs没有Mountpoint