macOS 磁碟監控工具 FindDiskKiller,查出誰一直在佔用硬碟

FindDiskKiller 是 MIT 開源的 macOS 磁碟監控工具,117 星,Swift 原生。把 fs_usage 的磁碟追蹤做成圖形介面,追蹤進程級讀寫、AI 工具存儲分析、SMART 健康指標。本文依 README 拆解功能與限制。

用 AI 摘要這篇文章:

FindDiskKiller 是一個 macOS 原生、MIT 開源的磁碟監控工具,做一件很具體的事:當你覺得硬碟一直在忙、風扇一直轉,卻不知道是誰造成的,它幫你從「磁碟有動靜」這個訊號,一路追到是哪個程式、哪個檔案、哪顆實體硬碟在讀寫。作者給它的一句話定位是「See what keeps using your disk」,白話就是「看清楚是誰一直在用你的硬碟」。

先說明這篇的立場:我逐段讀完它在 GitHub 上的 README 與官方說明,但沒有實際安裝跑一次。所以底下談的是「README 寫到它能做什麼」,不是「我量到的結果」。涉及效果與精確度的地方,我會標清楚哪些是 README 寫的、哪些我無法替你確認。

跟 Activity Monitor 比起來,它把範圍收窄到磁碟

macOS 內建的 Activity Monitor(活動監視器)看得到磁碟,但它是一個通用系統監控工具,CPU、記憶體、電力、網路全都混在同一個介面裡。FindDiskKiller 走的是反方向:把範圍收窄到磁碟與檔案活動,再把 CPU、網路這些證據以「程式」為中心組織起來,讓你不用自己把好幾個工具的輸出拼成一個故事。實際遇到的情況常常是這樣:Activity Monitor 告訴你磁碟吞吐量很高,卻沒辦法直接告訴你是哪個程式造成的;你想再往下看,就得切到終端機開 fs_usage,或去翻系統紀錄,最後在好幾個視窗之間來回對照,才能拼出一個大概的答案。

如果要在終端機做類似的事,你大概會用 fs_usage 這類指令去看即時的檔案系統活動。FindDiskKiller 基本上是把這條路搬進圖形介面,再補上 Activity Monitor 不會特別做的兩層:往下游追到實體硬碟的健康指標,往上游分析 AI 工具的磁碟用量。定位上它是補上 Activity Monitor 沒有專心做的磁碟細節,而不是取代整個系統監控,兩者擺在一起用也說得通。

最不一樣的地方,是它會去算 AI 工具佔了多少磁碟

README 寫到一個我覺得最值得拿出來講的功能,叫 AI Agent Storage。作者的觀察是:像 Codex 和 Claude 這類 AI 工具跑久之後,會在本機累積大量對話紀錄、子代理 session、快照、視覺化檔案,還有一個共用的資料庫,而使用者通常根本不知道這些東西佔了多少、塞在哪裡。FindDiskKiller 做的事是:先量出某個 AI 服務總共佔了多少空間,再把它拆成對話(chat)、全域資料(global)、和找不到明確歸屬(unattributed)三塊,最後還能對應到個別的對話或 session。README 配合的畫面把這件事分成兩步走:總覽先讓你看到某個服務整體佔了多少,點進單一對話之後,還能看到它的活動紀錄、子代理,以及這條 thread 完整的空間細項。要清理時,你可以先圈選一段範圍,工具會估出「立即可以回收多少」,再逐條讓你確認年紀、所屬專案、對話範圍,才真正送出永久刪除。

對重度使用 Claude Code 的人來說,這個切入點其實很實際。你可能一邊開著好幾個代理跑任務,一邊沒注意到 session 快取一直在長大。想長期顧好本機的 Claude Code 工作環境,這類能看見平常看不見的那層佔用的工具,會比憑感覺清理來得準。如果你正在整理自己的使用方式,可以一併參考我們整理的 Claude Code 最佳實踐指南

README 裡有幾個安全設計值得記下來。分析不會自動開跑,要你點一下才開始;正在執行中、或身分有變動的 session 會被跳過,不會趁你還在用的時候去動它;刪除前會先給你一份完整的檢視畫面,列出範圍、年紀、所屬專案,你確認過才永久刪掉。作者也誠實畫出一條界線:Claude Desktop 和 Cowork 的 session 目前只能在 Claude Desktop 裡面刪,FindDiskKiller 不會直接寫資料庫,也不會手動砍對話紀錄來繞過這個限制。

一條異常讀寫,是這樣被追到的

README 描述的工作流程是這樣串起來的:打開工具會先看到一個總覽工作區,把持續的磁碟活動、資源趨勢、和最活躍的程式擺在同一個畫面,讓你先決定要追哪一條。接著進到某個程式的頁面,把它的 CPU、磁碟 I/O、網路三條趨勢擺在一起看,判斷這個活動是不是持續性的;如果是,就往裡面走,看它開啟了哪些位置、最近改了哪些資料夾。到這一步都還只是觀察,不會動到任何東西。

這裡有個關鍵詞是「持續」。README 反覆強調它追的是 sustained activity,也就是一直發生、不是只閃一下就停的讀寫。這個區別其實很實際:很多程式在開啟、更新、或建立索引時,會短暫把磁碟讀寫拉高,但過幾秒就回落,這種通常不用管;真正會吃掉硬碟壽命、或代表某個服務卡住沒收尾的,是那種長時間一直在寫的活動。把焦點放在持續性上,你才不會被一堆正常的瞬間尖峰干擾。

如果需要更硬的證據,你才手動啟動一段有時間限制的檔案或資料夾追蹤,這時它會顯示請求的讀寫速率、哪些檔案正在動、哪些程序在存取。再往下游是實體硬碟層:README 寫到它會把你熟悉的磁碟區名稱(像是 Macintosh HD 或外接硬碟)對應到實體裝置的吞吐量,再往下挖到 macOS 和硬體實際曝露出來的 SMART 或 NVMe 健康欄位,例如溫度、磨損程度、總寫入量、備用區塊。

這層欄位對「該不該換硬碟」的判斷最有感。一般來說,總寫入量(host writes)和磨損程度是評估一顆 SSD 剩餘壽命的主要依據,溫度和媒體錯誤(media errors)則偏向提早預警的訊號。但要提醒一個限制:這些欄位只能顯示 macOS 和硬體本身願意曝露的值,不同廠牌、不同機型開放的欄位不一樣,消費級 Mac 上有些欄位根本讀不到,會直接顯示成不可用,而不是硬擠一個數字給你。

整條鏈是這樣的:從一個程式、到它碰的檔案、再到底下那顆實體硬碟。中間每一層都要你明確點一下才往下走,不是一次全部攤開。這種「你要它才動」的設計,跟它在刪除和追蹤上都要求手動確認是同一套邏輯。

我讀 README 時最欣賞的部分:它拒絕給你假精確

大多數監控工具會傾向把所有東西算成一個看起來很清楚的數字。FindDiskKiller 反過來,用一整段標題寫「No False Precision」(不要假精確),明確告訴你哪些數字不能直接相加、哪些只能當參考。這在同類工具裡很少見,也是我讀這份 README 時覺得最值得信任的地方。

README 列出四條界線,我把重點轉成白話:

第一,程式層級的 I/O 量的是「這個程序向儲存要求了多少讀寫」,不是實際打進 NAND 顆粒的物理流量,這兩者在快取、壓縮、系統排程之下會有差距。第二,實體裝置的吞吐量沒辦法精準切給單一程序,所以「所有程式加起來的量」不會等於「裝置的量」,中間的落差是本來就會有的,不是工具算錯。

第三,最近被變動的位置只代表 macOS 觀察到「某個改變發生了」,它本身沒辦法單獨告訴你是誰寫的。第四,AI 資料庫的歸屬是一個標示清楚的「邏輯估算」,不是「你刪掉它就馬上拿回那麼多實體空間」。

還有一個細節:當某項證據缺失、不完整、或這個工具不支援時,README 寫到它會直接顯示「不可用」,而不是用零填進去假裝有東西。

舉個具體的例子:假設你發現硬碟少了 50GB,一個把所有量度混在一起的工具可能會直接告訴你「某個程式佔了 50GB,刪掉就沒事了」。但實際上這 50GB 可能來自好幾個不同性質的地方:有的是程式正在使用的暫存、有的是還在跑的 session、有的是 AI 服務底層資料庫的歸屬估算,刪掉之後真正能回收的實體空間不一定等於這個數字。FindDiskKiller 把這幾層分開標示,你才不會在清完之後困惑「為什麼空間沒有拿回來那麼多」。

對你做決定來說,這態度的實際意義是:你不會被一個看起來精準、其實把不同意義混在一起的數字帶偏。要判斷「該不該清理」「要不要換硬碟」的時候,手上的證據雖然不是單一數字,但每一項各自代表什麼,都講清楚了。

全本機處理,但有些動作要你親自放行

隱私方面,README 寫到全部的監控、分析、顯示都在你的 Mac 上完成,這個版本不會上傳程序名稱、檔案路徑、硬碟序號或監控紀錄,也沒有廣告、遙測、分析或第三方追蹤 SDK。對一個會碰到你磁碟活動的工具來說,這點值得記下來。磁碟活動其實是相當敏感的資訊,它會間接暴露你正在用哪些程式、開了哪些檔案,甚至工作內容的蛛絲馬跡。一個看得到這些東西的工具,如果把資料送上伺服器,風險比一般工具高得多。README 明確標榜零上傳、無遙測,對這類需要深度權限的工具來說,是本來就該有的承諾,而不是額外加分項。

權限分兩層。基本的 CPU、磁碟、網路、磁碟區、程序監控不需要管理員權限。但當你明確啟動檔案或目錄追蹤時,macOS 才可能要你批准一個有簽章、用途固定的背景元件,受保護的位置還會額外要求你開啟「全磁碟存取」。追蹤什麼時候開始、什麼時候停,都由你決定。

裝之前要先知道的事

幾個條件先講清楚。FindDiskKiller 只跑在 macOS 14(Sonoma)以上,支援 Apple silicon 和 Intel。它是 MIT 授權的開源專案,原始碼放在 jianyintang/find-disk-killer,截稿前在 GitHub 大約累積一百多星(117),是一個還算新、規模還不大的專案,這代表功能還在發展中,遇到問題主要靠 GitHub Issues 反映,作者也建議回報前先拿掉敏感的路徑、帳號和硬碟序號。

取得方式有兩條。一般使用走官方網站下載簽章並經過公證(notarized)的 DMG,拖進應用程式資料夾就完成,官方也提供 SHA-256 檢查碼讓你核對。作者提醒,如果 Gatekeeper 的簽章或公證驗證失敗,不要去繞過它。這條提醒對磁碟工具特別重要:FindDiskKiller 會要求檔案追蹤和全磁碟存取這類敏感權限,等於能看見你在讀寫什麼,正因為權限這麼大,它是不是經過簽章與公證、原始碼能不能自己審,就比一般工具更值得在意。開源加上官方簽章,至少讓你多一條可以回頭查證的路。想自己編譯的話需要 Xcode 16 以上和 XcodeGen,README 也老實說:沒簽章的自編版本只能做基本監控,需要權限的檔案追蹤跑不起來,那要靠官方簽章的 App 與輔助元件身分。

介面語言有十種,包含繁體中文,README 本身也有繁中版,對台灣使用者來說門檻低。

誰適合裝、誰先不用

如果你是那種會在終端機開 fs_usage 去抓磁碟兇手、但受不了文字輸出又沒時間一行行讀的人,FindDiskKiller 把同樣的事搬進圖形介面,再加上 AI 工具存量和硬碟健康這兩層,等於幫你省下切換好幾個工具的力氣。它特別適合一種情境:硬碟空間突然少了一大截,但你完全不確定兇手是 Xcode 的模擬器、Docker 的映像檔、還是 AI 工具慢慢長出來的 session 快取。這種時候與其憑直覺一個一個資料夾挖,不如先讓工具把「哪個程式在讀寫」「哪個 AI 服務佔了多少」攤開來,再決定要清哪一塊。

如果你重度使用 Claude Code 或 Codex,常常開好幾個代理同時跑,那個 AI Agent Storage 功能幾乎是為這個情境設計的,值得裝來看看自己到底累積了多少。平常也在意代理工作資源耗用的人,可以一併參考 Agent Battery 的整理。

反過來說,如果你只是想知道「硬碟還剩多少空間」,Activity Monitor 和 macOS 內建的儲存管理就夠了,不需要再多裝一個工具。如果你不在 macOS 上、或系統還在 14 以下,這個工具目前也幫不上忙。它是一個還在早期階段、把磁碟這件事做深的開源小工具,要不要裝,就看你是不是那個會被「硬碟一直被吃掉卻不知道是誰」困擾的人。

Sliven 褚崇名
Sliven 褚崇名

每日分享科技新知、免費資源以及 WordPress、虛擬主機相關主題,任何問題歡迎在科技月球下方留言,或是發送 Email 至 [email protected] 與我聯繫。

文章: 748

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


Share to...