出自http://navarro.blogbus.com/
今天试了下休眠和挂起,一合上本本的屏幕,结果马上就唧唧唧地报警了几声。打开屏幕一看,系统进到了gdm的登录界面,登录进去,电源管理applet报告休眠出错。
查了查linux休眠的问题,大致如下:Linux里的休眠分几5个等级,具体情况不详述了。在archlinux的gnome里的休眠有两个,一个是suspend,一个是hibernate。 suspend会把所有东西存入RAM然后系统挂起,就是所谓suspend to ram。而hibernate,则是将内存中的信息写入硬盘并且关闭系统电源,即所谓的suspend to disk。
首先怀疑是权限问题,因为电源管理需要root权限的,工具包pm-utils里的几个工具可以控制休眠。尝试用root权限休眠:
sudo pm-suspend
很好很强大,可以正常进入suspend to ram挂起状态,返回系统也正常。
再尝试hibernate休眠到硬盘
sudo pm-hibernate
硬盘转了一阵,然后电源关闭。开机,问题出现了,系统没有进入恢复状态,而是正常启动,并且启动过程中swap分区报错,无法挂载swap分区。这下麻烦了,hibernate是需要写入swap分区的,不处理swap分区问题,后面无法解决hibernate。没办法,只有先解决swap了,尝试手动激活swap分区:
sudo mkswap /dev/sda5
sudo swapon -a /dev/sda5
出错,还是无法挂载,google了一下,原来有可能是fstab里UUID的问题,因为硬盘分区表一旦有任何改变(比如调整swap分区位置,改变swap分区大小等等),使用UUID来挂载swap就不能。修改/etc/fstab,将swap分区所在的那一行改为直接用/dev/xxxx的格式:
/dev/sda5 none swap sw 0 0
保存后重启,进入系统后free -m查看是否swap被正确挂载。
OK,swap工作正常。如果没有挂载,再次手动激活应该没有问题。
现在来解决普通用户无权限休眠的问题。根据以前使用其他发行版的经验,系统内应该有个电源管理的组。查了下,archlinux里面,电源管理的组就叫power。把当前用户加入power组:
sudo gpasswd -a raven power
注销raven重新登录,尝试挂起(suspend),一切正常。
休眠(hibernate)牵涉到写入swap和启动时候要从swap区重新读取,需要在grub里设置,将/boot/grub/menu.lst里面启动项的位置加入 resume=/dev/sda,比如我的类似:
# (0) Arch Linux
title Arch Linux
root (hd0,3)
kernel /boot/vmlinuz26 root=/dev/sda4 resume=/dev/sda5 ro
initrd /boot/kernel26.img
保存后,重启。再次尝试hibernate, 挂起正常,开机恢复正常。