26/07/2026 173 BLOG

KnowYourDisk:为AI打造的磁盘空间分析工具

叁七

缘起

磁盘空间分析工具已经有不少了——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 API
  • types.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_diskget_largest_files,然后把结果告诉你。

或者:

“C 盘有哪些重复文件需要清理?”

它会调用 find_duplicate_files,自动找出占用空间最多的重复文件。

支持的主机平台

FastScan MCP 兼容所有主流 MCP 主机:

  • VS Code (GitHub Copilot).vscode/mcp.json
  • Claude Desktopclaude_desktop_config.json
  • Claude Code — 通过 CLI 或 .mcp.json
  • Cursor.cursor/mcp.json
  • OpenCodeopencode.json
  • Codex CLI (OpenAI)~/.codex/config.toml

架构设计

MCP 服务器使用的是 HTTP SSE(Server-Sent Events)传输模式,监听 127.0.0.1:3721。相比 stdio 模式,HTTP SSE 的好处是:

  1. 可以常驻后台,多个 AI 主机共享同一个服务实例
  2. 启动和停止更灵活(通过托盘菜单或应用内按钮控制)
  3. 不需要在每一个 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!

< 上一篇:Hermes Agent 接轨
— S.Q. —
下一篇:博客前端布局样式重构 >
首页 相册 小说 AI