[ZZ]Ubuntu电源管理问题的说明和解决方案

来源:互联网 发布:优化很好的单机游戏 编辑:程序博客网 时间:2024/06/08 03:40
先引用一段报告:
现已确认,Ubuntu系统的ACPI电源管理机制存在缺陷,会大幅减少笔记本硬盘的寿
命。
如果安装了Ubuntu的笔记本用户转入电池供电模式,则“/etc/acpi/power.sh”中的默认
配置会导致极其频繁的载入循环,报告称100小时即可达到7000多次,而资料显示大多数笔
记本硬盘最多只能承受60万次这种循环。换算下来,这相当于一块全新的笔记本硬盘只能
连续实用不到1年。

验证Load/Unload Cycle计数的方法:
Ubuntu下:
终端中运行sudo smartctl -a $HDD | grep Load_Cycle_Count
(需先安装smartmontools包。并启用硬盘SMART监控功能:
sudo smartctl -s on $HDD)
Windows下:
运行Everest或其他检测软件,查看硬盘SMART信息,其中有Load/Unload Cycle计数。
如果计数增长很快,那么你就中彩了。

问题成因:
有不同看法。以下意见占上风:笔记本硬盘内置的自动进入低耗状态的参数过于严
厉,导致频繁的Load/Unload。 Ubuntu默认不会改动内置的参数,而其他系统则无视或者
不使用硬盘的这一功能,反而保护了硬盘的寿命。也有认为是Ubuntu过于频繁地向硬盘发
出降 低能耗等级的指令造成的。这个问题牵扯到硬件厂商和操作系统两方面。

解决方法吧:
方法一:
创建一个名为"99-hdd-spin-fix.sh"的文件,写如下两行字(针对SATA硬盘):

#!/bin/sh
hdparm -B 254 /dev/sda
并将该文件复制到以下三个位置:
/etc/acpi/suspend.d/
/etc/acpi/resume.d/
/etc/acpi/start.d/
方法二:
安装laptop-mode-tools,并修改文件/etc/laptop-mode/laptop-mode.conf,设置
CONTROL_HD_POWERMGMT=1。
注:以上复制和修改文件操作均需要提升权限。

进一步了解:
值得注意的是,该问题2006年9月就已经提出,并不是什么新问题,但是官方一开
始对此并不重视,至今这个事关数据安全的Bug在Lauchpad上严重性仍被标为最低级别,官
方也是最近才发布的解决问题的wiki文章,其中采纳了今年10月份某网友提出的解决方法


参考资料:
https://launchpad.net/bug59695.html(最初报告页面,回帖中有变通解决方案)
http://hardware.slashdot.org/comments.pl?sid=344745&cid=21174201(某国外论坛关
于此Bug的讨论)
https://wiki.ubuntu.com/DanielHahler/Bug59695(Ubuntu官方wiki的指导,相当简明)
==================================================================================


===================================================================================
印象中linux的硬盘管理向来不讨人喜欢,比如为了照顾一些小众要求,硬是默认把硬盘的DMA模式、
32位传输模式关掉,让硬盘的性能、速度减半以上,想想就让人郁闷,不得不自行设定/etc/hdparm.conf

如今又发现了另一问题,其实是老问题了,只是我刚了解到。就是在安静情况下,我每分钟总能听到
自己的笔记本硬盘发出几次轻微的"咯哒"声,以前不太在意,其实这是硬盘磁头在复位时发出的声
音,但硬盘在正常运转中根本没必要如此频繁的复位的,更为严重的是,这个复位数是有限(如
600000)的,超过其厂家设定的上限后机械性能便失去了保证,极易损伤磁片。

以下做个试验,先sudo apt-get install smartmontools,然后执行
[wheer]$ sudo smartctl -a /dev/hda|grep 193;sleep 600;sudo smartctl -a /dev/hda|grep 193
193 Load_Cycle_Count 0x0032 190 190 000 Old_age Always - 31404
193 Load_Cycle_Count 0x0032 190 190 000 Old_age Always - 31426

就是说短短10分钟内磁头复位了22次。如果 一年365天不间断的话将会是1156320次,是上限600000
的近两倍!
说明一下这种情况只在笔记本下出现,兴许与laptop-mode(或是ACPI/APM)有关,但hdparm -B可能设
定对laptop-mode的偏好程度,如hdparm -B1则为了保护笔记本在移动中不损坏硬盘,会频率复位,
hdparm -B255则不理会laptop-mode。

再试一下
[wheer]$ sudo hdparm -B255 /dev/hda

/dev/hda:
setting Advanced Power Management level to disabled
[wheer]$ sudo smartctl -a /dev/hda|grep 193;sleep 600;sudo smartctl -a /dev/hda|grep 193
193 Load_Cycle_Count 0x0032 190 190 000 Old_age Always - 31440
193 Load_Cycle_Count 0x0032 190 190 000 Old_age Always - 31440

果然是有效的:)

那设定一下/etc/hdparm.conf吧,以下是我的(-B我并没有设为255,那样会导致磁盘温度明显升高)
command_line {
hdparm -q -B250 -m16 -q -c3 -q -u1 -q -K1 -q -k1 /dev/hda
}


还有人说可在/etc/default/acpi-support中设定ENABLE_LAPTOP_MODE=false,但我这里无效。还有
一点,似乎用hdparm设好的参数在休眠后就失效了,需要重设。
==================================================
===================================================
[原创]深入了解laptop_mode
Wednesday, October 25, 2006, 18:02 preferences
对UBUNTU6.06LTS中切入Laptop_mode模式的补充
UBUNTU6.06LTS 版附带的laptop-mode-tools是1.11(2005-10-29日发布)的版本,具最新的1.32版(2006-10-06日发布)已相差 14个版本,UBUNTU的laptop-mode-tools包已经非常旧啦,一年多的时间没有维护和升级过啦。

为了更好的用好laptop_mode_tools带来的便利,强列推荐用户升级到1.32版,
ubuntu的用户可以到这里下载:http://www.xs4all.nl/~bsamwel/laptop_mode/tools/downloads/debian/laptop-mode-tools_1.32-1_all.deb
新版本的功能修证和增强请参阅:http://www.xs4all.nl/~bsamwel/laptop_mode/tools/revision-history.html

附1.32版的安装和启动方法:
I、安装:sudo dpkg -i laptop-mode-tools_1.32-1_all.deb
注:如果你已安装过ubuntu附带的1.11版,安装过程中将提示你是替换旧版的配置文件和守护脚本,按Y键替换,N键保留,D键查看新旧版配置文件的不同,这里请按Y键。
II、配置方法1.:sudo gedit /etc/default/acpi-support,更改ENABLE_LAPTOP_MODE=true
(注:这样设置只为允许启动laptop_mode,而laptop_mode_tools的配置文件默认在切挽到电池供电时启用 laptop_mode,如果你只想在电池供电状态下使用laptop_mode请用此设置且不用再作其它设定如配置方法2)
配置方法2:sudo gedit /etc/laptop-mode/laptop-mode.conf更改ENABLE_LAPTOP_MODE_ON_AC=1,ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED=1
(注:在acpi-support中设置ENABLE_LAPTOP_MODE=true后,想在电源供电状态启动laptop_mode,或合上LCD时启用laptop_mode请用)
III、启动:新版的laptop_mode_tools,在你正确配置了相关配置文件后,会随系统自动启动。
你可以重新启动laptop,键入cat /proc/sys/vm/laptop_mode看看,非零则正常启动。
手动启动方法如同laptop_mode_tools 1.11版,新版守护脚本增加了force-reload参数,你可以在必要情况下使用。

下面讲讲sudo laptop_mode status后的信息。
sudo laptop_mode 返回当前laptop_mode的状态信息。

Mounts:安装点,形同/etc/mtab,当前系统安装点状态。
和mounts相关的laptop_mode.conf设置:

CONTROL_NOATIME=0
控制文件系统挂起选项noatime,禁止更新文件的访问时间,能大大提高效率。访问时间不是一个太有用的属性,修改/etc/fstab就可以了,
如:/etc/fstab中:/dev/fd0 /floppy auto user,noauto,noatime 0 0

CONTROL_MOUNT_OPTIONS=1
Change mount options on partitions in PARTITIONS?(partitions in PARTITIONS?不知怎样理解?知道的请跟贴。谢谢!),你最好不要改变此设置。

Drive power status:驱动器电源状态:
/dev/hda:
drive state is :active/idle
硬盘状态:活动或空闲状态
/dev/hdc:
drive state is :standby
光驱状态:待命
(NOTE: drive settings affected by Laptop Mode cannot be retrieved.)
注意:laptop mode不能恢复受影响驱动器设置。
注:Drive power status受laptop_mode.conf配置影响,
CONTROL_HD_IDLE_TIMEOUT=1,值为1时,控制硬盘空闲超时。
LM_AC_HD_IDLE_TIMEOUT_SECONDS=20:latop_mode模式电源供电时硬盘空闲超时秒数
LM_BATT_HD_IDLE_TIMEOUT_SECONDS=20:laptop_mode模式电池供时硬盘空闲超时秒数
NOLM_HD_IDLE_TIMEOUT_SECONDS=7200:非laptop_mode模式硬盘空闲超时秒数
这里的硬盘空闲超时指的是设置磁盘驱动器低速运转超时,磁盘根据此超时值决定在关闭主轴电机以节约能耗之前等待多长时间(无磁盘操作)。在这种状态下,驱动器可能需要来响应一个接下来的磁盘访问。
如上述laptop_mode模式下磁盘驱动器低带运转超时值为20秒,非laptop_mode模式超时值为2小时。
驱动器状态:active/idle--活动/闲置指普通操作;standby--待命指低能耗模式,驱动器待命中;sleep--挂起指最低能耗模式,驱动器被完全关闭。

Readahead states:(超前读状态)
/dev/hda3: 3072 kB
/dev/hda9: 3072 kB
/dev/hda1: 3072 kB
/dev/hda5: 3072 kB
/dev/hda6: 3072 kB
/dev/hda7: 3072 kB
预备知识:所有的Linux文件系统使用一个共同的buffer cache来缓存底层的设备的数据缓冲区,这样可以加速对于存放文件系统的物理设备的访问,从而加快对文件系统的访问。这个buffer cache独立于文件系统,集成在Linux核心分配、读和写数据缓冲区的机制中。让Linux文件系统独立于底层的介质和支撑的设备驱动程序有特殊的好处。所有的块结构的设备向Linux核心登记,并表现为一个统一的,以块为基础的,通常是异步的接口。甚至相对复杂的块设备比如SCSI设备也是这样。当真实的文件系统从底层的物理磁盘读取数据的,引起块设备驱动程序从它们控制的设备上读取物理块。在这个块设备接口中集成了buffer cache。当文件系统读取了块的时候,它们被存放到了所有的文件系统和Linux核心共享的全局的buffer cache中。其中的buffer(缓冲区)用它们的块编号和被读取设备的一个唯一的标识符来标记。所以,如果相同的数据经常需要,它会从buffer cache中读取,而不是从磁盘读取(会花费更多时间)。一些设备支持超前读(read ahead),数据块会预先读取,以备以后可能的读取。
从而看出我的laptop的readahead数据为3M.

Laptop Mode is allowed to run: /var/run/laptop-mode-enabled exists.
当/var/run/laptop-mode-enabled 文件存在时laptop mode充许运行。
此文件是你在配置文件acpi-support中更改ENABLE_LAPTOP_MODE=true时,守护脚本所产生的,也是你在电脑启动时看到“Enabling laptop mode”提示时产产生的。

/proc/sys/vm/dirty_ratio: 60
该文件表示如果进程产生的脏数据到达系统整体内存的百分比,此时进程自行把脏数据写回磁盘。缺省设置:40

/proc/sys/vm/dirty_background_ratio: 1
该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。缺省设置:10

/proc/sys/vm/dirty_expire_centisecs: 36000
该文件表示如果脏数据在内存中驻留时间超过该值,pdflush进程在下一次将把这些数据写回磁盘。缺省设置:3000(1/100秒)

/proc/sys/vm/dirty_writeback_centisecs: 36000
该文件表示pdflush进程周期性间隔多久把脏数据写回磁盘。缺省设置:500(1/100秒)

有关脏数据的处理的相关设置:

LM_DIRTY_RATIO=60:含义请见status输出的/proc/sys/vm/dirty_ration部分,此处是指laptop_mode模式下的设置。
NOLM_DIRTY_RATIO=40:含义请见status输出的/proc/sys/vm/dirty_ration部分,此处是指非laptop_mode模式下的系统默认设置。
LM_DIRTY_BACKGROUND_RATIO=1:含义请见status输出的/proc/sys/vm/dirty_background_ratio部分,此处是指laptop_mode模式下的设置。
NOLM_DIRTY_BACKGROUND_RATIO=10含义请见status输出的/proc/sys/vm/dirty_background_ratio部分,此处是指laptop_mode模式下的系统默认设置。

有关磁盘行为的其它设置:

CONTROL_HD_WRITECACHE=0
控制磁盘驱动器的写缓存特性,值0为关闭,1为打开,此值直接影响到*_HD_WRITECACHE的设置。
NOLM_AC_HD_WRITECACHE=1
非laptop_mode模式电源适配器供电时磁盘驱动器的写缓存行为,值0为关闭,1为打开;
NOLM_BATT_HD_WRITECACHE=0
非laptop_mode模式电源供电时磁盘驱动器的写缓存行为,值0为关闭,1为打开;
LM_HD_WRITECACHE=0
laptop_mode模式磁盘驱动器的写缓存行为,值0为关闭,1为打开;

CONTROL_HD_POWERMGMT=0
控制磁盘驱动器的高级电源管理(请先确定你的磁盘是否支持APM),值0为关闭,1为打开;此值直接影响到*_HD_POWERMGMT的设置。
*_HD_POWERMGMT的值(1-255),低参数值获得更好的电源管理,高参数值获得更好的性能,值为255时关闭磁盘APM支持。
BATT_HD_POWERMGMT=1
电池供电时磁盘驱动器的电源管理,更省电。
LM_AC_HD_POWERMGMT=255
laptop_mode模式电源适配器供电时的电源管理,这里是关闭磁盘APM支持。
NOLM_AC_HD_POWERMGMT=255
非laptop_mode模式电源适配器供电时的电源管理,这里是关闭磁盘APM支持。

*_MAX_LOST_WORK_SECONDS:
当你系统崩溃或切断电源时,将丢失内存中多少钞内的数据。
LM_BATT_MAX_LOST_WORK_SECONDS=600
laptop_mode模式,电池供电时,若系统崩溃或断电时,将丢失600秒内的数据
LM_AC_MAX_LOST_WORK_SECONDS=360
laptop_mode模式,电源供电时,若系统崩溃或断电时,将丢失360秒内的数据

LM_SECONDS_BEFORE_SYNC=2:
laptop_mode模式,磁盘在进入空闲状态前几秒钟同步数据。


/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq: 531672
cpu变频之当前频率

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq: 1528557
cpu变频之最大频率

/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq:531672
cpu变频之最小频率

/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor:userspace
cpu变频之频率调节器

注:有关laptop_mode的CPU变频设定(该功能工作于2.6系统的内核),受/etc/laptop-mode/laptop-mode.conf文件的影响,
如果你是AMD的CPU,建意用AMD的PowerNow功能,ubuntu中的powernow脚本也是建立在cpufreq的基础上。
AMD CPU PowerNow的用法是在/etc/fstab中增加一行代码sysfs /sys sysfs defaults 0 0。
起用laptop_mode模式的CPU变频功能:更改CONTROL_CPU_FREQUENCY=1,
BATT_CPU_*:在电池供电时CPU变频设定,
LM_AC_CUP_*:laptop_mode模式电源供电时CPU进行变频设定,
NOLM_AC_CUP_*:非laptop_mode模式电源供电时CPU进行变频设定,
可用的CPU频率请见:/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
可以的CPU调节器请见:/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
CONTROL_CPU_THROTTLING=0
如果你的CPU不支持变频设定,只支持过热保护时请用(此功能多用于P4cpu,amd不适用),
CPU过热保护降频,可用的降频模式请见:/proc/acpi/processor/CPU*/throttling,
若*_CPU_THROTTLING=maximum则CPU运行非常慢!
若*_CPU_THROTTLING=minimum则CPU运行较快!
若*_CPU_THROTTLING=medium则是CPU一半的频率运行!

CPU 过热保护降频跟intel speed step不同。speed step的降频是根据CPU负荷自动调整工作频率的机制,它可以让CPU在两种工作模式之间随意地切换,即接交流电时的最大性能模式和电池状态时的节电模式,其目的在于降低发热和功耗;而CPU过热保护降频(即 CPU throttle)属于硬件过热保护技术,当CPU内部温度超过一定临界值时,为保护CPU不被烧毁而进行’降频’。
CPU throttle降频机制的原理是,当传感器检测到CPU内部温度超过临界值时,开始在CPU时钟周期中插入空闲周期然后再送入ALU(算术逻辑运算单元)。ALU是CPU中是真正负责运算的部件,因为此时ALU的频率为CPU时钟主频的一半,所以此时CPU性能也就降半。


/proc/acpi/button/lid/LID/state:
state: open
laptop的屏幕开合键状态,laptop-mode.conf的配置项ENABLE_LAPTOP_MODE_WHEN_LID_CLOSED将会用到此状态,若此配置项值为1,则合上屏幕时会进入laptop_mode模式。
laptop的LCD通常是个能源消耗大户,以至于LCD的开合,LCD的亮度调节都对laptop的能源有个重大影响,至于laptop的屏幕开合键状态及相关执行动作,请见系统菜单system-preferences-power management内容。

/proc/acpi/ac_adapter/AC/state:
state: on-line
laptop-mode.conf的配置项ENABLE_LAPTOP_MODE_ON_AC将会用到此状态,若此配置项值为1,则可以在电源适配器供电时使用laptop_mode模式。
laptop的电源适配器状态。on-line表示在电源适配器供电模式,off-line表示在电池供电模式。
至于laptop的电源状态及相关执行动作,请见系统菜单system-preferences-power management内容。

/proc/acpi/battery/CMB1/state:
present: yes
capacity state: ok
charging state: discharging
present rate: 0 mA
remaining capacity: 4000 mAh
present voltage: 12450 mV

/proc/acpi/battery/CMB2/state:
present: no

其它status中无表示的laptop_mode.conf配置

CONTRON_SYSLOG_CONF
CONTRON_SYSLOG_CONF=0:是否用laptop_mode_tools来控制syslogd,值0则否,值1则是;当值1时, laptop_mode_tools则把原始的syslogd配置文件,备份为/etc/syslog.conf.no-lm,当系统为非 laptop_mode模式时则还原为原始的syslogd配置文件。

LM_AC_SYSLOG_CONF=/etc/syslog-on-ac-with-lm.conf
Laptop_mode模式用电源适配器供电时syslog文件为:/etc/syslog-on-ac-with-lm.conf

NOLM_AC_SYSLOG_CONF=/etc/syslog-on-ac-without-lm.conf
非Laptop_mode模式用电源适配器供电时syslog文件为:/etc/syslog-on-ac-without-lm.conf

BATT_SYSLOG_CONF=/etc/syslog-on-battery.conf
电池供电时syslog文件为:/etc/syslog-on-battery.conf

SYSLOG_CONF_SIGNAL_PROGRAM=syslogd
当产生syslog的配置文件被改变或替换时信号通知的程式为syslogd
SYSLOG_CONF=/etc/syslog.conf
原始syslogd配置文件为/etc/syslog.conf

CONTROL_START_STOP=1:laptop_mode_tools能自动开始和结束程序在不同的电源供电情况下。
简略点讲:你可以放置自已编写的脚本到/etc/laptop-mode/batt-stop, batt-start, lm-ac-stop,lm-ac-start, nolm-ac-stop,nolm-ac-start文目下,切换不同的供电情况时,将执行相关目录下的脚本。脚本的编写要求是可以传递"start" 或"stop"参数,如切换不同电源供电情况时将传递触发此情况之前所执行脚本的"stop"参数,和现在将执行脚本的"start"参数。
什么时候会用到此功能,比如,你在从桌面拿开laptop,到会议室时,可能想让电脑作些什么例行操作,然后由会议室回到办会桌时,又能让电脑作些什么例行操作之类的。大家自已想吧。


CONTROL_DPMS_STANDBY
CONTROL_DPMS_STANDBY=0:是否控制DPMS(显示器电源管理系统),DPMS通常支持两种模式Standby(待机), Suspend(挂起)。值0则否,值1则控制DPMS(显示器电电源管理信号)待命。
显示器工作状态的控制既可以由BIOS来完成,也可以在OS中设定。在BIOS电源管理设置项中,如果将 “Video off method(视频关闭方式)”交给DPMS,当在一定时间内没有对计算机进行操作后,显示器就会进入待机状态,电源指示灯闪烁;如果再隔一段时间仍未对计算机进行操作,显示器则进入节能效果更佳的挂起状态,此时电源指示灯为黄色(正常显示时为绿色)。
待机状态下,显卡停止输出场同步信号,显示器中场扫描电路停止工作,但行电路继续工作,灯丝也继续给阴极加热,虽然显示器处于黑屏,但可以被瞬间唤醒;
挂起状态下,显卡同时停止行、场扫描信号输出,显示器行、场扫描电路均停止工作,灯丝供电如果从行电路获得,此时灯丝也不亮了。挂起状态下只有电源维持工作,耗电量很少,但唤醒时间也较长。
提示,更多更祥细的有关显示器电源管理可到BIOS菜单配置。

BATT_DPMS_STANDBY=300:电池供电下显示器空闲超过5分种进入待机状态。
LM_AC_DPMS_STANDBY=1200:laptop_mode模式电源适配器供电下荧屏显示器超过20分种进入待机状态。
NOLM_AC_DPMS_STANDBY=1200:非laptop_mode模式电源适配器供电下荧屏显示器超过20分种进入待机状态。

CONTROL_TERMINAL=0
laptop_mode_tools是否控制终端(显示输出终端)关闭。值0为否,值1则是。
BATT_TERMINAL_BLANK_MINUTES=1
BATT_TERMINAL_POWERDOWN_MINUTES=2
电池供电情况下显示输出关闭和断电等候时间。
LM_AC_TERMINAL_BLANK_MINUTES=10
LM_AC_TERMINAL_POWERDOWN_MINUTES=10
laptop_mode模式电源适配器供电情况下显示输出关闭和断电等候时间。
NOLM_AC_TERMINAL_BLANK_MINUTES=10
NOLM_AC_TERMINAL_POWERDOWN_MINUTES=50
非laptop_mode模式电源适配器供电情况下显示输出关闭和断电等候时间。
上述这些设置指明了在多久时间后显示输出终端关闭并断电。如BLANK_MINUTES=2 and POWERDOWN_MINUTES=5意味着显示输出设备将在7分钟之后关闭并断电。
参数值的范围值在1到60分钟间,值0则表示禁止。


ENABLE_AUTO_HIBERNATION
ENABLE_AUTO_HIBERNATION=0:当电池将放完电时,是否允许laptop_mode_tools控制laptop自动进入睡眠,值0为否,值1则是。
HIBERNATE_COMMAND=/usr/sbin/hibernate:当触发电脑自动睡眠时将执行的命令为/usr/sbin/hibernate.
AUTO_HIBERNATION_BATTERY_CHARGE_PERCENT=2:当电池剩余电量为总电池充电量的百分之几时电脑将自动睡眠。
AUTO_HIBERNATION_ON_CRITICAL_BATTERY_LEVEL=1:当电池报告其放电到紧急情况时将启动电脑自动睡眠。

下面是一些系统内核默认参数,如果你不知道你要作什么,请不要随便改变它。
DEF_UPDATE=5
DEF_XFS_AGE_BUFFER=15
DEF_XFS_SYNC_INTERVAL=30
DEF_XFS_BUFD_INTERVAL=1
DEF_MAX_AGE=30
XFS_HZ=100

总结:本文通过结合laptop_mode_tools的输出信息来讲解laptop_mode_tools的配置文件,讲述了加载点控制、
文件系统超前预读缓冲设置、脏数据处理、磁碟驱动器写缓冲、驱动器电源控制、内存数据同步时间、CPU变频及CPU过热保护设置、
显示输出设备节省方案等方法相关知识。希望大家用好这个2.6内核加入的laptop_mode模式,用好你的laptop,也希望对想深入
了解系统和对系统优化感兴趣的朋友启一个抛砖引玉的作用。
注:本文原创,传载请注明出处。谢谢!
http://kw-gift.com/blog/index.php?entry=entry061025-180208


======================================================
ubuntu在ENABLE_LAPTOP_MODE是true的情况下,当切换至电源时hdparm -B
1才会被执行。而ubuntu默认是将ENABLE_LAPTOP_MODE设置为false的,默认安装完gusty后grep
ENABLE_LAPTOP_MODE
/etc/default/acpi-support得到的是false. 在这种情况下就算是切换至电池,hdparm -B1也不会被执行,因为切换至电池时执行的脚本是/etc/acpi/power.sh, 其中判断执行不执行hdparm -B 1的一段是这样写的:
if [ x$ENABLE_LAPTOP_MODE = xtrue ]; then
            (sleep 5 && laptop_mode_enable)&
fi
而laptop_mode_enable是执行hdparm -B 1命令的。所以默认情况下(ENABLE_LAPTOP_MODE = false)含有hdparm -B 1的laptop_mode_enable是不被调用的。我使用的是hp6220 + gusty,默认hdparm -I /dev/sda |grep Advanced得到的是 Advanced power management level: 128这个128就是hdparm -B xx来设置的,ubuntu默认是128,在ENABLE_LAPTOP_MODE是false的情况下,切换至电池后,这个值仍然是128而不是1。

但为什么好多人在切换至电池后这个值被设置为1呢,除了不小心将ENABLE_LAPTOP_MODE设置为true外,还有可能是笔记本BIOS默认设置是在切换至电池后就尽可能的让硬盘省电,在这种情况下ubuntu的设置就被BIOS的设置给覆盖了,所以频繁load_cycle。

这里是一名ubuntu的开发者关于此问题的解释http://www.linux-hero.com/rant/ubuntu-hard-drive-explosions/ [linux-hero.com]。

原创粉丝点击