关于Mac的Safe Sleep和Hibernate

据说Apple早在2005年10月发布Mac OS X 10.4.3的时候就已经加入了safe sleep这个功能,但是GUI界面上却至今始终对用户透明,用户在不装任何3rd party tools的情况下永远只能看到sleep而没有hiberate之类的选项。 但是此sleep又并非完全等同于我们平时常说的”suspend to RAM”(2005.10之前可能相同),它背后其实也做了”suspend to disk”,也就是PC上的hibernate的工作,实为明修栈道,暗渡陈仓。 这样做的好处也成了后来Apple命名此技术的offical name —— “safe sleep”,因为它解决了单纯”suspend to RAM”下电源耗完或故障导致的RAM信息丢失问题:其会在电源不足的情况下自动切换到”suspend to disk”,着实”smart and safe”。 但有趣的是,苹果似乎从来没有高调宣布过这项当时可能不新不revolutionary但确实对用户而言很实用的功能,for some “unknown” reason。 在大多数的情况下,用户可能并不会察觉这背后的不同,事实上我觉得Apple要不是考虑到了切换到”suspend to disk”后restore回来用户会等很久的user experience问题,而加入了这个progress bar, 很少真的会有用户察觉。 到了10.5,safe sleep似乎终于有了offcial的解释,但是总感觉好像简单了点,不知道你和我是否感觉一样,低调么也不带这样的… 系统早就有这个capability,但4年多后的今天普通用户却还是要很麻烦的来使用,Apple提供了一个命令行工具pmset来帮助用户进行power management,其中很多选项在”System Preferences… -> Energy Saver”里面都能找到对应,但是却偏偏没有关于hibernate mode的。 相应的信息如果不联网的话需要在命令行下用man pmset查看,可以看到pmset可以设置autorestart等10多个参数,与hibernate有关的有两个参数分别叫hibernatemode和hibernatefile,你会有趣的发现只有这两个参数后面跟了句”Please use caution.”,这是不是让你联想到了什么? ========================== 历史,背景以及浮想联翩的分界线 ========================== 下面我们来看看究竟怎么在Mac上hibernate,底下是man pmset里关于hibernatemode参数设置的描述: [cc lang=”bash” lines=”-1”] hibernatemode takes a bitfield argument defining SafeSleep behavior. Passing 0 disables SafeSleep altogether, forcing the computer into a reg- ular sleep. 0001 (bit 0) enables hibernation; causes OS X to write memory state to hibernation image at sleep time. On wake (without bit 1 set) OS X will resume from the hibernation image. Bit 0 set (without bit 1 set) causes OS X to write memory state and immediately hibernate at sleep time. 0010 (bit 1), in conjunction with bit 0, causes OS X to maintain system state in memory and leave system power on until battery level drops below a near empty threshold (This enables quicker wakeup from memory while battery power is available). Upon nearly emptying the battery, OS X shuts off all system power and hibernates; on wake the system will resume from hibernation image, not from memory. hibernatemode is set to 3 (binary 0011) by default on supported porta- bles. hibernatemode is set to 0 (binary 0000) by default on supported desktops. Please note that hibernatefile may only point to a file located on the root volume. [/cc] 可以看到portables默认的模式就是所谓的safe sleep(hibernatemode = 3)。 修改之前先查看一下当前系统使用的hibernate相关参数设置,我没有修改过(事实上之前都不知道怎么修改),应该就是默认的配置: [cc lang=”bash”] $ pmset -g | grep hibernate hibernatefile /var/vm/sleepimage hibernatemode 3 $ ls -lh /var/vm/sleepimage -rw——T 1 root wheel 2.0G Feb 23 10:09 /var/vm/sleepimage [/cc] 设置系统使用hibernate模式(hibernatemode = 0001)进行sleep: [cc lang=”bash”] $ sudo pmset -a hibernatemode 1 [/cc] 这时如果再按普通方式sleep的时候mac就会hibernate了,想要切换回safe sleep只要把hibernatemode修改回来就行了: [cc lang=”bash”] $ sudo pmset -a hibernatemode 3 [/cc] 如果不喜欢命令行操作,可以使用第三方工具,实现机制应该是一样的,我所知道的有smartsleepdeep sleep这两个,不过我都还没有测试过。

Buy me a coffee
  • Post author: Samson Wu
  • Post link: 1701.html
  • Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
0%