Find sustained disk activity and identify the apps behind it.
FindDiskKiller 是为这样的时刻而生的:当你的 Mac 开始发热,磁盘忙得不可开交,
而仅凭进程列表却无法解释原因。它让调查始终以应用为中心:识别持续的活动,
检查相关的应用程序,然后深入查看其 CPU、磁盘、网络、文件和存储上下文,
而无需在多个工具之间拼凑完整的情况。
## 你能看到什么
| 工作区 | 它能为你提供什么 |
| --- | --- |
| **应用程序** | 五秒内的 CPU、读取、写入、下载和上传;支持排序和可调整大小的实时列;原生应用图标 |
| **时间线** | 直观的十分钟、15分钟和一小时历史直线图,支持悬停查看精确数值 |
| **进程详情** | 独立的窗口,用于比对应用程序的 CPU、磁盘、网络和文件证据 |
| **文件活动** | 当前打开的位置以及过去五分钟内被更改的目录 |
| **文件访问追踪** | 按需请求的读/写总量、五秒速率、会话峰值、活动文件以及经过验证的进程会话 |
| **磁盘** | 将熟悉的已挂载卷名称映射到物理设备吞吐量,包括外部存储 |
| **硬盘健康** | 原生的 NVMe/SMART 证据,例如温度、主机写入次数、磨损程度、剩余空间、通电历史,以及 macOS 公开报告的错误信息 |
| **菜单栏** | 一种安静、轻巧的当前活动视图,没有通知噪音 |
## 可视化的完整调查
### 从相关的应用程序开始
CPU、磁盘 I/O、下载和上传保持独立,这样一个繁忙的资源就不会掩盖另一个。
当前数值使用最新的五秒数据,并且每个应用都可以在独立的详情窗口中打开。
### 从位置深入到有边界的文件证据
查看应用当前打开的位置以及过去五分钟内更改的目录。
当这些上下文不够时,明确启动一个有时间限制的文件或文件夹追踪,
检查请求的读取、写入、活动文件以及经过验证的进程会话。
### 以存储上下文收尾
将熟悉的已挂载卷名称映射到物理设备吞吐量,然后检查 macOS 和硬盘实际公开的
SMART 或 NVMe 健康证据。
## 没有虚假精度的测量
FindDiskKiller 将 macOS 的证据来源保持独立:
- **应用程序磁盘 I/O** 来自每个进程的计数器,涵盖该进程使用的所有存储。
- **设备吞吐量** 来自物理存储计数器,并通过人们熟悉的名称(如 `Macintosh HD` 或 `ExternalSSD`)显示。
- **最近的更改** 显示 macOS 观察到了某个位置发生变化;它们本身并不能识别写入者。
- **文件访问追踪** 测量通过成功系统调用请求的字节数。缓存、APFS 回写、压缩、写时复制、内存映射以及覆盖范围盲区意味着这些数值并不是物理 NAND 写入量。
- **硬盘健康** 仅包含 macOS 实际报告的字段。缺失的值将保持不可用状态,而不会变成零。
该应用**不会**宣称实现了精确的进程到物理设备的字节归因。
相关的测量结果会一并展示,而不会强行将它们相加凑整。
## 隐私与权限
监控和分析完全在本地进行。当前版本不包含任何广告、遥测、分析或第三方追踪 SDK,
也不会上传进程活动、文件路径、监控历史或磁盘序列号。
基础监控不需要管理员批准。当你明确启动文件或文件夹追踪时,
macOS 可能会要求你批准 FindDiskKiller 已签名的后台组件。
该辅助组件只能监督具有固定命令格式的、有边界的 `/usr/bin/fs_usage` 会话;
它无法执行 shell 或任意命令。它可以在“设置”中停止并移除。
阅读完整的[隐私政策](PRIVACY.md)和[安全政策](SECURITY.md)。
## 系统要求
- macOS 14 或更高版本
- Apple silicon 或 Intel Mac
- 仅在启用按需文件访问追踪时需要管理员账户
## 安装
如果可用,官方网站的发布版本会以 universal2、Developer ID 签名、经过 Apple 公证(notarized)的磁盘镜像(DMG)形式分发。
1. 从[官方网站](https://finddiskkiller.com/en/download/)下载最新的 DMG。
2. 打开它并将 FindDiskKiller 拖入“应用程序”(Applications)。
3. 从“应用程序”中启动 FindDiskKiller。
发布的版本包含 SHA-256 校验和。切勿为签名或公证验证失败的安装包绕过 Gatekeeper。
## 构建与测试
XcodeGen 是 Xcode 项目的唯一事实来源:
开发需要 Xcode 16 或更高版本以及 XcodeGen 2.42.0 或更高版本。
以下构建会禁用代码签名,因此不需要维护者的 Developer ID 证书:
```
git clone https://github.com/jianyintang/find-disk-killer.git
cd find-disk-killer
xcodegen generate
xcodebuild \
-project FindDiskKiller.xcodeproj \
-scheme FindDiskKillerApp \
-configuration Release \
-destination 'generic/platform=macOS' \
CODE_SIGNING_ALLOWED=NO \
ONLY_ACTIVE_ARCH=NO \
build
```
运行核心测试套件:
```
swift test
```
未签名的开发构建可以验证基础的监控体验,但无法完成具有特权的文件或文件夹追踪。
App 和辅助组件会针对维护者的 Team ID 相互进行身份验证,因此该工作流必须使用官方签名构建进行验证。
批准后台组件与授予受保护位置的完全磁盘访问权限(Full Disk Access)是分开的 macOS 权限;一方并不意味着另一方。
维护者可以从干净的提交中创建签名且经过公证的网站发布版本:
```
make lint test
make release VERSION=1.0.0 BUILD_NUMBER=100
```
发布流水线会构建 universal2 App 和辅助组件二进制文件,
验证 Hardened Runtime 和受信任的时间戳,
创建已签名的 DMG,将其提交给 Apple 进行公证,装订票据,
运行 Gatekeeper 检查,并写入 `SHA256SUMS`。使用 `SKIP_NOTARIZATION=1` 生成的构建产物仅用于本地预演,严禁发布。
在没有 Finder 自动化权限的发布主机上,无需打开 Finder 即可重用之前批准的安装程序布局:
```
DMG_TEMPLATE=artifacts/FindDiskKiller-1.0.1-101/FindDiskKiller-1.0.1.dmg \
make release VERSION=1.0.2 BUILD_NUMBER=102
```
在发布之前,将确切签名的发布版 App 安装到 `/Applications` 中,并运行一次特权追踪检查:
```
EXPECTED_VERSION=1.0.3 EXPECTED_BUILD=103 \
scripts/verify-installed-trace-helper.sh
```
该检查会验证嵌入式辅助组件的身份,执行真实的文件 I/O 追踪,
确认 launchd 服务正在运行,并拒绝任何新的启动约束违规行为。
## 架构
```
Sources/
CFindDiskKiller/ Low-level macOS sampling bridge
CFindDiskKillerTrace/ Thread-to-process identity bridge
FindDiskKillerCore/ Models, aggregation, and health parsing
FindDiskKillerApp/ SwiftUI application and resources
FindDiskKillerTraceProtocol/ Bounded XPC contract
FindDiskKillerTraceHelper/ Signed fixed-purpose helper
AppConfig/ Signing, bundle, and helper metadata
Tests/ Core and contract tests
docs/ Product, tracing, and release documentation
```
真正的分发产物是 Xcode 构建的 `.app`;SwiftPM 可执行文件不包含已签名的辅助组件包布局。
## 文档
- [产品与技术计划](docs/find-disk-killer-product-and-technical-plan.md)
- [深度文件追踪与 SSD 健康计划](docs/find-disk-killer-deep-tracing-and-ssd-health-plan.md)
- [网站发布检查清单](docs/website-release-checklist.md)
- [贡献指南](CONTRIBUTING.md)
- [支持](SUPPORT.md)
- [隐私](PRIVACY.md)
- [安全](SECURITY.md)
- [第三方声明](THIRD_PARTY_NOTICES.md)
## 支持与许可
使用 [GitHub Issues](https://github.com/jianyintang/find-disk-killer/issues) 获取
常规支持。通过
[GitHub Security Advisories]
(https://github.com/jianyintang/find-disk-killer/security/advisories/new) 私下报告漏洞,
并从诊断信息中移除敏感路径、用户名和序列号。
FindDiskKiller 是开源软件,基于 [MIT License](LICENSE) 发布。第三方
应用标识仅用于识别受观察的软件,不代表任何附属关系或背书。