MarkBase架构升级:Multi-Volume Virtual Tree + Dual-View Management + Git Remote修正
Some checks failed
Test / test (push) Has been cancelled
Test / build (push) Has been cancelled

核心功能:
-  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)
This commit is contained in:
Warren
2026-06-12 12:59:54 +08:00
parent 4cb7e80568
commit 1300a4e223
4559 changed files with 195840 additions and 4244 deletions

View File

@@ -0,0 +1,419 @@
# 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 模型
- 权限检查
- 用户态崩溃隔离
---