另外这种东西既然研究了就不妨研究的深入透彻一些。看中文炒冷饭甚至以讹传讹没意思。
据我 google 看到的内容总结了一下,大概以下几点:
- openSUSE 是最早发现这个问题的,要早于 Ubuntu,甚至我们的这个 wiki 页面:
old-en.opensuse.org/Disk_Power_Management
被好多其它发行版(Ubuntu)引用来作为修复该问题的依据。看你们都还在翻 08/09 年的老文,所以澄清下,你们现在纠结的问题是我们几年前发现的。
我们在 11.0 里就一度修复过这个问题:
bugzilla.novell.com/show_bug.cgi?id=386555
但是在 11.4 中又移除了该修复,因为它给用户造成的问题比硬盘寿命降低更大 (more dangerous than useful):
bugzilla.novell.com/show_bug.cgi?id=663067
- 硬盘的 load cycle count 是硬盘磁头挂起到滑道中的次数,这个问题有两面性:
挂起到滑道的次数越多,越伤磁头 ; 挂起到滑道的次数越少,越容易损坏硬盘磁碟中的数据,甚至刮出坏道。(机械硬盘的内部跟老式唱片机是一样的)
而这个挂起间隙是由硬盘制造商出厂前来设定的,跟 openSUSE 乃至整个 Linux 都没有关系:
howtoeverything.net/linux/hardware/why-some-hard-disks-wont-spin-down-hdparm
bugzilla.novell.com/show_bug.cgi?id=816388
比如西部数据是 8 秒,日立也很短,这可能是他们的侧重点在于数据的安全性而不是硬盘的寿命造成的(西部数据的 1TB 笔记本机械硬盘在淘宝卖不到 600,能用两年以上,一天一块钱不到,我 07 年的日立现在也还能用); 而 APM 是 Linux 的内核 ATA 驱动提供的一个 hack,它也有局限,对一些厂商的硬盘就毫无办法,人家把电源(AC/Battery 切换)和声音(parking 磁头时的咔哒声)管理硬编程到硬盘固件中,显示的是跟 SSD 一样的 not supported,而另一些厂商的硬盘则成为了 ATA 驱动已知的老大难问题:
ata.wiki.kernel.org/index.php/Known_issues#Drives_which_perform_frequent_head_unloads_under_Linux
但即使没有问题,使用 ATA 驱动来 hack 也是很脏的一个 hack。
因为那是你的硬盘硬件乃至设计目的的问题。
正如 openSUSE 的开发者在 bugzilla 所说:
「没有一个值是通吃的。有些厂家要 255 才行,有些要 254,有些 128 就够了。」
言下之意就是:这个值设的越大,你冒的风险就越大。你硬盘的理论寿命提升到 10 万年,笔记本电脑猛得歪一下数据丢一半,又有什么意义呢。看开发者的意思是宁可承担「openSUSE 杀硬盘」,也不承担「openSUSE 丢数据」的骂名。更何况该骂名本来就该由厂家来承担,「安全但不耐用」和「长寿但爱坏」两害相权的问题。
- 为什么同样的厂家设置,Windows 的 LCC 升得慢?
好多人包括我的第一感觉在内,是「卧槽 openSUSE 粗大事了」。
但实际上这是 Linux 文件系统的设计问题。Ext3/Ext4/Btrfs 等文件系统有 Journal 日志功能,每 3 到 4 秒就会唤醒磁盘一次,即使你在休眠 / 挂起。而如果你的 APM 是默认的 8 秒,ok,那你 LCC 增加得可快了,刚 park 磁头又被叫回来。
Windows 的 NTFS/FAT 文件系统没有 Journal 功能。直接表现就是:Windows 唤醒很慢。
================================================================
大环境摆在这里,现在的问题就是:
-
你对机械硬盘价格的接受程度如何?如果每天一块钱比较 Okay 的话,那就不用管。
-
如果不 Okay 的话,笔记本是拿来供着的,或者真的很穷,那你可以查 ata wiki 看你的硬盘 parking 时间是否厂家设置太短,然后自行参考 old-en 的 workaround 去冒险~
正确的解决方法应该像这个里面说的那样:
bugzilla.novell.com/show_bug.cgi?id=816388
找问题多的硬盘厂商,提供建议,由 openSUSE 来修。
PS:我贴的那些链接我自己也还没时间看完。可能说的有偏差,见谅。