外观
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 4thinlocalsnapshots 后面依次是挂载点、希望回收的字节数、紧急程度。按 man tmutil 的说明,紧急程度取值 1 到 4,数字越大越激进。上例是尝试回收约 20 GB。
注意它是「尝试」——实际能回收多少取决于快照的内容。
删除快照的后果
sh
tmutil deletelocalsnapshots 2026-09-11-093000指定日期时,删除所有已挂载磁盘上该时刻的快照;也可以指定挂载点,删除该磁盘上的全部本地快照。
这个操作不可撤销。 删掉之后,那个时间点的文件状态就不能再从本机恢复了。如果你的外置备份盘是最新的,损失有限;如果最近没做外置备份,这可能是你误删文件后唯一的回退点。
所以顺序应当是:先确认外置备份是新的,再删快照。不要在「磁盘满了很着急」的情绪下跳过这一步。
也不要把定期删快照写进自动化脚本——那等于主动放弃了一层保护,换来的空间系统本来就会在需要时自己腾出。
一个正当用途:升级前后
快照确实有一个值得手动使用的场景:做一次有风险的改动之前,主动建一个。
sh
tmutil localsnapshot它会为所有纳入时间机器备份的 APFS 卷建立新的本地快照。装一个不确定的软件、改一批配置之前跑一下,心里有底。
但要清楚它的边界:本地快照和真正的备份不是一回事。它和你的数据在同一块磁盘上,磁盘坏了两者一起没。它替代不了外置备份盘或异地备份,只是让「刚才那步操作想撤销」变得容易。完整的备份策略见数据与远程。
检查结果
sh
tmutil listlocalsnapshots / | wc -lwc -l 统计行数,也就是当前快照数量。开着时间机器的机器上通常有若干个;输出 0 说明没有本地快照(没开时间机器就是这种情况)。
sh
df -h /System/Volumes/Data对比这里的 Available 和访达里显示的可用空间。两者差得多,说明有相当一部分是可清除空间。
动手练习
不删除任何快照,把这件事看明白:
- 执行
tmutil listlocalsnapshotdates,记下最早和最新的快照时间。 - 执行
df -h /System/Volumes/Data,记下 Available。 - 打开「关于本机 → 储存空间」,记下访达报告的可用空间,和第 2 步比较。
- 执行
tmutil localsnapshot手动建一个,再跑一次第 1 步确认多了一条。 - 等一会儿再看
df,观察新快照几乎不占空间——因为此刻还没有变化需要它保留。
成功标准是第 3 步能说清两个数字为什么不同。这一点想通之后,「磁盘空间莫名消失」就不再是一个谜题,你也不会再去装那些声称能「释放隐藏空间」的清理软件——相关辨析见优化传言辨析。