- 问题: 升级 macOS 27 后系统数据突然变大。Spotlight 的搜索索引被算在里面却不点名,而且放在一个连有完全磁盘访问权限的应用都读不了的文件夹里。
- 我们发现: 升级后 Spotlight 重建索引,在一台 Mac 上索引文件涨到 61.97 GB。关掉索引拿回了 44 GiB(约 47 GB),代价是 Spotlight 再也搜不到我们的文件和自己装的应用。
- 我们做了什么: Mint 1.0.82 及以后的版本在 Safe to clean 里给 Spotlight 索引单独一个标签。它不会替你勾选;删除时先关索引再抹掉,只输一次密码,同一个标签也能把索引重新打开。
如果升级到 macOS 27 之后系统数据突然变大,先别急着删东西,看看 Spotlight 的搜索索引(系统设置里叫“聚焦”)。重建期间这个索引可能长得很大,“储存空间”把它算进系统数据却不点名,而你可以在终端里自己量一量,什么都不会改动。下面是我们在一台 Mac 上看到的情况,只是一个例子:你的 Mac 上索引会有多大,取决于上面存了什么。
储存空间里只有一行
“系统设置”>“通用”>“储存空间”里,系统数据只是一行,点不开。交换文件、缓存、备份和快照也都算在这里,我们的系统数据指南逐一讲过。macOS 27 同样会下载的 Apple 智能模型算在 macOS 里,不算系统数据,我们在同一台 Mac 上量过。Spotlight 把索引放在数据宗卷最上层一个叫 .Spotlight-V100 的隐藏文件夹里,这个文件夹归系统所有。就算应用有“完全磁盘访问权限”也读不了里面;在这台 Mac 上,从没有完全磁盘访问权限的终端运行 sudo du 也被拒绝了。所以系统数据变了,屏幕上没有任何地方告诉你其中多少是索引。
升级之后发生了什么
9 月 29 日上午 9:25 左右,macOS 27.0.1 安装完成。
升级前,macOS 报告说空间不够时能腾出 68.15 GB 的 Spotlight 数据;到当天 12:46,这个数字变成了 3.90 GB。同一段时间里,Mint 扫描看得到已被占用、却对应不到任何可读文件夹的空间,从 85.57 GB 降到了 5 GB 左右。我们的理解是,旧索引在升级过程中被丢掉了。没有哪条日志记下是哪个进程、在什么时候删的。
接着 Spotlight 开始建新的索引。Apple 自带的 mdutil -L 能列出索引文件夹里的文件,需要输入管理员密码,只读不写。把它列出的文件长度加起来:
时间 文件数 长度合计
09-29 13:26 559 5.43 GB
09-30 01:01 684 34.29 GB
10-01 12:40 714 61.97 GB
9 月 29 日 14:57 到 22:13 之间,每隔 9 到 26 分钟就写好一个新的分段文件,几乎都是 512 MiB 或 1 GiB。9 月 30 日深夜,索引又从头来了一次:10 月 1 日的清单里,最早的分段是那晚 23:51 写的。为什么重来,我们不知道。到第二天 12:40,单是一个文件的长度就有 34.36 GB,正好 32 GiB。
这些整齐的大小,就是我们说“长度”而不说“占用”的原因。程序可以先给文件定好长度再写数据,所以长度可能跑在实际占用前面。实际用了多少数据块我们没办法数,而且这份清单会跳过索引的 Cache 文件夹。
可用空间骤降的那天
10 月 1 日不到十二个小时,可用空间少了 80 GB 以上,从 0:39 的 100.6 GB 降到 12:16 的 13 GB。Spotlight 索引是其中最大的一块,其余是一个虚拟机镜像和别的工作。
那天 macOS 报告 Spotlight 可腾出的数据是 16.09 GB,而索引长了 22 个小时,这个数一个字节都没变。它是 macOS 需要空间时愿意还给你的量,不是那个文件夹的大小。
拿回空间,以及代价
我们用 mdutil 关掉了数据宗卷的索引,可用空间多了 44 GiB,换成“储存空间”用的单位约 47 GB。接下来 20 秒里,我们又抹掉了索引,还重启了 chronod:这个系统进程当时占着约 5 GB 已删除的文件。可用空间又多了 4 GiB,分不清哪部分来自哪一步。我们起初把这 4 GiB 都算在索引头上;后来的测试发现重启 chronod 几乎能拿回它占着的全部空间,所以这 4 GiB 多半是 chronod 的。不管怎么算,索引至少还回了 44 GiB,比清单里的 61.97 GB 少,和长度跑在数据前面对得上。
应用照常运行,但搜索停了。数据宗卷的索引关掉后,用 Spotlight 搜不到我们的任何文件,也搜不到我们自己装的应用:Mint、Raycast、Chrome、Claude 都没有结果。Safari 这类 macOS 自带的应用还搜得到,因为系统宗卷有自己的索引。限定在某一个文件夹里的 mdfind 搜索还能出结果,因为它直接把那个文件夹走一遍,不问索引。
后来我们重新打开索引,不到一分钟就出现了新的索引文件夹,而最初 16 分钟里,macOS 报告它的大小一直是 0 字节。
这个索引为什么这么大
9 月 29 日索引还在重建时,mdfind 在这台 Mac 放代码项目的文件夹里数出了 173,080 个已索引条目,其中 56% 在两个文件夹里,装的是研究数据和导出的数据集,成千上万的 JSON、CSV 和 Parquet 文件。这说明那里有大量内容要索引,但说明不了每个文件夹在索引里占了多少字节,我们也不知道有什么工具能给出这个数。而且这个数还在变:五分钟后是 173,081。
自己查一查
下面每一步都只读不写。
- 打开“系统设置”>“通用”>“储存空间”,等它算完,记下系统数据和可用空间。
- 在终端运行下面第一行,看数据宗卷的索引是否开着。
- 运行后两行(这是一条命令),把索引文件的长度加起来。它会要你输入密码,不会改动任何东西。
mdutil -s /System/Volumes/Data
sudo mdutil -L /System/Volumes/Data |
awk '/^-/{s+=$5} END{print s/1e9, "GB"}'
结果是文件长度,不是精确的磁盘占用,也不包括索引的 Cache 文件夹。一小时后再运行一次这条命令。如果总数还在涨,“活动监视器”里 mds_stores 也在忙,说明 Spotlight 还在建索引。我们这台在重建时,有一次采样看到它用了 54.3% 的 CPU。
你可以怎么选
每个选项都有代价。
- 等。 Apple 说,系统更新后的索引可能要几个小时甚至几天。如果总数不再涨、搜索也正常,可能什么都不用做。
- 重建。 Apple 给的方法是:“系统设置”>“聚焦”>“搜索隐私”,把磁盘加进去,等几秒再移除,Spotlight 会从头重新索引。这等于用一次重建换另一次重建;新索引会不会小一些,我们还没测过。
- 排除从不搜索的文件夹。 把它们加进同一个“搜索隐私”列表,它们就不会出现在搜索结果里。我们也还没测过这样能不能让索引变小。Apple 提醒,排除某些文件夹后,有些 App 有更新时你可能收不到通知;排除整块内置磁盘,就收不到任何更新通知。
- 关掉索引。 下面第一行能把空间拿回来,第二行重新打开。关着的时候,Spotlight 找不到你的文件,也找不到你装的应用。
sudo mdutil -i off /System/Volumes/Data
sudo mdutil -i on /System/Volumes/Data
不管选哪个,都不要手动删除 .Spotlight-V100 里的文件,用 Apple 自己的工具,具体设置见 Apple 关于聚焦索引和排除文件夹的说明。
Mint 能做什么
从我们官网下载的 Mint 1.0.82 及以后的版本,会在 Safe to clean 里给 Spotlight 索引单独一个标签。它显示的是 macOS 声明的大小,这只是下限;删除之后,再报告实际拿回了多少。它不会替你勾选,Auto Care 也从不处理它。删除时先关索引、再抹掉,只输一次密码;同一个标签也能把索引重新打开。