可清除空间(Purgeable)是什么?

在 About This PC 的系统对话框中,能够查看到这个空间:

img

如果你有 iStatsMenu,在菜单栏的 SSD 用量下拉图标里也能看到它:

image-20210308101038996

这块莫名其妙的地盘,很多人都持有不爽的看法。然而通常你可能无法获得进一步的有效表述,因为 Apple 的官网挂羊头买狗肉的事绝对不止这一桩。

所以我们在本文中就是打算把自己通过各种渠道了解的信息组织出来,顺便也从 OS 实现原理的角度来挖掘这块地盘或许都会有些什么。

简单地说,它就是时间机器备份

TM 做的那些事

在 macOS 的时间机器的实现机制中,包含若干层级,分别完成对整颗硬盘的文件及其历史的多层次索引。当然这和 Spotlight 的索引是不同的,这部分实现缺乏有效的文档表述,所以只是一种反向求证。

但你需要知道的就是,为了完成 TM 需要实现的那些功能,macOS 必须在你的硬盘上开辟足够的空间,用来记录曾经有哪些 TM 硬盘/Server 被用于本机,而对应于每块 TM 硬盘/Server 又会有一套全盘所有文件的 FileInfo 记录(记录至少包含创建、修改时间,文件尺寸,HASH),然后随着本机被使用,又会在这套基本记录上建立若干的变更记录(例如哪些文档删掉了,哪些改过了,哪些频繁在修改)。

由于性能和设备寿命的考虑,macOS 不可以随时随地地记录这些日志,所以它是定期刷新的。定期刷新的问题在于可能会导致少量的丢失,例如系统崩溃,突然掉电(电池归零)等等意外。所以有需要衍生的其他辅助记录来帮助修订这套所谓的历史变更记录。

每当一次 TM 备份(无分是完整备份还是增量备份)完成之后,上述记录又会被打包和压和。

所以这一整套的 TM 记录,就是所谓的万恶的 Purgeable Space 了。

Spotlight 建立的是全文索引(只要有可能),这部分内容主要是一个”巨大”的单词表以及反向索引,但单词表无论怎样巨大也是有限的。

其次,Spotlight 占用的空间是不应该被清除掉的,因为:

  1. 不能想象没有 Spotlight 支持之下,我该怎么使用电脑,以及数以亿计的海量文档

系统中确实有办法让你能够回收这块空间,以及重置这块索引,或者停用 Spotlight。但这就是另外的 Post 的话题了,不在本文内。

Purge the Purgable Space

没有明确的 GUI 工具能够回收这块空间。

已知有一些第三方软件能够办到这件事,由于那些都是流氓系,我无法对其报以信任感,所以不提。

现今已被证明切实可行的方法,有两种方法:tmutil 或者 Boot Camp Assistant

tmutil CLI Tool

tmutil 是一个命令行工具,它提供的功能中包含:

1
tmutil deletelocalsnapshots [<mount_point> | <snapshot_date>]

所以你可以通过不带参数来回收 TM 本地缓存记录。

基于旧版本 macOS 的 tmutil 还可能提供别的子命令,例如 disablesync,disablelocalsnapshots 等等,但均已失效了,不提。

Boot Camp Assistant

其次的方法是通过一个间接手段:

打开“启动转换助理”(Boot Camp Assistant),点“继续”按钮,这会启动一组内务,包括清理较旧的时间机器备份。

等它完成,去到新画面的时候,关掉这个助理,因为我们并不真的想要安装 Windows。

现在你的 SSD 已经全部归你了。

为何有时候做了回收仍然看不到变化?

有时候即使你做了上面的清理手段,依然不能看到可清除空间被回收,为什么?

首先可清除空间是随时会被生成的。它不仅仅是所谓的 TM 旧历史记录,也包含其他系统用于追踪的计算信息。其次 macOS 针对 SSD 的剩余空间计算是一种动态算法,这意味着你并不可能真的获得精确的剩余空间余量。最后一种情况是某些应用程序可能临时锁定硬盘的内务日志更新,导致必要的计算不能被计算并体现到 UI 上。

例如当你正在做一个长时间的复制或者移动操作,你的 Finder 正在陷入某种长时间的内务更新,诸如 quicklook 在一个糟糕的视频的预览图呈现时挂起,或者一个巨型文件的 spotlight 正在索引,或者数百万超小型文件正在被索引,等等。

其他的可能性还包括你正在运行某些磁盘工具,例如 OmniDiskSweeper,Densixxxx等等。

一般来说,关机然后重启并进入你的桌面后,静置数分钟误操作后,你应该可以看到相对稳定精确的剩余空间余量。

Purgable Space 有什么坏处

可清除空间是非常有必要的,因为 TM 的记录虽然似乎确实可以无害地删掉,但实际上下次连接到 TM 盘/Server 他们还是会被重建,当然那时候需要的地盘不会特别大。

除了上面这一点而外,我们确实能够发现它的一些真实的“坏处”:

  1. SSD 的剩余空间尺寸可能是不确切的

    在 Finder 的状态栏中我们可以查看到 SSD 到剩余空间,但它可能并不确切。因为这个剩余空间中包含了 Purgeable 区域的尺寸。

    我们已经提到过,剩余空间是不可能精确的,因为还有其他用于 SSD 的内务空间会被消耗,例如 SSD 需要一块替代区域以保证写入操作能够被体现到磁盘分区中。如有兴趣,请了解 写入放大 - 维基百科,自由的百科全书 以及闪存的相关物理特性。

  2. 有的操作无法完成——明明我还有辣么多地盘!

    由于 Purgeable 区域在 文件系统(FS) 的角度看是确实分配出去了的,所以你要拷贝大量大尺寸文件时说不定会遇到“空间不够”的提示,尽管看磁盘剩余空间还有足够多。

  3. 在 Samba 中你看到的剩余空间是真实的

    在那里标注的剩余空间不包含 Purgeable 区域的尺寸。有时候会引发错觉,当你连接多台 iMac 时。

    为什么不 afp?afp 挂上来的卷可能不是我想要的,但我没办法控制它,还是 Samba 好,想挂那个就那个,全都明明白白排列在文件夹中等着我临幸呢。

That’s it?

就这样了吗?不一定。Purgeable Spaces 实际上并不真的只有 TM 历史记录这一种内容。Boot Camp Assistant 能够回收的也不只是 TM 历史记录这一类空间。

只不过其他的 OS 内务也就不必提及了。这些内容可能包括但不限于如下内容:

  • Invoked History
  • Usages Statistics
    • Screen Statistics
    • Power/Battery Statistics
  • Crashlog and Kernel Dumps
  • GPS History

可清除空间大体上就是 OS 内务中的可丢弃的历史记录 的用户端的粉饰后的代名词。

操作系统能干的事太多了。你能干的它都能干,你不能干的它还是能干。

:end:

结束了。这次做得还是怪认真的。