article_image

根据特斯勒复杂守恒定律,貌似简单优雅的东西背后,可能是一个草台班子。或者一个烂摊子。在所有云同步服务中1,iCloud 貌似是最优雅的,但实际上也是最稀烂的,以至于同步失败早已成为家常便饭(或者成为身处国外者的炫耀资本)。

但当你深入挖掘 iCloud 的文件夹结构,将会发现,这栋建筑比任何人能够想到的还要支离破碎,简直堪比用一个周末做出来的学生项目。2Hoakley 关于 iCloud 的系列剖析文章已成经典,时不时就冲上 Hacker News 热门,这是你客观看待 iCloud 的最好阅读材料。

——但,本文做不到客观(至少不能像 hoakley 那么客气)。因为,我们即将尝试从 iCloud 手中抢回少则几GB、多达几百GB的空间。

CloudDocs 文件夹

俗话说,不见棺材不掉泪,如果不是一批用户的电脑空间被吃空耗尽,估计 iCloud 滥用的空间的问题还迟迟不会浮出水面。每隔一段时间就会有人抱怨,他们的 iCloud 缓存达到三十多GB或者将近一百个GB甚至一百多个GB,不幸的是,人工智能式的回复从不解决问题,很多人根本不敢删除,而 Mac 的硬盘又价比切糕,最后大家只能更换硬盘更大的电脑并订阅空间更大的 iCloud。

——但,如果我在 iCloud 上只有不到 20mb 的文件,缓存体积却达到它的几百倍呢?问题绝对不在于我,问题一定出在 iCloud 上。

Alt text
CloudDocs 下的文件夹体积可能高达几个GB

现在,请打开下面的文件夹,检查一下 iCloud 在您的电脑上隐藏了多少文件:

~/Library/Application Support/CloudDocs/session/i

为了和下一节的缓存文件相区分,恕我简称本节的目标为“CloudDocs 文件夹”,但其实特指上面路径中的 i 文件夹。不要害怕,直接点进这个文件夹——放心,不会弄坏任何东西——然后切换到图标视图,显而易见,其中的文件均为独立文件,有大有小,凭着记忆,我意识到这些都是我曾经放在 iiCloud 里的东西(绝大部分是丢在桌面上的)。

Alt text
CloudDocs 文件夹

诡异的是,尝试按日期排序后,我发现 CloudDocs 文件夹中最古老的文件可以追溯到一年多以前,这还很可能是我当时重新登录过 iCloud,否则里面的东西会更古老。

Alt text
CloudDocs 文件夹中的东西可能可以追溯到一年多以前

疑问生焉:这些东西,究竟是残留的已删除文件(相当于 iCloud 版的回收站),还是其他类型的缓存?一定不是前者,因为我的 iCloud 最近删除页面中只有几十个文件,而 CloudDocs 中的文件数量十余倍于斯。

Alt text
iCloud 中的最近删除页面,显然和 CloudDocs 文件夹不是同一个东西

事实上,这些文件是 iCloud 中待上传的文件,举个例子,你可能不小心把一部10GB电影文件移到了桌面,在上传之前,你眼疾手快把它移回了下载文件夹,但是,iCloud 中的上传过程或许已经开始,10GB的空间也被偷偷吃掉。而无论是重启或者杀死 bird 进程以重置 iCloud 同步,都不会对 CloudDocs 文件夹产生任何影响。

通常,我们只有在退出 iCloud 并重新登录时,或者按某些偏方手动一通乱删时,才会清除 CloudDocs 文件夹中的缓存。

一言以蔽之,CloudDocs 是 iCloud 失败的耻辱柱。如果它体积过大,你完全可以大胆删除它,最严重的后果无非重置目前正在进行的同步进程——不仅无害,说不定还会让你的同步更顺畅!

MMCS 文件夹

相比 CloudDocs 文件夹,另一处 MMCS 文件夹(同样是简称3)更为神秘。

Alt text
MMCS 文件夹
~/Library/Caches/CloudKit/com.apple.bird/这里是一串随机数字,请手打打开检查/MMCS/ClonedFiles/

如果说 CloudDocs 中的文件还看得出是什么,那么 MMCS 下的东西就显得莫名其妙,全是没有拓展名的随机名称文件,让人退避三舍。这也导致在谈及 MMCS 文件夹时,多数人的态度是留着不动——如果他们意识到这个文件夹的存在的话。

——但,如果 MMCS 吃掉了你电脑上80%的空间呢?你可以换一台 2TB 硬盘的新电脑,这是 Apple 最愿意看到的事情,但相信我,如果你的使用习惯导致你今天损失了 200GB 空间,那么这个数字膨胀到 2000GB 只是早晚问题。或许不会太久,说不定两季美剧的时间就够了。我的 iCloud 里最占体积的只是几张执照和证书扫描件,但我的 MMCS 文件夹依然达到了 5.89GB。

Alt text
我的 MMCS 文件夹多达5.89GB

不过我偏偏不信邪,浏览 MMCS 中的文件目录时,我发现其中部分带着标签……而且是我自己打上去的标签(Tag),不是那些随机生成的颜色标记(Label),这意味着 MMCS 中的随机名称文件或许是经过特殊处理的文件缓存。实验方法很简单,打开 MMCS 文件夹,切到按添加时间排序,再往桌面上丢一张截图(当然,你要开启桌面的 iCloud 同步),你会看到,MMCS 出现了一个体积和截图一模一样的随机名称文件。

Alt text
MMCS 中的文件就是 iCloud 中的文件

那么……试试用预览程序打开这玩意儿?很好,原来所谓的随机名称文件,就是刚刚丢到桌面上的那张图片。我再尝试打开了几个体积巨大的文件,原来是 PDF 或 Word 文档,而且相当一部分是我早就删除、连垃圾桶都清空过的。

Alt text
MMCS 中的文件可以用默认程序正常打开

易言之,MMCS 不过是改了文件名的 CloudDocs 文件,让你不知所以。但至少可以肯定一点,你也可以大胆删除 MMCS,而不必担心影响 iCloud 同步。

Alt text
删除 MMCS 文件,并不影响 iCloud 同步

小结

正如 hoakley 所发现的,不存在某个叫 iCloud 的实体

有的只是由一堆复杂服务组合起来的弗兰肯斯坦,而 CloudDocs 和 MMCS 正代表了其中的两套机制,它们似乎有所交叠,但又找不到任何公开文件说明其工作机制,我们只能旁敲侧击,从种种迹象判断,它们藏匿了大量和 iCloud 有过接触的文件。

我不知道这种设计的意义何在,或许就没什么设计。

我能想到的唯一积极方面在于,或许下次当你误删文件时,可以在这两个文件夹中碰碰运气。4


  1. 你很容易验证这一点,只需追踪其 log。
  2. 在技术上,唯一的区别在于此学生写不出那么多又臭又长的代码,但在人工智能帮助下,有可能。
  3. MMCS 是 MobileMe Chunking Service 的缩写。知道这个服务的读者,可能是真的很老了……
  4. 在技术上,每次修改文件时,iCloud 都会在两个文件夹中半随机保存新版而不删除旧版,这是一种非常不可靠但确实有用的备份机制。但黑客也一定很喜欢它。https://cdn.utgd.net

author_avatar

Lawyer, macOS/iOS Automation Amateur