解決 Mac 上 mds 與 mdworker 高 CPU
mds、mds_stores 和 mdworker 都屬於 Spotlight 索引系統。macOS 更新、資料遷移、還原或大量檔案變更後,它們短時間占用 CPU 很正常。mdutil -s 只能確認索引是否開啟,無法顯示重建進度,也沒有固定的完成時間。
這些程序分別做什麼
mds 負責協調索引,mds_stores 管理索引資料庫,mdworker 掃描檔案並擷取可搜尋的內容與中繼資料。索引是最新狀態時,它們大多閒置;大量檔案發生變化後,它們會重新開始工作。
為什麼占用會突然升高
- macOS 更新或資料遷移後,磁碟上大量內容變了
- 還原、移動或複製大量檔案後
- 接入尚未索引的外接磁碟或網路磁碟區後
- 下載、建置或同步讓某個目錄持續快速變化時
檢查索引是否啟用:
mdutil -s /
「Indexing enabled」是狀態,不是進度。把持續的 mdworker CPU 與「活動監視器」中的磁碟讀寫、近期檔案變化放在一起看。工作仍在推進時,讓 Mac 接通電源並等待完成。
大型原始碼目錄、郵件資料庫、外接磁碟區、慢速儲存裝置,以及反覆同步都會拉長時間。
長時間不結束怎麼辦
先儲存工作,再逐一暫停持續改寫檔案的 App;需要排查外接磁碟時,等寫入停止並從 Finder 正常退出磁碟後再拔除。這樣更容易看出是否有某個目錄或磁碟一直產生新變化。
在「系統設定 > Spotlight > 搜尋隱私」中排除目錄,可以減少索引工作,代價是該目錄不再出現在搜尋結果中。這個取捨更適合明確不需要搜尋的建置產物、虛擬磁碟或封存內容;整個個人目錄和啟動磁碟的影響就大得多。
如果搜尋結果已經缺失,或索引能確認卡住,可以依 Apple 的 Spotlight 重建說明操作:把受影響的磁碟或檔案夾加入「搜尋隱私」,短暫等待,再移除。不同 macOS 版本可能顯示「搜尋隱私」或「Spotlight 隱私」。移除後,Spotlight 會重新索引。
重建會把昂貴的工作再做一遍,只適合修復已確認存在的索引問題,不是看到 CPU 升高後的第一步。
Spotlight 索引怎樣運作
Spotlight 會在磁碟區隱藏的 .Spotlight-V100 中維護倒排索引,也就是從詞語和中繼資料對應回檔案。
檔案變化後,FSEvents 通知 mds,mds 把檔案交給 mdworker,mdworker 載入對應的 .mdimporter 外掛,擷取文字與中繼資料。一般編輯只處理少量變化,完整重建則要重新匯入所有符合條件的檔案。
監控工具能幫什麼
「活動監視器」或 Mole 的「狀態」頁可以確認 CPU 與磁碟占用來自 Spotlight。接下來要判斷它是在處理一批有限的變化,還是某個目錄一直被改寫。查看近期活動並逐項隔離,比強制結束工作程序更有效。
可重複的診斷步驟
索引工作有進展時,等待通常就夠了;長期不退,才需要隔離持續變化的目錄或磁碟。排除目錄會失去搜尋結果,重建也會重複昂貴的工作,因此兩者都適合有明確證據的情況;結束 mdworker 本身並不能清理索引問題。