生活

解决 macOS 上的 mds_store 高 CPU 占用并停用 Spotlight 索引

问题现象

最近在使用 macOS 时,打开 htop 或活动监视器会发现几个 CPU 核心都是 100% 满负荷运行。进一步查看,发现 mds_store 这个进程占用了大量 CPU 资源,导致系统卡顿。

mds_store 是什么?

mds_store 是 macOS Spotlight 索引服务的核心组件,负责管理文件的元数据。它的作用是:

  • 为系统内容建立和维护索引数据库
  • 支持快速的全局搜索功能(Spotlight)
  • 让你能够快速搜索文件、邮件、应用等内容

当系统文件发生变化时(比如文件创建、修改、删除等),mds_store 就会进行重新索引,因此可能会占用大量 CPU 资源。

为什么 mds_store 会占用高 CPU?

常见原因

  1. 文件频繁变动

    • 大量文件的操作(如开发项目编译、下载大文件)
    • 同步工具频繁写入(OneDrive、Dropbox 等)
  2. 外接硬盘或网络驱动器

    • 连接了外部存储设备时,Spotlight 也会尝试索引这些内容
  3. Spotlight 索引损坏

    • 索引数据库出现问题,导致系统反复尝试重新索引
  4. 系统更新后重新索引

    • 每次 macOS 大更新后,Spotlight 需要重新为整个系统创建索引

解决方案

方案一:重建 Spotlight 索引(推荐首选)

有时候 Spotlight 的索引可能会出现问题,最简单的解决办法就是重建索引。

打开 终端,输入以下命令:

sudo mdutil -E /

注意:

  • -E 表示删除并重新创建索引
  • / 表示对根目录(整个系统)执行此操作
  • 这个过程可能需要几分钟到几小时,取决于你的文件数量

方案二:排除某些文件或文件夹

如果有一些文件夹不需要被索引,可以将它们从 Spotlight 中排除。

步骤:

  1. 打开 系统设置 → Siri 与 Spotlight(或 系统偏好设置 → Spotlight)
  2. 在 搜索结果 标签页下,找到 隐私 部分
  3. 点击 + 按钮,选择那些不想被索引的文件夹,比如:

    • 外接硬盘
    • 开发项目目录
    • 临时文件夹

这样 Spotlight 就不会再索引这些位置的文件。

方案三:关闭特定驱动器的索引

如果你使用外接硬盘或网络驱动器,可以单独关闭它们的索引。

sudo mdutil -i off /Volumes/ExternalDrive

说明:

  • 替换 ExternalDrive 为实际的卷名
  • 如果不知道卷名,可以在 访达 中查看侧边栏的设备列表

方案四:检查大型文件或数据库

一些大型文件可能会让 Spotlight 花费大量时间索引,比如:

  • 邮件库(Mail)
  • 照片库(Photos)
  • 数据库文件

如果这些数据不需要通过 Spotlight 搜索,可以将它们排除在外(参考方案二)。


停用 Spotlight 索引

如果你完全不需要 Spotlight 的搜索功能,也可以停用它。

完全停用 Spotlight

sudo mdutil -a -i off

说明:

  • -a 表示作用于所有卷
  • -i off 表示关闭索引

关闭后,系统不会再为文件、邮件等内容建立索引,搜索功能也会被停用。

重新启用 Spotlight

如果之后想再次启用 Spotlight:

sudo mdutil -a -i on

停用特定卷的索引

只关闭某个特定卷的索引,不影响其他卷:

sudo mdutil -i off /Volumes/YourVolumeName

停用 mds 进程(不建议)

另一种方法是强制停用 mds 和 mdworker 进程:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

⚠️ 不推荐这种方法,原因是:

  • macOS 会定期自动重启这些进程
  • 可能影响系统的其他功能
  • 使用 mdutil 命令更加稳定可靠

总结

Spotlight 是 macOS 中非常强大的搜索工具,但有时也会给系统带来负担。根据实际需求:

  • 问题严重:先尝试重建索引(方案一)
  • 特定文件夹影响:排除不需要索引的目录(方案二)
  • 外接硬盘问题:关闭外接驱动器的索引(方案三)
  • 完全不需要搜索:停用 Spotlight 功能(停用部分)

适当调整 Spotlight 的行为,甚至在必要时完全停用它,能够显著改善系统的性能。

— END —