Ubuntu系统的ACPI电源管理机制存在缺陷,会大幅减少笔记本硬盘的寿命。
如果安装了Ubuntu的笔记本用户转入电池供电模式,则“/etc/acpi/power.sh”中的默认配置会导致极其频繁的载入循环,报告称100 小时即可达到7000多次,而资料显示大多数笔记本硬盘最多只能承受60万次这种循环。换算下来,这相当于一块全新的笔记本硬盘只能连续实用不到1年。



这个问题主要出在笔记本上,此Bug造成的后果为令硬盘的Load/Unload Cycle次数疯狂增长,我的机器就不幸中彩,每分钟就增加好几次,网上称一般硬盘的设计是能够承受600000次。最让我受刺激是我一个朋友跟我差不多 时间买的硬盘,他的这个数值是0,而我的是11060……



先来验证下这个问题……,需要安装smartmontools包(sudo apt-get install smartmontools)。


然后开启S.M.A.R.T.监视,运行sudo smartctl -s on $HDD($HDD在我机器上是/dev/sda),然后运行sudo smartctl -a $HDD | grep Load_Cycle_Count。


输出结果如下:


225 Load_Cycle_Count 0x0032 099 099 000 Old_age Always - 11060


我的是11060,刷新几次,如果你的数值增长很快,那很幸运,你中彩了。



解决办法,网上有两个:


方法1、创建一个名为"99-hdd-spin-fix.sh"的文件(文件名保留99-和.sh,中间可以随便写),写如下两行字:


#!/bin/sh


hdparm -B 254 /dev/sda


并将该文件复制到以下三个位置:


/etc/acpi/suspend.d/


/etc/acpi/resume.d/


/etc/acpi/start.d/



注:原作者说这种方法只适用于SATA硬盘,不过我的硬盘是IDE的,也有效。此外,据说这种解决方法会造成硬盘过热,不过现在是冬天,感觉不太明显,再看看吧。



方法2、安装laptop-mode-tools(好像UBuntu 7.10默认就装了的),并修改文件/etc/laptop-mode/laptop-mode.conf,设置CONTROL_HD_POWERMGMT=1。



注:第二种方法测试了下,在我的机器上无效。




上面两个方法都需要用sudo执行。



反正现在我的Load/Unload Cycle数是不再增长了,貌似解决了吧。不过感觉硬盘地方有点热,心里作用?



其他人说的第二种方法:

第二种方法应该是这样,本人验证有效:

In /etc/laptop-mode-laptop-mode.conf:
CONTROL_HD_IDLE_TIMEOUT=1
LM_AC_HD_IDLE_TIMEOUT_SECONDS=300
LM_BATT_HD_IDLE_TIMEOUT_SECONDS=300
NOLM_HD_IDLE_TIMEOUT_SECONDS=7200
CONTROL_HD_POWERMGMT=1
BATT_HD_POWERMGMT=254
LM_AC_HD_POWERMGMT=255
NOLM_AC_HD_POWERMGMT=255

In /etc/default/acpi-support:
ENABLE_LAPTOP_MODE=true
SPINDOWN_TIME=60

In /etc/acpi/power.sh:
Changed "$HDPARM -B 1 /dev/$drive 2>/dev/null" to "$HDPARM -B 254 /dev/$drive 2>/dev/null"