跳转到内容

APFS 快照:本地时间机器的工作方式 ​

「磁盘明明还有 200 GB,为什么提示空间不足?」或者反过来,「删了一堆文件,可用空间怎么没变?」

这两个问题的答案通常是同一个:本地快照。时间机器在备份盘不在身边时,会把变更记录在本机磁盘上,占的就是这部分空间。

开始之前 ​

本文的查询命令只读。删除快照的命令会真正删掉数据,单独标注了后果——读完再决定要不要执行。时间机器的基本用法见备份与恢复。

快照是什么 ​

APFS 快照记录某一时刻整个卷的状态。它不是文件的副本——只记录此后发生的变化,所以刚建立时几乎不占空间,随着文件被修改和删除逐渐变大。

关键在最后半句:删掉一个文件,如果它还在某个快照里,空间不会立刻释放。因为快照需要保留删除前的那份内容,才能在恢复时把它找回来。

开启时间机器后,系统会定期自动建立本地快照,在备份磁盘不可用时也能提供有限的回溯能力。这是「本地时间机器」这个说法的由来。

看看现在有哪些 ​

sh
tmutil listlocalsnapshots /

tmutil 是时间机器的命令行工具,listlocalsnapshots 后面跟卷的挂载点。输出形如 com.apple.TimeMachine.2026-09-11-093000.local,末尾那串就是创建时间。

只看日期:

sh
tmutil listlocalsnapshotdates

按 man tmutil 的说明,日期格式是 YYYY-MM-DD-HHMMSS。不带参数时列出所有卷的。

另一个角度:

sh
diskutil apfs listSnapshots /

diskutil 是磁盘工具的命令行版本,这个子命令从文件系统层面列出快照,能看到快照的 UUID 等更底层的信息。两条命令看到的是同一批快照。

空间去哪了 ​

这是最实用的一节。

sh
df -h /

df 报告的是文件系统层面的真实占用,快照占的空间算在「已用」里。

访达「关于本机 → 储存空间」看到的数字往往更乐观,因为它把可清除空间(purgeable)算进了可用——那是系统认为「必要时可以自动腾出来」的部分,快照正是其中大头。

所以两边数字不一致不是 bug,而是两种统计口径:

你看到的它在说什么
df 的 Available现在真正空着的
访达的可用空间现在空着的 + 必要时能腾出来的

理解这一点就能解释「删了文件可用空间不变」:文件还被快照引用着,暂时释放不了。

系统会自己处理 ​

多数情况下你不需要手动管理快照。 磁盘空间紧张时,系统会自动删除较旧的本地快照来腾地方。这套机制是设计好的,不是需要你介入的故障。

有一条手动触发的命令:

sh
tmutil thinlocalsnapshots / 20000000000 4

thinlocalsnapshots 后面依次是挂载点、希望回收的字节数、紧急程度。按 man tmutil 的说明,紧急程度取值 1 到 4,数字越大越激进。上例是尝试回收约 20 GB。

注意它是「尝试」——实际能回收多少取决于快照的内容。

删除快照的后果 ​

sh
tmutil deletelocalsnapshots 2026-09-11-093000

指定日期时,删除所有已挂载磁盘上该时刻的快照;也可以指定挂载点,删除该磁盘上的全部本地快照。

这个操作不可撤销。 删掉之后,那个时间点的文件状态就不能再从本机恢复了。如果你的外置备份盘是最新的,损失有限;如果最近没做外置备份,这可能是你误删文件后唯一的回退点。

所以顺序应当是:先确认外置备份是新的,再删快照。不要在「磁盘满了很着急」的情绪下跳过这一步。

也不要把定期删快照写进自动化脚本——那等于主动放弃了一层保护,换来的空间系统本来就会在需要时自己腾出。

一个正当用途:升级前后 ​

快照确实有一个值得手动使用的场景:做一次有风险的改动之前,主动建一个。

sh
tmutil localsnapshot

它会为所有纳入时间机器备份的 APFS 卷建立新的本地快照。装一个不确定的软件、改一批配置之前跑一下,心里有底。

但要清楚它的边界:本地快照和真正的备份不是一回事。它和你的数据在同一块磁盘上,磁盘坏了两者一起没。它替代不了外置备份盘或异地备份,只是让「刚才那步操作想撤销」变得容易。完整的备份策略见数据与远程。

检查结果 ​

sh
tmutil listlocalsnapshots / | wc -l

wc -l 统计行数,也就是当前快照数量。开着时间机器的机器上通常有若干个;输出 0 说明没有本地快照(没开时间机器就是这种情况)。

sh
df -h /System/Volumes/Data

对比这里的 Available 和访达里显示的可用空间。两者差得多,说明有相当一部分是可清除空间。

动手练习 ​

不删除任何快照,把这件事看明白:

  1. 执行 tmutil listlocalsnapshotdates,记下最早和最新的快照时间。
  2. 执行 df -h /System/Volumes/Data,记下 Available。
  3. 打开「关于本机 → 储存空间」,记下访达报告的可用空间,和第 2 步比较。
  4. 执行 tmutil localsnapshot 手动建一个,再跑一次第 1 步确认多了一条。
  5. 等一会儿再看 df,观察新快照几乎不占空间——因为此刻还没有变化需要它保留。

成功标准是第 3 步能说清两个数字为什么不同。这一点想通之后,「磁盘空间莫名消失」就不再是一个谜题,你也不会再去装那些声称能「释放隐藏空间」的清理软件——相关辨析见优化传言辨析。

返回系统内部