Files
markbase/docs/fskit-research/FSKIT_API.md
Warren 1300a4e223
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled
MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
核心功能:
-  Categories/Series双视图管理(category_view.rs + import_markdown.rs)
-  FUSE Multi-Volume支持(tree_type参数)
-  SSH/SFTP/SCP/rsync协议完整实现(4042行)
-  NFS/SMB Module Phase 1-3完成
-  Archive Module Phase 1-4完成(2916行)
-  Download Center API完整实现
-  S3兼容API实现(560行)

Git配置修正:
-  删除错误origin(gitea.momentry.ddns.net)
-  删除m5max128(指向机器名)
-  设置origin = m5max128gitea.momentry.ddns.net/admin/markbase
-  设置m4minigitea = m4minigitea.momentry.ddns.net/warren/markbase

数据清理:
-  删除38个临时SQLite(保留accusys.sqlite、demo.sqlite)
-  删除.bak、test_*.bin、调试脚本等临时文件
-  删除临时目录(build/、download files/、raid_test/等)
-  更新.gitignore排除临时文件

架构优化:
- 52个文件修改,2434行新增,4739行删除
- Workspace成员整合(16个crate)
- 数据库状态:accusys.sqlite保留(主demo测试)

远程同步:
-  准备推送到m5max128gitea(远程Gitea)
-  准备推送到m4minigitea(本地Gitea)
2026-06-12 12:59:54 +08:00

420 lines
8.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# FSKit API 详细文档 ⭐⭐⭐⭐⭐
## 1. FSKit Framework 结构
**Framework位置**`/System/Library/Frameworks/FSKit.framework`
**核心组件**
- UnaryFilesystemExtension
- FSUnaryFileSystem
- FSVolume
- FSItem
- FSBlockDevice
---
## 2. UnaryFilesystemExtension入口点
**定义**:文件系统扩展入口点,相当于 kernel module init
**Swift API**
```swift
import FSKit
class UnaryFilesystemExtension {
//
func start() -> Bool
//
func stop()
//
func filesystem() -> FSUnaryFileSystem
}
```
**生命周期**
```
1. 用户激活 Extension (System Settings)
2. macOS 调用 start()
3. 文件系统初始化
4. 返回 FSUnaryFileSystem 实例
5. macOS 调用 stop() (deactivate)
```
---
## 3. FSUnaryFileSystem文件系统
**定义**:文件系统核心类,管理卷和文件系统操作
**Swift API**
```swift
class FSUnaryFileSystem {
//
var name: String
//
var version: String
//
func initialize() -> Bool
//
func cleanup()
// dataset
func createVolume(name: String, device: FSBlockDevice?) -> FSVolume
//
func deleteVolume(volume: FSVolume)
//
func queryVolumes() -> [FSVolume]
}
```
**协议 FSUnaryFileSystemOperations**
```swift
protocol FSUnaryFileSystemOperations {
//
func start() -> Bool
//
func stop()
//
func handleMountRequest(request: FSMountRequest) -> FSVolume?
//
func handleUnmountRequest(volume: FSVolume)
}
```
---
## 4. FSVolume卷管理
**定义**:卷实例,相当于 ZFS dataset 或传统文件系统分区
**Swift API**
```swift
class FSVolume {
//
var name: String
// ID
var id: UUID
//
var filesystem: FSUnaryFileSystem
//
var state: FSVolumeState
//
var blockDevice: FSBlockDevice?
//
var rootItem: FSItem
}
```
**协议 FSVolume.Operations**
```swift
protocol FSVolumeOperations {
//
func lookup(path: String) -> FSItem?
func create(path: String, type: FSItemType) -> FSItem?
func remove(item: FSItem) -> Bool
func rename(item: FSItem, newPath: String) -> Bool
//
func read(item: FSItem, offset: Int, size: Int) -> Data?
func write(item: FSItem, offset: Int, data: Data) -> Int
//
func readdir(directory: FSItem) -> [FSItem]
func mkdir(path: String) -> FSItem?
func rmdir(directory: FSItem) -> Bool
//
func getattr(item: FSItem) -> FSItemAttributes
func setattr(item: FSItem, attributes: FSItemAttributes) -> Bool
//
func getxattr(item: FSItem, name: String) -> Data?
func setxattr(item: FSItem, name: String, value: Data) -> Bool
func listxattr(item: FSItem) -> [String]
func removexattr(item: FSItem, name: String) -> Bool
//
func lock(item: FSItem, operation: FSLockOperation) -> Bool
func unlock(item: FSItem) -> Bool
//
func symlink(path: String, target: String) -> FSItem?
func link(item: FSItem, newPath: String) -> FSItem?
func readlink(item: FSItem) -> String?
}
```
---
## 5. FSItem文件/目录项)
**定义**:文件系统项(文件、目录、符号链接等)
**Swift API**
```swift
class FSItem {
// ID
var id: UUID
//
var name: String
//
var type: FSItemType
//
var volume: FSVolume
//
var parent: FSItem?
//
var size: Int
//
var attributes: FSItemAttributes
}
enum FSItemType {
case file //
case directory //
case symlink //
case hardlink //
case special //
}
```
---
## 6. FSBlockDevice块设备
**定义**:块设备访问接口,对 ZFS 极重要
**Swift API**
```swift
class FSBlockDevice {
//
var path: String
//
var size: Int
// ID
var id: UUID
//
var blockSize: Int
//
func readBlock(offset: Int, size: Int) -> Data?
//
func writeBlock(offset: Int, data: Data) -> Bool
//
func flush()
//
func getInfo() -> FSBlockDeviceInfo
}
```
**关键特性**
-**直接块设备访问**pread/pwrite
-**设备路径**: /dev/disk18, /dev/disk19, etc
-**支持多个设备**RAID-Z, mirror
-**异步 I/O**(可选)
-**Direct I/O**(可选)
---
## 7. FSItemAttributes属性
**定义**:文件/目录属性
**Swift API**
```swift
struct FSItemAttributes {
// POSIX
var mode: Int //
var uid: Int // ID
var gid: Int // ID
var size: Int //
var nlink: Int //
var atime: Date // 访
var mtime: Date //
var ctime: Date //
var flags: Int //
// macOS
var finderInfo: Data // Finder
var extendedFlags: Int //
}
```
---
## 8. FSMountRequest挂载请求
**定义**:用户挂载请求处理
**Swift API**
```swift
class FSMountRequest {
//
var mountPath: String
//
var devicePath: String?
//
var options: FSMountOptions
// ID
var uid: Int
// ID
var pid: Int
}
struct FSMountOptions {
var readOnly: Bool
var noExec: Bool
var noSuid: Bool
var noDev: Bool
var synchronous: Bool
var noBrowse: Bool
}
```
---
## 9. FSKit 挂载流程
**完整流程**
```
1. 用户挂载命令:
mount -F -t MyFS disk18 /mnt/test
2. macOS 处理:
- 解析挂载参数
- 创建 FSMountRequest
- 调用 FSUnaryFileSystemOperations.handleMountRequest()
3. 文件系统处理:
- 解析 FSMountRequest
- 访问块设备disk18
- 创建 FSVolume 实例
- 返回 FSVolume
4. macOS 完成:
- 注册 FSVolume
- 创建挂载点
- 激活卷操作
5. 用户操作:
- read/write/readdir 等操作
- macOS → FSVolume.Operations
6. 卸载:
umount /mnt/test
- macOS → FSUnaryFileSystemOperations.handleUnmountRequest()
```
---
## 10. FSKit Extension 激活
**用户激活流程**
```
1. System Settings → General → Login Items & Extensions
2. 找到文件系统扩展MyFS Extension
3. 启用扩展
4. macOS 加载 Extension
5. 调用 UnaryFilesystemExtension.start()
6. Extension 返回 FSUnaryFileSystem
7. 文件系统可用
```
**权限要求**
- 需要 root 或管理员权限激活
- Apple Developer 证书签名(生产)
- 沙箱化运行(安全)
---
## 11. FSKit vs Kernel VFS 对比
| FSKit API | Kernel VFS | 功能 |
|-----------|-----------|------|
| UnaryFilesystemExtension | kernel module init | 入口点 |
| FSUnaryFileSystem | filesystem type | 文件系统类型 |
| FSVolume | superblock | 卷管理 |
| FSVolume.Operations | file_operations | 文件操作 |
| FSItem | dentry/inode | 文件项 |
| FSBlockDevice | block_device | 块设备 |
| FSItemAttributes | inode attributes | 属性 |
---
## 12. FSKit 限制和特性
**支持**
- ✅ 文件/目录操作
- ✅ 扩展属性xattr
- ✅ 符号链接/硬链接
- ✅ 文件锁定
- ✅ 块设备访问
- ✅ 异步 I/O
- ✅ Direct I/O
- ✅ Unicode 文件名
- ✅ 大文件支持
**不支持**
- ❌ IOCTL不通过 FSKit
- ❌ BMAP不通过 FSKit
- ❌ 设备文件(字符/块设备)
- ❌ 网络文件系统特性(某些)
---
## 13. FSKit 最佳实践
**1. 用户态设计**
- 所有代码运行在用户态
- 无 kernel code
- 使用 Swift/C 用户态库
**2. 块设备访问**
- FSBlockDevice API
- pread/pwrite 用户态 I/O
- Direct I/O 优化性能
**3. 性能优化**
- 用户态缓存(类似 ARC
- 批量操作
- Async I/O
**4. 安全考虑**
- Apple sandbox 模型
- 权限检查
- 用户态崩溃隔离
---