禁止 OS X 生成 sleepimage 的方法

2013-04-13 16:42:45 +08:00
 Livid
http://www.maclife.com/article/howtos/how_remove_diskhogging_sleepimage_file_your_mac

sudo pmset -a hibernatemode 0

对于大内存但是硬盘是 SSD 的机器,还是很有意义的。
8040 次点击
所在节点    macOS
17 条回复
WarWithinMe
2013-04-13 17:31:54 +08:00
这个方法其实是不完全的。
如果是直接sleep(alfred->sleep)的话,swapfile不会创建。
但是如果是只是合上盖子的话,swapfile还是会被创建的。
dqaria
2013-04-13 18:00:23 +08:00
小内存 ssd 怎么破。。。
Livid
2013-04-13 18:01:21 +08:00
@dqaria 小内存机器上这个不是问题,但是在 16G 内存的机器上,就是一坨 16G 的 sleepimage 啊……
humiaozuzu
2013-04-13 18:04:22 +08:00
禁止生成 sleepimage 后,电话唤醒时会快很多
dqaria
2013-04-13 18:10:57 +08:00
@Livid 哦。。就是睡眠时将内存暂存在ssd里啊~~那禁止生成以后没有什么坏处吗?虽然我的内存只有4g。。但ssd也只有128g。。。所以能省尽量省~~
lightening
2013-04-13 18:40:20 +08:00
@WarWithinMe 自从关掉后就再也没有被创建过,无论怎么sleep


@dqaria 坏处是万一sleep时没电了,还没有保存的东西就丢了。(要sleep到没电,估计你从来没遇到过吧)
alexrezit
2013-04-13 20:17:20 +08:00
贴上 @WarWithinMe 说的 swapfile 的禁用方法:

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

建议大内存机器使用.

重新启用需要进入 single user mode:

sudo launchctl load /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
1212e
2013-04-13 22:21:46 +08:00
官方推荐的睡眠模式有三种:0,3,25
默认值:3

sudo pmset -a hibernatemode 0
睡眠后继续对内存供电,不在硬盘上保存内存的镜像(sleepimage),唤醒时从内存恢复数据。

sudo pmset -a hibernatemode 3
睡眠后继续对内存供电,同时在硬盘上保存内存的镜像(sleepimage),唤醒时从内存恢复数据。

sudo pmset -a hibernatemode 25
睡眠后不对内存供电,在硬盘上保存内存的镜像(sleepimage),唤醒时从硬盘恢复数据。
优点是睡眠期间比较省电(电池供电的话),缺点是唤醒慢(但我 SSD 完全感觉不到慢)
wuma
2013-04-14 11:16:42 +08:00
以前查过,似乎sleepImage还起点防范作用的,比如sleep了一个月没开机,电用完了,关了sleepImage的话,内存中的内容就丢了
wuma
2013-04-14 11:33:53 +08:00
又查了一下,10.8.2之后需要lock一个空sleepimage来防止自动创建。

https://discussions.apple.com/thread/4492672?start=0&tstart=0

Ok so I managed to solve my problem. Basically, I couldn't prevent the sleepimage to rebuilt even though my hibernate mode is set to 0, I don't know why but now my sleepimage weights 0 byte instead of 8 gigs. Here's the deal :

First, disable hibernation mode :
sudo pmset -a hibernatemode 0

delete /private/var/vm/sleepimage :
sudo rm /private/var/vm/sleepimage

create an empty file and name it 'sleepimage' :
touch /private/var/vm/sleepimage

change his flag to immuable :
chflags -uchg /private/var/vm/sleepimage

That's it ! Now, OS X won't be able to rebuilt over your sleepimage file since it is locked. This one worked for me, hope it'll work for those who encounter the same problem as mine.
wuma
2013-04-14 11:39:19 +08:00
删除该文件除了省空间并且启动略快点,另一意义在于,每天写一个4g/8g/16g的文件,不符合ssd的养生之道

除了空文件,还有更狠的
sudo ln -s /dev/null /var/vm/sleepimage
gfreezy
2013-04-14 15:33:20 +08:00
@wuma 应该是 chflags uchg /private/var/vm/sleepimage 没有横线
WarWithinMe
2013-04-15 10:43:10 +08:00
@alexrezit 其实我说错了,是sleepimage。。。在我的机器上面,hibernatemode为0时,是sleepimage会在合上盖子的时候重新创建,但后续再合上盖子sleepimage没有被modify。
alexrezit
2013-04-15 10:50:38 +08:00
@WarWithinMe
我的 (10.8.3) 就不会重新创建.
ohhe
2013-04-15 12:13:48 +08:00
我的ssd剩余空间一直小于2G,8G内存的话是不是创建不了image
zucknet
2013-04-16 15:47:23 +08:00
放着吧 8g空间还可以
Chadit
2020-08-06 22:37:16 +08:00
最近才关注到 sleepimage 这个问题,搜到了一篇文章觉得还不错,分享给以后可能会搜到这个问题的 V 友 http://www.iyeele.com/641.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/65794

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX