如果你迁移过系统图库,那么可能是 Spotlight 索引里没删之前的路径。
删除 ~/Library/Containers/com.apple.managedcorespotlightd/EnabledIndexes 文件即可。
触发
前些天为了整理 iCloud 图库,在 macOS 上将系统图库切换到了 B 图库,整理好后又切换回 A,并删除了 B。
起初一切正常,但某次重启电脑后,发现 B 图库的旧位置又出现了一个空的图库文件夹。
经过测试,删除之后,下次重启或重新登录时还会再生。
排查
再生的 B 图库内,仅有以下的文件夹,没有任何文件。
1 | Photos Library.photoslibrary |
看起来是索引的问题,先后查看了照片 App 中设置的系统图库,以及 A 图库内的 SQLite 数据,均指向正确的位置,没有问题。
遂猜测是 photolibraryd 或者 cloudphotod 的配置中存放了错误的路径,可是删除其配置后,B 图库依然会再生。
排查无果,只好尝试 fs_usage 抓一下所有文件的操作记录。
B 图库在登录后的 5 秒左右就会再生,反复几次后,终于在 B 图库再生之前执行了这个命令。这会记录系统中所有文件的操作。
1 | sudo fs_usage -w -f filesys > ~/Desktop/fs.log |
查看日志,看到是 spotlightknowledged 创建了它。
并且,在创建 B 图库之后,它直接就访问了正确的 A 图库,这个速度不像去重新查找的,或许是某个地方仍然记录了 B 图库的位置。
继续查看 spotlightknowledged 在创建 B 图库之前的一些操作,发现它访问了这个文件:
1 | ~/Library/Containers/com.apple.managedcorespotlightd/EnabledIndexes |
这个文件是 XML 数据,里面只记录了两个内容,即 A 和 B 图库。
删除这个文件之后,一切恢复正常。
根因
EnabledIndexes 用于记录额外启用的 Core Spotlight 索引目录。
图库移动后,Photos 成功更新了系统图库位置,但旧的 Spotlight 索引路径没有被清理。
登录时,spotlightknowledged 会读取 EnabledIndexes 文件里的路径,将图库里的索引加入到 Spotlight 的索引里面。
可是由于记录了一个不存在的目录,spotlightknowledged 就会代为创建整个的索引文件夹。
解决方法
删除此文件,注销后重新登录即可:
1 | rm ~/Library/Containers/com.apple.managedcorespotlightd/EnabledIndexes |
登录后需要等待约 10 分钟,EnabledIndexes 会自动重建为正确的。
在它重建之前,Spotlight 里无法搜索图库里的文字。重建后恢复正常。