Mac 上的 sleepimage 文件是什么,可以删吗
sleepimage 是 /private/var/vm/sleepimage 这个文件,macOS 在里面放一份睡眠用的内存副本,万一睡眠时断电,靠它恢复你打开的工作。用 sudo 可以删掉,但只要休眠还开着,下次睡眠时 macOS 又会写一份,所以删了也拿不回长期的空间,想让它一直不存在就得改电源设置,而这个设置去掉的正是这个文件要提供的保护。
这个文件是干什么的
man pmset 里 hibernatemode 有三个取值:
hibernatemode |
睡眠时做什么 | 断电的话 |
|---|---|---|
0 |
内存保持供电,磁盘上没有副本 | 当前会话丢失 |
3 |
内存保持供电,同时往磁盘写一份副本,手册里笔记本的默认值 | 从副本恢复 |
25 |
往磁盘写副本后内存断电,睡眠和唤醒更慢,更省电 | 总是从副本恢复 |
standby 也有关系,它打开时,睡了一段时间的 Mac 会转入休眠,同样会写这个镜像,所以 hibernatemode 是 0 的台式机也可能有这个文件。
自己的设置和文件可以这样看:
pmset -g | grep -E 'hibernate|standby|autopoweroff'
ls -lh /private/var/vm
输出里的 hibernatefile 就是它的路径,有时写成 /var/vm,和 /private/var/vm 是同一个地方。
它会有多大
它不一定等于内存大小,核对这篇文章用的是一台 48 GB 内存的 Apple 芯片 Mac,hibernatemode 是 3,sleepimage 是 2.0 GB,具体数字取决于机型和当时内存里的内容,所以别猜,量一下:
du -h /private/var/vm/sleepimage
这个文件和交换文件其实是两回事,只是常被放在一起说,较新的 Mac 上交换文件在单独的宗卷里,可以看 Mac 交换内存怎么回事。存储空间设置通常把 sleepimage 算进「系统数据」,所以它可能是 系统数据很大 的一部分,但很少是主要部分。
要不要删
大多数人不用删,几 GB 空间只能拿回到下次睡眠,这个文件也一直在起作用。磁盘很小确实需要这点空间时,长期有效的办法只有关掉所有会写镜像的设置,手册里说要完全不写休眠镜像,hibernatemode、standby 和 autopoweroff 都得是 0:
sudo pmset -a hibernatemode 0
sudo pmset -a standby 0
sudo pmset -a autopoweroff 0
sudo rm /private/var/vm/sleepimage
pmset -g 没有列出 autopoweroff 的话,跳过那一行。代价是笔记本睡眠时电池耗尽,或者台式机断电,会话就彻底没了,没保存的内容也找不回来。笔记本想恢复原样,把 hibernatemode 改回 3、standby 改回 1,再让 Mac 睡一次:
sudo pmset -a hibernatemode 3
sudo pmset -a standby 1
不要这样做
- 不要反复删这个文件,下次睡眠时它又会把那块空间占回去。
- 不要把
hibernatefile指到外接磁盘,手册写明了它只能放在根宗卷上。 - 不要用论坛上的老办法,换成一个锁定的空文件,这是在和系统设置对着干,还会让你看不清真实状态。
- 笔记本经常把电用光的话,不要关这些设置,这个文件防的就是这种情况。
Mole 能帮什么
Mole 的「清理」没有 sleepimage 这一项,它是系统正在用的文件,删了也空不出多久。「分析」跳过 /private 这些 macOS 系统区域,所以 /private/var/vm 和 sleepimage 不会出现在里面,也没法从 Mole 移到废纸篓。Mole 也不改 hibernatemode,它唯一碰的 pmset 设置是 disablesleep,保持屏幕常亮靠它在合盖时不睡。磁盘满了的话,真正能清的通常在别处,可以先看 Mac 启动磁盘满了怎么办。
常见问题
Mac 上的 sleepimage 可以删吗?
可以用 sudo rm 删,但只要休眠开着,下次睡眠时 macOS 又会写一份。想让它不再出现,要把 hibernatemode、standby 和 autopoweroff 都设成 0,并接受睡眠时断电会话就没了。
sleepimage 为什么这么大?
它放的是睡眠用的内存副本,大小取决于机型和当时内存里的内容,用 du -h /private/var/vm/sleepimage 量一下,别的 Mac 上的数字参考价值不大。
sleepimage 和交换文件是一回事吗?
不是,交换文件是 Mac 醒着、内存不够时放内存页用的,sleepimage 是为了睡眠时断电之后恢复。
hibernatemode 设成 0 会怎样?
睡眠和唤醒可能快一点,这个模式也不再写镜像,但睡眠时断电的话,打开的工作就恢复不了。standby 开着的 Mac 还是可能写镜像,要把它也关掉。
磁盘很小的 Mac 需要在意 sleepimage 吗?
可能需要,256 GB 的磁盘上几 GB 分量不轻,不过还是先看开发工具缓存、iPhone 备份和 App 数据,这些能清出来的空间多得多,也不用改变睡眠的工作方式。