缘起
磁盘空间分析工具已经有不少了——WizTree、TreeSize、SpaceSniffer……它们都做得很好,特别是 WizTree,通过直接解析 NTFS 的 $MFT 记录,扫描速度几乎是即时的。
但有一个痛点:这些工具和 AI 编程助手是割裂的。当我在 Claude Code 或 Cursor 里写代码时,想知道”哪个目录占空间最大”、”有没有重复文件”、”C 盘还剩多少”,得切出去开另一个软件,手动查看,再把结果粘贴回来。
于是就有了 KnowYourDisk——一个既是桌面应用又是 AI 工具的服务。

核心功能
高速扫描
KnowYourDisk 的扫描策略有两层:
NTFS MFT 直接解析 —— 绕过文件系统 API,直接读取 $MFT 文件的每条记录(MFT Entry),从中解析文件大小、文件名、父目录引用等元信息。这需要管理员权限(因为有原始卷访问需求),但换来的是近乎瞬时的扫描体验——在常见配置下,扫描整个 C 盘只需几百毫秒。
Walkdir 回退 —— 如果用户拒绝了 UAC 提权,或者扫描的是非 NTFS 卷(如 exFAT、FAT32 的外部存储),会自动无缝切换到常规的目录递归遍历模式。速度慢一些,但兼容性更广。
可视化
扫描结果用三种视图展示:
- 矩形树图(Treemap) —— 使用 Squarified 布局算法,把磁盘空间用嵌套矩形直观呈现。大文件和大文件夹一眼就能看出来。
- 文件树 —— 带虚拟滚动的可展开目录浏览器,适合按目录层级浏览。
- 扩展名统计 —— 按文件类型聚合大小分布,快速定位”到底是哪些类型的文件在吃空间”。
文件搜索与分析
- 实时文件名搜索(带防抖)
- 按大小、目录排行
- 重复文件查找(按文件名+大小匹配)
- 按修改时间范围筛选文件
- 空目录查找和清理
技术架构
Frontend: TypeScript + Vite
Backend: Rust + Tauri v2
NTFS: 纯 Rust 实现,无外部 NTFS 依赖
MCP: 独立 Axum HTTP SSE 服务
前后端分离的 Tauri 2 架构:
前端(TypeScript/Vite):
main.ts(~30KB)—— 核心交互逻辑:扫描控制、文件树展示、搜索、UI 状态treemap.ts(~10KB)—— 矩形树图画布渲染,使用 Canvas 2D APItypes.ts—— 和后端共享的类型定义format.ts—— 文件大小格式化等工具函数
后端(Rust):
lib.rs—— Tauri 应用入口,管理 AppState 和生命周期commands.rs(~20KB)—— Tauri IPC 命令:前端所有操作都通过这里调用models.rs—— 文件节点、扫描结果等数据结构scanner/—— 双模式扫描引擎:NTFS MFT 解析器 + Walkdir 回退tray.rs—— 系统托盘集成win/—— Windows 平台特定功能(权限提升、卷管理)
MCP 服务器——真正特别的部分
KnowYourDisk 内置了一个独立的 FastScan MCP 服务器,通过 Model Context Protocol 将磁盘分析能力开放给任何兼容 MCP 的 AI 编程助手。
这意味着你的 AI 助理可以直接问磁盘问题,而不需要你手动操作。
提供的 14 个工具
| 工具 | 作用 |
|---|---|
list_volumes |
列出所有磁盘卷 |
scan_disk |
深度扫描磁盘 |
scan_status |
获取扫描结果摘要 |
browse_directory |
浏览目录内容 |
get_node_path |
获取完整路径 |
get_node_details |
获取节点+面包屑导航 |
search_files |
按名称搜索文件 |
get_extension_stats |
扩展名分布统计 |
get_treemap |
获取矩形树图数据 |
get_largest_files |
查最大文件 |
get_largest_directories |
查最大目录 |
find_empty_directories |
找空目录 |
find_duplicate_files |
找重复文件 |
find_files_by_age |
按时间找文件 |
实际使用场景
在 Claude Code 里执行:
claude mcp add --transport sse fastscan http://127.0.0.1:3721/sse
然后就可以直接问:
“扫描 C 盘,找出最大的 5 个文件”
你的 AI 助理就会调用 scan_disk → get_largest_files,然后把结果告诉你。
或者:
“C 盘有哪些重复文件需要清理?”
它会调用 find_duplicate_files,自动找出占用空间最多的重复文件。
支持的主机平台
FastScan MCP 兼容所有主流 MCP 主机:
- VS Code (GitHub Copilot) —
.vscode/mcp.json - Claude Desktop —
claude_desktop_config.json - Claude Code — 通过 CLI 或
.mcp.json - Cursor —
.cursor/mcp.json - OpenCode —
opencode.json - Codex CLI (OpenAI) —
~/.codex/config.toml
架构设计
MCP 服务器使用的是 HTTP SSE(Server-Sent Events)传输模式,监听 127.0.0.1:3721。相比 stdio 模式,HTTP SSE 的好处是:
- 可以常驻后台,多个 AI 主机共享同一个服务实例
- 启动和停止更灵活(通过托盘菜单或应用内按钮控制)
- 不需要在每一个 AI 工具配置里指定路径
自动提权:启动时弹出 UAC 请求管理员权限(用于 $MFT 快速扫描),如果用户取消则以非管理员模式运行,自动回退到 Walkdir。
开发心得
纯 Rust NTFS 解析
纯 Rust 实现的 $MFT 解析器是项目最硬核的部分。没有使用 Win32 API 或任何外部 NTFS 库,直接读取原始 $FILE_NAME 和 $DATA 属性记录来获取文件元信息。这需要对 NTFS 内部结构有深入理解——MFT Entry 的布局、属性头解析、常驻与非常驻属性的区别等。
双模式扫描设计
scan_disk 命令根据当前权限状态自动选择扫描路径:
- 有管理员权限 → NTFS MFT 模式(毫秒级)
- 无管理员权限 → Walkdir 模式(秒级)
- 同一命令对用户透明,不需要手动切换
Tauri 2 + Vanilla TS
前端选择了纯 TypeScript(无框架),而不是 React/Vue。对于一个以 Canvas 渲染为主的工具型应用来说,框架带来的收益有限反而增加包体积。Vite 的 HMR 在开发时提供了足够好的体验。
系统托盘
通过托盘图标常驻后台,右键菜单提供:
- 显示/隐藏主窗口
- 启动/停止 MCP 服务
- 退出应用
这样把 MCP 服务跑成常驻进程后,AI 工具随时可以调用,不需要每次额外启动。
结语
KnowYourDisk 的定位很明确:不是要替代 WizTree,而是填补桌面工具和 AI 助理之间的鸿沟。它既可以作为一个好用的磁盘分析器独立使用,也可以作为一个 AI 工具的后端服务来提升开发体验。
项目开源在 GitHub,欢迎 Star 和 PR!