MAC的睡眠模式介绍
因为之前⽤的是⽹上流传的⼟法来禁⽌⽣成 sleepimage,尝到了苦头,⽽且2次!
⼤家知道 OSX 有⼏种睡眠模式,其中 hibernatemode 可以是 0 (传统睡眠⽅式,不⽣成 sleepimage ⽂件),3 和 25 (Apple 称之安全睡眠⽅式,会⽣成 sleepimage ⽂件),⼤家也都知道可以⽤ sudo pmset -a hibernatemode 0 来禁⽌那个内存镜像⽂件。
以前这个命令⼀直可⽤,直到 OS X Mountain Lion v10.8.2,⼤家突然发现这个命令不起作⽤了,重启电脑或者睡眠⼀段时间后,那个sleepimage ⼜回来了。换句话说,某些型号的 mac,似乎强制使⽤安全睡眠⽅式。
然后⽹上就有各种⼟法,粗暴之极,诸如建⽴⼀个只读的空⽂件,或者⽤ sudo ln -s /dev/null /var/vm/sleepimage 把内存镜像引⼊系统⿊洞。这些⼟法,⼀般⽤⽤⼤概没什么问题,就算有问题,你⼤概也不会太在意,譬如程序崩溃,⼤不了重新启动好了。
我之前就是⽤ /dev/null 这个⽅法,然后我2次系统升级都出问题,2个⽉前 10.9.2 升级到 10.9.3 时,以及昨天 10.9.3 升级到 10.9.4 时,升级安装界⾯2次都停留在同⼀个地⽅,说还有⼏分钟就好了,然后,然后,就没有然后了,等了⼀个多⼩时,状态条动都不动。不得已强⾏关机。
因为我没弄其他任何所谓的系统调试东西,唯⼀运⾏过的 sudo 命令就是这个,所以怀疑是这个⼟法导致升级出错。
然后就觉得要花点时间弄明⽩ OSX 的睡眠⽅式,如果真不能禁⽌ sleepimage,死也要死得明⽩。
以下是我的理解,绝对不同于各⼤中⽂ Mac ⽹站抄来抄去的那些东西。欢迎探讨。
OSX 的睡眠参数,可以打 pmset -g 了解⼀下你的电脑处在什么睡眠模式下:
⽐较有兴趣的参数:
standbydelay 10800
standby 0
autopoweroffdelay 14400
autopoweroff 0
hibernatemode 0
这⼏个参数组成了 OSX 的睡眠模式。
当睡眠开始时,合上盖⼦,或者按电源键,如果你的 hibernatemode 是 0,OSX 是不⽴即往硬盘上写内存镜像的。
autopoweroff 这是欧盟的节能要求,满⾜以下条件时:
接电源
没有外接设备
没有⽹络活动
电脑是 MacBook Pro (Mid 2012 and later), MacBook Pro (Retina, Mid 2012 and later), MacBook Air (Mid 2012 and later), iMac (Late 2012 and later), Mac mini (Late 2012 and later)
到了 autopoweroffdelay x 秒后,就开始启动安全睡眠模式,往硬盘上写 sleepimage,然后进⼊深度睡眠。
standby 满⾜以下条件时:
⽤电池
没有外接设备
没有⽹络活动
没有外接显⽰器
电脑是 MacBook Pro (Retina, 13-inch, Late 2012) and later, MacBook Pro (Retina, 15-inch, Early 2013) and later, MacBook Pro (Retina, Mid 2012), MacBook Air (Mid 2010) and later, SSD and Fusion drive versions of Mac mini (Late 2012) and later, SSD and Fusion drive versions of iMac (Late 2012) and later
到了 standbydelay x 秒后,就开始启动安全睡眠模式,往硬盘上写 sleepimage,然后进⼊深度睡眠。
可见,Apple 的安全睡眠其实是个统称,具体是由2个参数激发的,这2个参数都可以在普通睡眠⼀段时间后让电脑进⼊深度睡眠状态,但是作⽤的条件不相同,基本上⼀个是接电源时⽤,⼀个是⽤电池时⽤。
这也说明了为什么有⼈抱怨为什么在设置了 hibernatemode 0 后,睡眠了⼀段时间后,那个 sleepimage ⽂件⼜出现了,⽽有⼈说没有。这取决于他们各⾃睡眠的时间以及延迟时间的设定,合上⼜马上打开,那个⽂件是不会⽴即⽣成的。
所以,要完全的,合法的禁⽌ sleepimage ⽂件,不但要设置 hibernatemode 0,还要禁⽌电源和电池情况下的节能设置。
也就是说,你要跑下⾯的命令才⾏:
sudo pmset -a hibernatemode 0
sudo pmset -a autopoweroff 0
sudo pmset -a standby 0
sudo rm /var/vm/sleepimage
然后不管你怎么重启,睡眠n久,都不会再⽣成内存镜像⽂件了,当然你的电脑就⽆法再进⼊深度睡眠模式,Apple 官⽅说电池待机能⼒可能会稍稍降低,但我看也未必,普通睡眠状态下电压已经⾮常⼩了。
如果不在乎硬盘空间的,或许不⽤管它,⽤ 0 即可,也就是普通睡眠了⼏个⼩时后才往硬盘写内存镜像⽂件,再进⼊深度睡眠。
如果你也不在乎经常读写硬盘的,或者懒得折腾任何东西的,也可以⽤缺省模式,对笔记本来说是 3,也就是睡眠后马上就写内存镜像⽂件,再在⼏个⼩时后进⼊深度睡眠。
怎么知道电脑进⼊了深度睡眠?就是唤醒时看到灰屏,和载⼊进度条。
OSX 的深度睡眠看起来还是不错的,有机会可以跟⼈卖弄⼀下,它的深度睡眠,可以待机 1 个⽉。当然如果真的有⼈这么做,那这⼈肯定是缺⼼眼的了。
---------------------------
为了⽅便部分锋友,先科普下Mac的睡眠模式,⽼鸟请⾃觉跳过…………
睡眠模式—hibernatemode—也就是Mac在睡眠模式下⾯的⼯作⽅式,⽬前主要有3种。
hibernatemode 0:睡眠时内存保持供电,其他部件断电,内存数据不写⼊硬盘。优点是可以快速唤醒、快速睡眠,因为内存保持供电,⽆论是唤醒还是进⼊睡眠都是1秒内的事情;节省SSD空间和寿命,因为内存数据不写⼊硬盘,所以硬盘⾥不会有内存镜像,也不会缩短SSD寿命。但是如果在睡眠的过程中电池没电的话,Mac会丢失所有内存种的数据,数据安全性不是很⾼。
hibernatemode 1:睡眠时内存数据写⼊硬盘,写⼊完成后电脑所有部件都断电,唤醒时从硬盘读出内
存镜像。优点是省电,跟关机的耗电⼀样,因为所有部件都已经停⽌⼯作,也不怕电池没电会丢失内存数据。但是缺点也很明显,进⼊睡眠和唤醒需要的时间长,对于机械硬盘的Mac尤其明显,通常都要转菊花⼗⼏圈。对于SSD的Mac则会占⽤硬盘空间,因为硬盘上有跟内存同样⼤⼩的内存镜像,也会缩短SSD寿命。
hibernatemode 3:0和1的结合,睡眠时内存数据写⼊硬盘,同时保持内存供电。这个模式也叫Safe Sleep,是Mac的默认睡眠模式。
因为Air的SSD只有256G,⽽且SSD寿命也有限,每睡眠⼀次都要往SSD写⼊8G的数据还是挺吓⼈的,所以LZ还是建议⽤SSD的锋友都选择hibernatemode 0(除⾮你对数据安全性要求特别⾼)。
更改hibernatemode很简单,打开“终端”,输⼊: sudo pmset -a hibernatemode 0
然后输⼊密码,注意输⼊密码的过程中不会显⽰*。
然后到/var/vm去把sleepimage删掉。再随便⼀个体积⽐较⼩的⽂档把⽂件名改成sleepimage,没有后缀名的哦。放
到/var/vm⾥,再按command+i打开简介,勾上“已锁定”。按理说,只要hibernatemode改成0,然后把sleepimage删掉,那么sleepimage就永远都不会出现了。但是不知道为什么,LZ每次删掉后它都会重新
出现,所以就想出这么⼀个招去对付它。
LZ遇到的问题可能是因为⼿动更改hibernatemode后跟系统原有的其他电源设置有冲突,所以⽆法进⼊睡眠模式导致耗电巨⼤
也有可能是因为系统睡眠⼀段时间后⾃动进⼊休眠,⽽休眠也需要写⼊内存镜像,但是sleepimage⼜被锁住了,所以就⽆法休眠,Mac就⼀直处于⼯作状态,尝试写⼊内存镜像,导致睡眠⼀晚上耗电巨⼤。
我们也可以关掉⾃动休眠,后⾯会说到。
这样就把睡眠模式改成0了,同时也释放了内存镜像占⽤的SSD空间。
如果改了睡眠模式之后你没有遇到跟LZ⼀样的问题,那么恭喜你,你不⽤往下看了。
但是如果你很悲剧,RP不好,遇到跟LZ⼀样的睡眠耗电问题,那么也恭喜你,因为LZ已经到办法解决了,请继续往下看。
既然是因为⼿动修改睡眠模式后跟系统的其他电源设置冲突,或者因为sleepimage锁定,造成Mac⽆法进⼊睡眠模式,那么我们把互相冲突的设置改成不冲突就⾏了。
⾸先,看看系统的电源设置都是些什么
在终端输⼊:pmset -g custom 这个命令可以显⽰系统所有的电源设置,如下图
Battery Power就是⽤电池时的电源设置,AC Power就是外接电源时的电源设置。
这⾥也可确认下你成功更改hibernatemode没有,后⾯那个数字就是睡眠模式了。
简单介绍下pmset下⾯各个参数的含义,不同型号的Mac看到的参数会不⼀样,LZ这个是2013款13⼨⾼配Air,更详细的介绍请看
lidwake:当屏幕掀开的时候唤醒Mac,1是开启 0是关闭
autopoweroff:如果Mac处于睡眠状态经过指定的时间后,⾃动把内存数据写⼊硬盘,并切断所有部件的电源,进⼊休眠状态,1是开启 0是关闭。但是LZ发现就算是处于开启状态,这个功能也并没有起作⽤,你可以不管它,也可以关掉autopoweroffdelay:启⽤autopoweroff功能的时间,也就是上⾯说的那个“指定的时间”,单位是秒
standby:功能跟autopoweroff⼀样,不过仅在hibernatemode为3的时候起作⽤,1是开启 0是关闭。不过LZ⼀直没搞明⽩autopoweroff跟standby有什么不⼀样,按理说应该是不⼀样的
standbydelay:启⽤standby功能的时间,单位也是秒
ttyskeepawake:远程⽤户正在活动时防⽌Mac进⼊睡眠,1是开启 0是关闭
hibernatemode:睡眠模式
darkwakes:这个就是Power Nap,你可以在系统偏好设置⾥选择开或关,跟在这⾥设置是⼀样的,1是开启 0是关闭hibernatefile:内存镜像存放的地址,这个也可以更改,不过路径必需是root下的路径
displaysleep:Mac闲置多长时间后进⼊显⽰器睡眠,2013款Air的系统偏好设置⾥已经没有这个选项了,Pro是有的,不过其实你可以通过pmset来修改。单位是分钟,这个时间不能长于sleep下设置的时间
sleep:Mac闲置多长时间后进⼊睡眠,这个系统偏好设置⾥也有,单位是分钟
acwake:电源改变时唤醒,也就是插上或者拔掉外置电源时唤醒Mac,1是开启 0是关闭
halfdim:显⽰器睡眠时使显⽰器亮度改变为当前亮度的⼀半,1是开启 0是关闭。如果关闭这个功能的话,显⽰器睡眠会直接关掉显⽰器。
lessbright:使⽤电池时使显⽰器亮度暗⼀点,系统偏好设置⾥也有这个,1是开启 0是关闭
disksleep:Mac闲置多长时间后关闭硬盘。这个系统偏好⾥也有,只不过换了⼀个字眼—如果可能,使硬盘进⼊睡眠—勾上这个的话系统就会⾃动根据sleep的时间设⼀个合适的时间。单位是秒,这个时间不能长于sleep下设置的时间sleepservice:LZ还没搞清楚这个是⼲嘛的,请知道的锋友解释下。
womp:⽹络远程唤醒,1是开启 0是关闭
networksleep:这个设置影响Mac在睡眠的过程中如何提供⽹络共享服务,LZ也不太清楚是什么,最好就不要动。
不同的Mac的pmset项⽬会不⼀样,例如MD101就没有darkwakes这⼀项,这篇帖⼦⾥LZ⽤的是2013款Air为例⼦。你可以在终端输⼊pmset -g cap查看当前电源下Mac⽀持的电源设置项。
上⾯说了那么多,各位锋友应该也猜到怎么解决Air睡眠耗电、⽆法唤醒、⽆法睡眠之类的问题了吧,关键是autopoweroff standby sleep disksleep displaysleep这⼏项。
⾸先,时间设置上,应该是sleep>=disksleep>=displaysleep,例如分别设置为15 15 10,否则就可能出问题
null官方更新地址然后autopoweroff standby建议关闭,或者设置⼀个⽐默认更长的时间,让Mac不可能有机会进⼊⾃动休眠,就可以防⽌睡眠经过⼏个⼩时就⾃动进⼊休眠需要写⼊sleepimage,但是⼜因为锁定⽆法写⼊,消耗电量。
当然,如果你没有动sleepimage,或者需要这项功能的话,你可以不⽤关闭autopoweroff和standby。
这样应该就可以解决Air睡眠遇到的问题了
要更改某⼀项设置的话也很简单,打开终端,按下⾯的格式输⼊命令:
sudo pmset -# $ &
其中#号有4个参数,分别是:c b u a,作⽤是表明这个命令修改的是哪个电源设置下的参数。c代表外接电源、b代表电池、u代表UPS、a代表所有电源。
$就是具体的某⼀项参数,例如你想修改睡眠模式,那就是hibernatemode;修改睡眠闲置时间,是sleep。
&是参数的值
例如你想修改外接电源是Mac的显⽰器睡眠闲置时间为10分钟,那就输⼊:
sudo pmset -c displaysleep 10
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论