Mac 存储空间指南

Mac 存储满了,却什么都找不到?

macOS 把大部分答案放进一条叫「系统数据」的灰条里,而且不给你打开它的办法。里面并没有什么神秘之处 —— 它就是十个普通的文件夹,每一个你都可以去看。

14 天免费试用,无需银行卡。 之后一次性 15 美元,可用于 3 台电脑。无订阅。

Bytesweep 把 Mac 的「系统数据」拆解成它实际由哪些文件夹组成

「系统数据」是剩余项,不是一个类别

macOS 会把能归类的内容分到「应用程序」「文稿」「照片」「音乐」等等。凡是归不了类的,都落进同一块。旧版本把它叫作「其他」。它不是系统文件夹,也没有受保护,而且其中很多根本不属于操作系统 —— 在开发者的 Mac 上,大部分是你自己的开发工具。

数字为什么从来对不上

有三件事让访达显示的数字与你实际能释放的不一样。 可清除空间 被算作已用,但 macOS 认为它可回收,因此不会让你直接删除。 仅在云端的 iCloud 文件 按完整大小计算,尽管它们并不占用空间。还有 APFS 压缩与硬链接 意味着一个文件的逻辑大小和它的磁盘占用是两个数字 —— 访达给你看的是其中一个, du 给你看的是另一个。

先核对真实数字

在删除任何东西之前,先看看磁盘本身报告了什么,包括可清除空间:

diskutil info / | grep -E "Free|Available"
df -h /

里面到底有什么

十项,按它们通常的大小顺序排列。每一项都是你可以打开的真实文件夹。

Time Machine 本地快照

即使 Time Machine 已关闭,仍保存在内置硬盘上的每小时快照。通常是最大的一块,也最难找到,因为访达把它们报告为可清除空间而不是文件。

tmutil listlocalsnapshots /

Xcode DerivedData、归档和设备支持

构建中间文件和符号缓存。在一台正在使用的开发者 Mac 上,二十到六十 GB 很平常。

~/Library/Developer/Xcode/DerivedData
~/Library/Developer/Xcode/iOS DeviceSupport

iOS 模拟器运行环境

每个被模拟的 iOS 版本都有一份完整的系统镜像,再加上 Xcode 已无法使用的设备。

~/Library/Developer/CoreSimulator/Devices

iPhone 和 iPad 备份

每次备份一个带日期的文件夹,往往还有好几个属于你早就不用的手机。

~/Library/Application Support/MobileSync/Backup

Docker 的磁盘映像

一个文件装着所有镜像、容器和卷,只会变大,自己永远不会缩小。

~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

或者一次看到全部十项及其真实数字

难的不是这份清单,而是把它们量出来。每一项都是不同的命令,而其中一半报告的大小还和访达对不上。Bytesweep 约十秒就能打开那条灰条,一键精简 Time Machine 快照,并把你清理的一切放进可在七天内撤销的还原点。

应用缓存和容器

Safari、Chrome、Spotify、Slack 以及每个沙盒应用。单个很小,加起来很大,而且几乎全都会重新生成。

~/Library/Caches
~/Library/Containers

邮件附件

「邮件」在本地缓存了多年的下载附件。

~/Library/Containers/com.apple.mail/Data/Library/Mail Downloads

已删除应用的残留

多年前离开这台 Mac 的应用留下的支持文件、偏好设置和启动项。macOS 上没有任何机制会清除它们。

其实并不在本地的 iCloud 文件

仅在云端的文件却按本地计算。这就是「系统数据」有时会自己变小、有时又纹丝不动的原因。

开发者的包缓存

Homebrew、pip、npm、cargo 和 Gradle 各自都有一份按需重建的归档缓存。

brew cleanup -s

安全、需谨慎,以及别碰

可安全清除

应用缓存、构建产物、包管理器缓存、不可用的模拟器,以及早于你最近一次备份的 Time Machine 本地快照。这些要么会重新生成,要么在别处还有一份。

值得先看一眼

设备备份、你可能还要适配的模拟器运行环境、模型权重,以及归档的 Xcode 构建。它们可以重新获取,但很慢 —— 而你删掉的归档,会连同为那个版本的崩溃报告做符号化的能力一起带走。

绝不

位于 /System/private/var/db中的任何内容、钥匙串,或者某个应用当前打开着的数据库。在现代 Mac 上系统卷是只读且经过签名的,因此其中大部分已经替你拒绝了 —— 但 ~/Library 并未受到保护,事故正是发生在那里。

把灰条拆成文件夹来看

Bytesweep 会为上面每一项点名、量出大小,并一键精简 Time Machine 快照。你清理的一切都会先进入还原点,因此七天内撤销只需一次点击。

相关内容: 如何在 Mac 上释放空间 · 磁盘空间分析工具

问题

我可以直接删掉「系统数据」吗?

没有什么可删的 —— 它是柱状图上的一个标签,不是文件夹。你删的是它里面一个个具体的东西,而其中一些是你的应用需要的文件。所以答案永远是「打开来看」,而不是「清空它」。

为什么我 Mac 上的系统数据有 150 GB?

在开发者的 Mac 上,通常的答案是 Xcode 加 Docker 加本地快照,三者相加很容易到这个数。在用于照片和邮件的 Mac 上,更常见的是本地快照加邮件附件加 iPhone 备份。

为什么我删了之后它又长回来?

因为里面大部分是缓存。清掉 Xcode 的 DerivedData 能换来 40 GB,直到下一次构建。本地快照一小时之内就会回来。这不是故障 —— 那些文件夹本来就是干这个的。重要的是把总量控制在你能接受的范围内。

重装 macOS 能解决吗?

能清空它,代价是一整天。这个页面上的所有内容都可以不重装就清理掉,而且重装也阻止不了它回来,因为同样的工具会重建同样的缓存。

可清除空间真的是可用的吗?

基本上是。macOS 会在有东西需要空间时释放它,所以即使访达说你没有空间,一次大的复制通常也能成功。但如果某个工具因为预先检查可用空间而拒绝启动,它帮不了你;而且除了你自己删掉快照,也没法按需释放它。