macOS 里的“系统数据”到底是什么(为什么会有 200 GB)
macOS 储存空间里那块标着“系统数据”的灰色区域,点开什么都看不到。这里讲清楚 Mac 的系统数据里到底装了什么、为什么会涨到几百 GB,以及你该怎么自己去查看。
更多同类指南目前仅提供英文版本。 查看全部文章
你打开关于本机 → 储存空间,看到一块灰色区域标着系统数据,占了 187 GB,点它却没有任何反应。
macOS 不给任何解释,也不提供入口。那我们就自己把这件事弄清楚。
“系统数据”根本不是一个具体的东西
它是一个剩余分类。macOS 会把它认识的文件归类——Photos、Music、Applications、Documents、iCloud Drive——剩下所有对不上号的文件,全部被丢进系统数据里。它不是一个文件夹,也不是某个具体位置,只是做减法之后剩下的余数。
这意味着“我的系统数据里到底是什么”这个问题,在每台 Mac 上答案都不一样。而在你这台开发者的 Mac 上,占绝大部分的其实就是一件事:构建缓存。
里面究竟装了什么
按在开发者机器上通常占用空间的多少大致排序:
开发者缓存。 Xcode 的 DerivedData、iOS 模拟器、Docker 的虚拟机镜像、node_modules、Gradle、
Homebrew、npm、pip、Cargo——macOS 对这些统统没有分类,常常能占到这块区域的 60%–70%。
Time Machine 本地快照。 即使你的备份磁盘不在身边,macOS 依然会在内置硬盘上每小时创建一次快照,这能占到几十 GB,而且里面还留着你早就删掉的文件。
系统与用户缓存。 /Library/Caches、~/Library/Caches,以及每个应用自己的私有缓存——光是浏览器就经常占掉好几
GB。
Mail 下载内容。 你预览过的每一个附件,都会被无限期保留下来。
iOS 设备备份。 只要你曾经把手机备份到这台 Mac 上,
~/Library/Application Support/MobileSync/Backup 里就会有 30–150 GB 的数据。
睡眠映像与交换文件。 /private/var/vm 里存着一个和你内存容量一样大的睡眠映像,外加交换文件。
日志与诊断信息。 /private/var/log,加上可以追溯好几年的崩溃报告。
相关的谜团:“容器中的其他宗卷”
磁盘工具里会显示这样一个分类,几乎所有人看到都会觉得出了什么问题。其实什么问题都没有。
APFS 会把多个宗卷——Macintosh HD、Macintosh HD - Data、Preboot、Recovery、VM——放进同一个共享的 *容器(container)*里,它们共用同一个可用空间池。当你查看其中一个宗卷时,其他宗卷占用的空间就会被报告为 “容器中的其他宗卷”。
这不是垃圾,也没有什么可清理的,只是 APFS 把这种共享安排描述得不太直观而已。
为什么可用空间的数字总在变
APFS 会把*可清除(purgeable)*空间也算作可用空间。本地快照和可以被清空的缓存都会被计入可用空间,因为 macOS 认为在空间紧张时它能把这些回收回来。
实际效果就是:访达告诉你还有 40 GB 可用,你想复制一个 30 GB 的文件,结果失败了。那 40 GB 里大部分是可清除空间,而 macOS 没有来得及及时把它们腾出来。
想要一个诚实的数字:
df -h /System/Volumes/Data
自己把这个黑箱打开看看
别再猜了,直接测量:
# Top-level, home directory and Library
du -sh -- ~/* ~/Library/* 2>/dev/null | sort -hr | head -25
# Caches specifically
du -sh ~/Library/Caches/* 2>/dev/null | sort -hr | head -20
# Time Machine local snapshots
tmutil listlocalsnapshots /
# iOS backups
du -sh ~/Library/Application\ Support/MobileSync/Backup/* 2>/dev/null
# Mail attachments
du -sh ~/Library/Containers/com.apple.mail 2>/dev/null
第一条命令给它一两分钟时间。这五条命令加在一起,基本能覆盖任何开发者系统数据里的绝大部分,而且答案通常都很明显——往往就是一两行数据就把其他全部盖过去了。
什么是可以放心删除的
安全,会自动重新生成: Xcode 的 DerivedData、模拟器缓存、Docker 构建缓存、node_modules、所有包管理器的缓存、
~/Library/Caches(先退出应用——有些应用在运行时被抽走缓存会出问题)。
安全,但先想清楚: Time Machine 本地快照是你恢复一小时前删掉的文件的能力所在。只在你现在就需要空间时删除它们,而不要把这当成日常维护:
# Free approximately 50 GB, urgency 4
sudo tmutil thinlocalsnapshots / 50000000000 4
旧的 iOS 备份也是同理——删除前先确认这部手机在别处仍有备份。
不要碰: /System(受 SIP 保护,你本来也动不了)、/private/var/vm(睡眠映像和交换文件由
macOS 自己管理,删了也不会有什么持久效果),以及 /Library 里任何你认不出是什么的东西。
一句话总结
在开发者的 Mac 上,“系统数据”大部分就是macOS 没法命名的构建缓存。这不是数据损坏,不是 bug,也不是什么优化工具能凭空变魔术解决的问题。这就是 Xcode、Docker、npm 和 Gradle 在按设计本该做的事情,只不过做在了一个苹果对你隐藏起来的文件夹里。
完整的开发者存储指南逐一介绍了每个来源以及回收空间的具体命令。DevCruft 是一款正在开发中的免费 Mac 应用,目标是按比例画出整块磁盘并标注每一处,让你不用碰终端也能得到同样的信息。想在它推出时收到通知,可以加入候补名单。