2014年7月27日 星期日

ubuntu hibernation(休眠)設定

紀錄分享一下此次讓linux桌機成功休眠的步驟

首先列一下環境:
我使用的是ubuntu 14.04
一開始安裝的時候沒設定swap區域

後來想到要斷電休眠已經為時已晚
雖然linux可以使用file來當swap區域
但是似乎相容性並不加

所以一開始我得找出usb開機碟
利用GParted軟體重新在我的硬碟上拉出一塊16GB的分割區
並且指定為swap

重開機後
先修改/etc/fstab把swap磁區掛上去
e.g. UUID=2fb3f377-e7c0-4e2c-bfb2-c0459ef4bfca    none    swap    sw    0   0
(可能要先用blkid查一下磁區的UUID 而不要用/dev/sdXX的方式掛會比較好)

基本上做到這裡的時候
跑pm-hibernate就會成功關機了

但是
但是
但是
開機後
還是一般的開機全部重來
調閱kmesg來看
就發現了
"PM: Hibernation image not present or could not be loaded"
這個的原因是因為即使有在/etc/fstab裡頭寫了swap
但是在bootloader端也就是grub還是不知道他要從哪裡把記憶體裡頭的內容讀回來
必須修改grub的開機指令 讓她知道開機去要看哪個地方知道休眠喚醒從哪裡讀資料
在grub的語法下 為resume=磁區位置
所以我修改了/etc/default/grub檔案
在GRUB_CMDLINE_LINUX_DEFAULT=中加入了"resume=UUID=2fb3f377-e7c0-4e2c-bfb2-c0459ef4bfca"
接著執行update-grub (或是update-grub2如果你是用grub2)指令 讓這個修改落實到grub設定檔中
然後重開機後 cat /proc/cmdline就會發現resume=XXXX進去了

再來就是實際測試了
打pm-hibernate指令讓電腦睡下去
然後在開機 終於大功告成

總結一下
讓休眠正常運作的關鍵因素
1. swap空間要大於記憶體的量 (swap檔案的支援度可能有問題 還是要有真的分割區)
2. 讓grub知道swap磁區的位置
3. 出問題的時候可以cat /var/log/pm-suspend.log還有kmesg看一下為何沒法睡著或是開機沒成功

沒有留言:

張貼留言