我最近这两天正在整理自己各种电子设备中的文件。没用的删掉,其他东西摆一摆位置什么的。折腾一整天,本来想看一看删了多少东西的时候,我发现了一个诡异的现象。我的硬盘剩余空间变得非常小,甚至不如清理之前,而占据空间最大的,竟然是「系统」。而上面写的 223G 可用更是非常诡异,实际上可以用的剩余空间 20G 都不到。

可能的情况

文件系统错误

遇到这种异常膨大的东西时候,首先会想到的可能性是文件系统错误。早在一年前,我的电脑就出现过类似的状况,就是由于文件系统错误导致的,只不过那次膨胀的是「其他」,而这次是「系统」。于是我重启进入 Recovery(开机时按住 ⌘Command-R)运行磁盘工具进行急救。对于系统盘而言,急救只有在 Recovery 中进行,才可以解决某些问题。

应用程序数据残留

在以前版本的系统中,「其他」体积特别大而又搞不清楚为什么大多数情况都是因为这个。

在 macOS 中,应用程序一般将自己的数据存放在:~/Library/Application Support 中,在应用程序删除时,这些文件并不会被自动删除。目的是能够让你下次安装软件的时候直接继续按照之前的状态使用,但是 macOS 一直在这件事情上毫无节制,使得很多软件残留了大量的文件。

如果你对自己的电脑里装了什么心里很有数的话,是可以尝试手动清理的。CleanMyMac 虽然能够清理掉很多这里的缓存,但是会有不少漏网之鱼。我删掉了五六个还蛮大的文件夹,但是并没有哪个文件夹能大到占 200G。

本地快照

本地快照是一个很早就有的特性。在 APFS 中,当你对硬盘进行修改的时候,文件系统会将这些被修改的文件备份起来,生成一些快照。这些文件在一般情况下并不会占用太多的空间,因为 24 小时后就会被系统删除。但是如果你在一天之内删除或者修改了太多的文件的话,就会出现这样的状况了。

拓展阅读:为了这一个最重要的变化,macOS High Sierra 也值得升级:APFS 详解

虽然苹果声称,这些文件将会在空间不足时自动删除,但这些都是真实存在的空间占用。假如你现在要进行的操作所需的空间大于当前的可用空间(比如安装 Boot Camp),就会直接报错了。所以掌握清除本地快照的方法可以在关键时刻帮你解决问题。

如何清除本地快照

在 macOS 10.13 之前的版本中,文件存储在 /.MobileBackups 这一文件夹中,可以直接删除。而且也可以通过在终端中运行 sudo tmutil disablelocal 关闭本地快照功能。但是在 10.13 之后,APFS 将本地快照引入了底层,快照文件的存储位置实际上是在另一个分区中!(与 APFS 的容器格式特性有关)所以你无法手动删除这些文件,而上面提到的关闭本地快照的命令也被苹果移除了。

所以在 APFS 中,我们就需要更复杂的步骤来清除这些文件。首先在终端中输入以下命令,列出快照列表。

sudo tmutil listlocalsnapshots /

图中显示了目前在本地磁盘中的快照列表,要删除它们,你可以一个一个删,也可以整个删掉。删除单个快照的命令是:

sudo tmutil deletelocalsnapshots [Date]

使用的时候把这里的 [Date] 替换成上图中的日期编号即可。注意只复制日期,如:

sudo tmutil deletelocalsnapshots 2018-03-19-055945

批量删除的时候就比较复杂了,苹果并没有提供一个删除全部快照的命令,只提供了另一个删除指定大小快照的命令:

thinlocalsnapshots / [purge_amount] [urgency]

其中,[purge_amount] 要填写删除的大小,以 Byte 为单位,[urgency] 要填写挤压的程度,范围从 1 到 4,会使用不同的清除方案。

对于我们此处这个删除全部的需求来说,我们直接把要删除的大小设置为 100G,挤压程度为 4 即可。命令为:

sudo tmutil thinLocalSnapshots / 100000000000 4

运行需要一定的时间,执行成功后将会消除 100G 大小的快照。

图里少了个 0,别介意

接下来再尝试列出快照列表,如果还有就再执行几次,最多三次应该也就清理的差不多了。这时候再打开关于本机,就可以看到空间已经被释放了。

什么是本地快照

本地快照是 Mac 文件保护的机制中的一环。Mac 的备份主要由三部分构成:
  • Time Machine
  • 文件版本
  • 本地快照

首先第一个大家非常熟悉,Time Machine 属于定时备份,在固定的时间后进行一次增量备份,备份的位置必须是其他分区。在目标磁盘没有满之前,会一直保存下去。

第二个文件版本会在修改文件时,macOS 会在 /.DocumentRevisions-V100 保存文件最近修改的版本,但是需要文件格式支持。备份与本分区共享可用空间,在没有达到限制大小之前,会一直保存下去。有些时候一些视频文件被存储了旧版本的话会导致极大的空间占用,但还好这玩意比较容易清理,很多软件都能干。

本地快照则比较低层,对于磁盘中所有的文件修改,本地快照都会进行备份,备份与本分区共享可用空间。它与文件版本除了能够支持所有文件这一区别外,还可以对磁盘的格式化进行恢复。但是这一备份只保留 24 小时,意味着该机制仅仅是作为一个备份到 Time Machine 之前的事故预防措施而存在的。所以清除本地快照一般情况下没有任何风险。

一些唠叨

不管是曾经困扰 Mac 用户的「其他」还是现在的「系统」,都体现了一个问题,就是苹果对与自己磁盘占用的表示非常不明确。我个人认为,在图表中清楚的标明备份所占用的体积是非常有必要的。否则本地快照这样一个频繁变化且幅度如此之大的磁盘占用会相当程度上影响用户对硬盘剩余空间的判断,这个磁盘空间的图表就变得没有任何意义了。

由于本地快照功能现在直接整合在 APFS 之中,使得它已经不再能够被关闭,而苹果又没有提供一个方便的方案来清理这些文件,希望以后能有一个优雅一点的解决方案。

相关链接


> 下载少数派 iOS 客户端、关注少数派公众号,了解更多实用技巧 💡