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,更詳細的介紹請看Apple開發者文檔


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,否則就可能出問題


然后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




想修更改所有電源下的硬盤睡眠閑置時間為15分鍾,那就是:


sudo pmset -a disksleep 15




明白了吧,其實上面說了一大堆,到頭來是非常簡單的事。如果不清楚該設置成什么參數,可以參考圖中LZ自己設置的數值。





最后提醒一句,更改系統底層設置有風險,LZ僅在2013款13寸Air頂配和2012款13寸普屏MacBook Pro  MD101上測試過以上內容,其他型號的Mac如果按此帖更改電源設置,請做好數據備份,遇到任何問題LZ均不負責,后果自負!!

歡迎轉載此貼,如需轉載無需告知LZ,但請在轉載中注明原帖地址和作者,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM