直接用 tmutil thinlocalsnapshots 命令可安全批量清理过期本地快照,自动跳过受保护快照,释放被锁定的APFS共享空间,无需外接硬盘或手动逐条删除。
直接用 tmutil thinlocalsnapshots 命令就能批量清理过期或冗余的本地快照,无需逐条删除,也不依赖外接备份盘。
快速释放空间的核心命令
在终端中运行以下命令:
sudo tmutil thinlocalsnapshots / 999999999999999 4
这个命令的意思是:对根卷(/)发起一次“最大力度”的本地快照瘦身操作,目标释放字节数设为极大值(约 999TB),最多尝试清理 4 层快照链。系统会自动跳过正在被 Time Machine 同步、或刚创建未满 24 小时的关键快照,只删掉那些已失效、重复、或滞留过久的残留快照。
- 执行后会显示类似
Deleted X local snapshots的提示,表示成功清理数量 - 如果返回
No local snapshots for volume '/',说明快照实际挂在数据卷上,改用:sudo tmutil thinlocalsnapshots /System/Volumes/Data 999999999999999 4 - 该命令安全、可逆,不会影响当前系统运行,也不会破坏 Time Machine 的连续性
为什么不用 deletelocalsnapshots 逐条删
更新失败后残留的快照往往不是单个,而是一串时间接近、互相引用的快照链。手动删中间一个可能触发保护机制失败,甚至让前后快照都变“不可删”。thinlocalsnapshots 是 Apple 官方设计的智能清理接口,它理解快照依赖关系,能自动识别并安全断开冗余链路。
- 不需提前查快照名,省去
listlocalsnapshots步骤 - 绕过“Stale NFS file handle”等常见报错(这类错误常出现在空间极度紧张时)
- 比
diskutil apfs deleteSnapshot更稳妥——后者绕过 Time Machine 管理层,易导致后续tmutil命令异常
清理前建议确认两件事
虽然命令本身很鲁棒,但为避免白跑一趟,可快速验证两点:
- 先运行
tmutil listlocalsnapshots /或diskutil apfs listSnapshots /System/Volumes/Data,确认确实存在快照(尤其留意含com.apple.TimeMachine.或Preboot字样的) - 检查磁盘是否真的卡在“几乎满但删不动”状态:运行
df -h /和df -h /System/Volumes/Data,看Available是否低于 2GB
若空间已彻底耗尽(如只剩几十 MB),终端可能无法启动新进程,此时需先进恢复模式,再挂载宗卷执行清理。
更新失败后快照为何特别多
macOS 在系统更新过程中会频繁创建临时快照用于回滚,比如安装器下载阶段、预检阶段、以及重启前的 final snapshot。一旦更新中断(网络断、断电、磁盘写入失败),这些本该在成功后自动清除的快照就会滞留,且标记为 Purgeable: No,普通用户无法感知也无法通过访达释放。
- 它们计入“系统数据”,但在储存管理界面不单独列出
- 即使你删了大量文件,可用空间也不增加——因为快照锁住了底层块
-
thinlocalsnapshots是少数能穿透这层锁定、触发 APFS 共享空间回收的原生命令


















