MAC的睡眠模式介绍
因为之前⽤的是⽹上流传的⼟法来禁⽌⽣成sleepimage,尝到了苦头,⽽且2次!
⼤家知道OSX有⼏种睡眠模式,其中hibernatemode可以是0(传统睡眠⽅式,不⽣成sleepimage⽂件),3和25(Apple称之安全睡眠⽅
式,会⽣成sleepimage⽂件),⼤家也都知道可以⽤sudopmt-ahibernatemode0来禁⽌那个内存镜像⽂件。
以前这个命令⼀直可⽤,直到OSXMountainLionv10.8.2,⼤家突然发现这个命令不起作⽤了,重启电脑或者睡眠⼀段时间后,那个
sleepimage⼜回来了。换句话说,某些型号的mac,似乎强制使⽤安全睡眠⽅式。
然后⽹上就有各种⼟法,粗暴之极,诸如建⽴⼀个只读的空⽂件,或者⽤sudoln-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的睡眠参数,可以打pmt-g了解⼀下你的电脑处在什么睡眠模式下:
⽐较有兴趣的参数:
standbydelay10800
standby0
autopoweroffdelay14400
autopoweroff0
hibernatemode0
这⼏个参数组成了OSX的睡眠模式。
当睡眠开始时,合上盖⼦,或者按电源键,如果你的hibernatemode是0,OSX是不⽴即往硬盘上写内存镜像的。
autopoweroff这是欧盟的节能要求,满⾜以下条件时:
接电源
没有外接设备
没有⽹络活动
电脑是MacBookPro(Mid2012andlater),MacBookPro(Retina,Mid2012andlater),MacBookAir(Mid2012andlater),iMac
(Late2012andlater),Macmini(Late2012andlater)
到了autopoweroffdelayx秒后,就开始启动安全睡眠模式,往硬盘上写sleepimage,然后进⼊深度睡眠。
standby满⾜以下条件时:
⽤电池
没有外接设备
没有⽹络活动
没有外接显⽰器
电脑是MacBookPro(Retina,13-inch,Late2012)andlater,MacBookPro(Retina,15-inch,Early2013)andlater,MacBookPro
(Retina,Mid2012),MacBookAir(Mid2010)andlater,SSDandFusiondriveversionsofMacmini(Late2012)andlater,SSD
andFusiondriveversionsofiMac(Late2012)andlater
到了standbydelayx秒后,就开始启动安全睡眠模式,往硬盘上写sleepimage,然后进⼊深度睡眠。
可见,Apple的安全睡眠其实是个统称,具体是由2个参数激发的,这2个参数都可以在普通睡眠⼀段时间后让电脑进⼊深度睡眠状态,但是
作⽤的条件不相同,基本上⼀个是接电源时⽤,⼀个是⽤电池时⽤。
这也说明了为什么有⼈抱怨为什么在设置了hibernatemode0后,睡眠了⼀段时间后,那个sleepimage⽂件⼜出现了,⽽有⼈说没有。这
取决于他们各⾃睡眠的时间以及延迟时间的设定,合上⼜马上打开,那个⽂件是不会⽴即⽣成的。
所以,要完全的,合法的禁⽌sleepimage⽂件,不但要设置hibernatemode0,还要禁⽌电源和电池情况下的节能设置。
也就是说,你要跑下⾯的命令才⾏:
sudopmt-ahibernatemode0
sudopmt-aautopoweroff0
sudopmt-astandby0
sudorm/var/vm/sleepimage
然后不管你怎么重启,睡眠n久,都不会再⽣成内存镜像⽂件了,当然你的电脑就⽆法再进⼊深度睡眠模式,Apple官⽅说电池待机能⼒可
能会稍稍降低,但我看也未必,普通睡眠状态下电压已经⾮常⼩了。
如果不在乎硬盘空间的,或许不⽤管它,⽤0即可,也就是普通睡眠了⼏个⼩时后才往硬盘写内存镜像⽂件,再进⼊深度睡眠。
如果你也不在乎经常读写硬盘的,或者懒得折腾任何东西的,也可以⽤缺省模式,对笔记本来说是3,也就是睡眠后马上就写内存镜像⽂
件,再在⼏个⼩时后进⼊深度睡眠。
怎么知道电脑进⼊了深度睡眠?就是唤醒时看到灰屏,和载⼊进度条。
OSX的深度睡眠看起来还是不错的,有机会可以跟⼈卖弄⼀下,它的深度睡眠,可以待机1个⽉。当然如果真的有⼈这么做,那这⼈肯定
是缺⼼眼的了。
---------------------------
为了⽅便部分锋友,先科普下Mac的睡眠模式,⽼鸟请⾃觉跳过…………
睡眠模式—hibernatemode—也就是Mac在睡眠模式下⾯的⼯作⽅式,⽬前主要有3种。
hibernatemode0:睡眠时内存保持供电,其他部件断电,内存数据不写⼊硬盘。优点是可以快速唤醒、快速睡眠,因为内
存保持供电,⽆论是唤醒还是进⼊睡眠都是1秒内的事情;节省SSD空间和寿命,因为内存数据不写⼊硬盘,所以硬盘⾥不
会有内存镜像,也不会缩短SSD寿命。但是如果在睡眠的过程中电池没电的话,Mac会丢失所有内存种的数据,数据安全性
不是很⾼。
hibernatemode1:睡眠时内存数据写⼊硬盘,写⼊完成后电脑所有部件都断电,唤醒时从硬盘读出内存镜像。优点是省
电,跟关机的耗电⼀样,因为所有部件都已经停⽌⼯作,也不怕电池没电会丢失内存数据。但是缺点也很明显,进⼊睡眠和
唤醒需要的时间长,对于机械硬盘的Mac尤其明显,通常都要转菊花⼗⼏圈。对于SSD的Mac则会占⽤硬盘空间,因为硬盘
上有跟内存同样⼤⼩的内存镜像,也会缩短SSD寿命。
hibernatemode3:0和1的结合,睡眠时内存数据写⼊硬盘,同时保持内存供电。这个模式也叫SafeSleep,是Mac的默认睡
眠模式。
因为Air的SSD只有256G,⽽且SSD寿命也有限,每睡眠⼀次都要往SSD写⼊8G的数据还是挺吓⼈的,所以LZ还是建议⽤
SSD的锋友都选择hibernatemode0(除⾮你对数据安全性要求特别⾼)。
更改hibernatemode很简单,打开“终端”,输⼊:sudopmt-ahibernatemode0
然后输⼊密码,注意输⼊密码的过程中不会显⽰*。
然后到/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⽆法进⼊睡眠模式,那么
我们把互相冲突的设置改成不冲突就⾏了。
⾸先,看看系统的电源设置都是些什么
在终端输⼊:pmt-gcustom这个命令可以显⽰系统所有的电源设置,如下图
BatteryPower就是⽤电池时的电源设置,ACPower就是外接电源时的电源设置。
这⾥也可确认下你成功更改hibernatemode没有,后⾯那个数字就是睡眠模式了。
简单介绍下pmt下⾯各个参数的含义,不同型号的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:这个就是PowerNap,你可以在系统偏好设置⾥选择开或关,跟在这⾥设置是⼀样的,1是开启0是关闭
hibernatefile:内存镜像存放的地址,这个也可以更改,不过路径必需是root下的路径
displaysleep:Mac闲置多长时间后进⼊显⽰器睡眠,2013款Air的系统偏好设置⾥已经没有这个选项了,Pro是有的,不过其
实你可以通过pmt来修改。单位是分钟,这个时间不能长于sleep下设置的时间
sleep:Mac闲置多长时间后进⼊睡眠,这个系统偏好设置⾥也有,单位是分钟
acwake:电源改变时唤醒,也就是插上或者拔掉外置电源时唤醒Mac,1是开启0是关闭
halfdim:显⽰器睡眠时使显⽰器亮度改变为当前亮度的⼀半,1是开启0是关闭。如果关闭这个功能的话,显⽰器睡眠会直接
关掉显⽰器。
lessbright:使⽤电池时使显⽰器亮度暗⼀点,系统偏好设置⾥也有这个,1是开启0是关闭
disksleep:Mac闲置多长时间后关闭硬盘。这个系统偏好⾥也有,只不过换了⼀个字眼—如果可能,使硬盘进⼊睡眠—勾上这
个的话系统就会⾃动根据sleep的时间设⼀个合适的时间。单位是秒,这个时间不能长于sleep下设置的时间
sleeprvice:LZ还没搞清楚这个是⼲嘛的,请知道的锋友解释下。
womp:⽹络远程唤醒,1是开启0是关闭
networksleep:这个设置影响Mac在睡眠的过程中如何提供⽹络共享服务,LZ也不太清楚是什么,最好就不要动。
不同的Mac的pmt项⽬会不⼀样,例如MD101就没有darkwakes这⼀项,这篇帖⼦⾥LZ⽤的是2013款Air为例⼦。你可以在
终端输⼊pmt-gcap查看当前电源下Mac⽀持的电源设置项。
上⾯说了那么多,各位锋友应该也猜到怎么解决Air睡眠耗电、⽆法唤醒、⽆法睡眠之类的问题了吧,关键是autopoweroff
standbysleepdisksleepdisplaysleep这⼏项。
⾸先,时间设置上,应该是sleep>=disksleep>=displaysleep,例如分别设置为151510,否则就可能出问题
然后autopoweroffstandby建议关闭,或者设置⼀个⽐默认更长的时间,让Mac不可能有机会进⼊⾃动休眠,就可以防⽌睡
眠经过⼏个⼩时就⾃动进⼊休眠需要写⼊sleepimage,但是⼜因为锁定⽆法写⼊,消耗电量。
当然,如果你没有动sleepimage,或者需要这项功能的话,你可以不⽤关闭autopoweroff和standby。
这样应该就可以解决Air睡眠遇到的问题了
要更改某⼀项设置的话也很简单,打开终端,按下⾯的格式输⼊命令:
sudopmt-#$&
其中#号有4个参数,分别是:cbua,作⽤是表明这个命令修改的是哪个电源设置下的参数。c代表外接电源、b代表电
池、u代表UPS、a代表所有电源。
$就是具体的某⼀项参数,例如你想修改睡眠模式,那就是hibernatemode;修改睡眠闲置时间,是sleep。
&是参数的值
例如你想修改外接电源是Mac的显⽰器睡眠闲置时间为10分钟,那就输⼊:
sudopmt-cdisplaysleep10
想修更改所有电源下的硬盘睡眠闲置时间为15分钟,那就是:
sudopmt-adisksleep15
明⽩了吧,其实上⾯说了⼀⼤堆,到头来是⾮常简单的事。如果不清楚该设置成什么参数,可以参考图中LZ⾃⼰设置的数
值。
最后提醒⼀句,更改系统底层设置有风险,LZ仅在2013款13⼨Air顶配和2012款13⼨普屏
MacBookProMD101上测试过以上内容,其他型号的Mac如果按此帖更改电源设置,请做好
数据备份,遇到任何问题LZ均不负责,后果⾃负!!
欢迎转载此贴,如需转载⽆需告知LZ,但请在转载中注明原帖地址和作者,谢谢!
本文发布于:2022-11-26 20:58:57,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/26548.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |