137137137/OpenDisk

GitHub: 137137137/OpenDisk

OpenDisk 是一款免费开源的 macOS 磁盘空间分析工具,通过交互式旭日图在数秒内完成全盘扫描并直观展示文件占用情况。

Stars: 11 | Forks: 0

OpenDisk icon

OpenDisk

一款专为 macOS 打造的快速、免费且**开源**的磁盘空间分析工具 —— DaisyDisk 的开源替代方案。它将您的驱动器映射为交互式旭日图,能在几秒钟内完成全盘扫描,并在运行时实时流式传输结果。 [![release](https://img.shields.io/github/release/137137137/OpenDisk.svg?style=flat)](https://github.com/137137137/OpenDisk/releases/latest) [![license](https://img.shields.io/github/license/137137137/OpenDisk.svg?style=flat)](LICENSE) [![platform](https://img.shields.io/badge/platform-macOS%2026%2B-blue.svg?style=flat)](https://www.apple.com/macos/) **[⬇  下载 macOS 版本](https://opendisk.app)**  ·  [GitHub releases](https://github.com/137137137/OpenDisk/releases/latest) 解压并启动 —— OpenDisk 会提示您将其移动到“应用程序”文件夹中,并保持自动更新。 OpenDisk showing an interactive sunburst chart beside a sortable folder list
## 功能 - 交互式旭日图,其中每一个圆环代表目录树中更深的一层。 - 将鼠标悬停在任何扇区上即可查看其确切大小,点击可放大进入该文件夹。 - 图表旁附带可排序的、Finder 风格的文件夹列表,并带有面包屑导航。 - 扫描期间会实时流式传输结果,因此图表和列表会在扫描过程中同步填充。 - 增量重新扫描会复用上一次的扫描结果并重放文件系统事件,因此重复扫描比冷扫描快 20–28 倍。 - 深入理解 APFS 卷组、 firmlinks 、可清除空间和系统卷,因此统计的总数与 Mac 报告的已用空间一致。 - 跨整个扫描目录树的即时搜索 —— 即使在包含数百万文件的驱动器上,结果也会在您输入时瞬间显现。 - 收集器:您可以从应用程序的任何位置将文件和文件夹拖入其中,查看预计可回收的容量总数,并一键将它们删除。 - “可清除空间”明细展示了缓存和其他可回收的存储空间。 - 连接外置驱动器时会自动显示。 - 保持自动更新(通过 Sparkle )。 ## 为什么选择 OpenDisk? 您所熟悉的 DaisyDisk 风格旭日图 —— 但它是**免费**、**开源**且**更快**的。 | | OpenDisk | DaisyDisk | | :-- | :-: | :-: | | 价格 | **免费** | 付费 | | 许可证 | **开源 (MIT)** | 专有 | | 交互式旭日图 | ✓ | ✓ | | 1 TB 冷扫描 | **17 秒** | 37 秒 | ## 基准测试 针对 1 TB Apple Silicon 卷的完整扫描,冷缓存。
Bar chart comparing full-scan time on a 1 TB drive
工具1 TB 扫描相对速度
OpenDisk17 秒1x
DaisyDisk37 秒慢 2.2 倍
Baobab2 分 15 秒慢约 8 倍
## 系统要求 - macOS 26 (Tahoe) 或更高版本,基于 Apple Silicon 或 Intel 芯片。 - 需要完全磁盘访问权限,否则 macOS 会隐藏部分文件系统,导致统计总数偏小。请在**系统设置 → 隐私与安全性 → 完全磁盘访问权限**中授予权限。应用程序会在首次启动时提示您开启。 ## 构建说明 在 Xcode 中打开 `OpenDisk.xcodeproj` 并运行,或者通过命令行构建: ``` xcodebuild -project "OpenDisk.xcodeproj" -scheme "OpenDisk" build ``` ## 使用说明 1. 启动 OpenDisk ,并在出现提示时授予**完全磁盘访问权限**,以确保扫描没有任何隐藏内容。 2. 选择一个驱动器,或选择**扫描文件夹…**来分析任意目录。 3. 探索旭日图 —— 将鼠标悬停在扇区上查看确切大小,点击以放大进入,并使用面包屑导航或文件夹列表逐步返回上层。 4. 打开**可清除空间**,查看缓存及其他可回收存储空间的细分情况。 ## 工作原理 - 使用 `getattrlistbulk(2)` 和 `searchfs(2)` 批量读取目录元数据,而不是对每个文件单独执行一次 `stat`。 - 使用少量并发读取器(子目录树为 4–5 个,整个卷约为 8 个),因为 APFS 会对目录读取进行串行化处理,超过此并发数后吞吐量会下降。 - 在固定的专用工作线程池上运行阻塞式读取,这些线程从共享的工作栈中提取任务。 - 使用逐个子项的挂载标志在挂载点和快照卷处停止扫描,因此扫描 `/` 时不会重复计算磁盘空间。 ## 项目结构 ``` OpenDisk/ ├── App/ App entry point ├── Models/ Folder items, chart data, scan progress ├── Services/ │ ├── DiskAnalyzer.swift Top-level scan orchestration │ └── Scanning/ Scanner core │ ├── ScanEngine.swift Strategy selection and streaming snapshots │ ├── TraversalScanner.swift getattrlistbulk worker pool │ ├── CatalogScanner.swift searchfs catalog scans │ ├── ScanCache.swift Incremental rescan cache │ └── SystemInterop/ Wrappers over the kernel APIs ├── Views/ │ ├── Charts/ Sunburst rings chart │ ├── Analysis/ Results screen │ └── Components/ Rows, breadcrumbs, status bar └── Resources/ Assets and icons ``` ## 许可证 基于 [MIT 许可证](LICENSE) 发布。
标签:GUI, Mutation, 可视化, 文件管理, 磁盘空间分析, 系统工具