笔记本磁盘高频加载/卸载循环问题

注意:本人非硬件专家,下面我仅仅阐述遇到的问题,解决方法,以及我的一些猜想。要仔细的了解这个 BUG,请阅读 Ubuntu Bug 列表的 BUG 59695:High frequency of load/unload cycles on some hard disks may shorten lifetime

我的笔记本是 DELL Latitude D630,从一开始使用我就发现 D630 的硬盘在正常使用中会经常发出“咯吱、咯吱”的响声(不是光驱,比光驱的咯吱声音要小得多),虽然我在 BIOS 里设置了硬盘模式为 Quiet。我一直认为这是正常现象,读取硬盘总会发出声响的。去年我曾经注意到 Ubuntu 的一个硬盘操作 BUG 引起了广泛的关注,但是在新闻中只提到了在电池模式下出现的问题,我也就没有仔细去浏览,而且我想随着 Ubuntu 升级,这个 BUG 应该被早已 fix。

但是今天我被一个事实给吓到了:我一直习以为常的“咯吱、咯吱”声居然是系统 BUG!而且这个 BUG 同样存在于 Windows 和 Linux 。

令我信服这一点的是,在我应用了 Ubuntu Bug 列表中提供的解决方案后,Ubuntu 下的硬盘“咯吱、咯吱”声消失了,而 Windows XP 下仍然会发出这种声音。

重要评论 by 徐宥:windows 没有专门的笔记本版, 电源管理的策略都是沿用桌面的. 如果节能设置为一直打开, 是没有问题的.

简单的来说,这个 BUG 讲述的是笔记本电脑的电源管理的一个问题:笔记本为了保持低功耗,采用了一个方法,就是在不使用硬盘的时候,将硬盘磁头 park 起来;需要使用的时候,再 unpark 磁头。而在实际使用中,这个节电策略被滥用了,导致过于频繁的 park/unpark 磁头,造成磁盘寿命变短,而且会带来磁盘“咯吱、咯吱”的噪声。这是很多笔记本电脑硬盘使用时间不超过一年的一个原因。

一些文章中介绍,一般磁盘设计承受的加载循环计数最多为 600,000 次,而当超过 300,000 次的时候磁盘的响应速度就会变慢,所以平均每小时的加载循环次数应该在 15 次左右,这样才能保证大约 4 年不关机的使用寿命。而我正常使用 7 个月的 D630 平均每小时加载循环次数为 76 次,是设计次数的 5 倍!!

有一个工具可以用来检测笔记本电脑硬盘的加载循环计数 smartmontools,这是开源软件,有 Linux 和 Windows 版本,在 Ubuntu 下可以直接 apt-get。Ubuntu 下用 sudo smartctl -a /dev/sda 命令,Windows 命令行下用类似的命令,可以打印出磁盘的检测信息,主要关注下面两行:
9 Power_On_Hours 0x0032 099 099 000 Old_age Always - 1647
193 Load_Cycle_Count 0x0032 037 037 000 Old_age Always - 126354

Power_On_Hours 就是硬盘使用的总时间,Load_Cycle_Count 就是加载循环计数,二者相除,就能得到每小时加载循环次数,比如我的就是 126354/1647 = 76 次,5倍于设计水平,看了真让我感到恐怖。

Ubuntu 下推荐的解决方案有一个,我简化了一下,将下面的内容保存成一个脚本文件 fix_hdd.sh,用 sudo sh fix_hdd.sh 运行,然后重启即可:
cat > 99-hdd-spin-fix.sh << EOF #!/bin/sh hdparm -B 255 /dev/sda EOF chmod a+x 99-hdd-spin-fix.sh cp 99-hdd-spin-fix.sh /etc/acpi/suspend.d/ cp 99-hdd-spin-fix.sh /etc/acpi/resume.d/ cp 99-hdd-spin-fix.sh /etc/acpi/start.d/ 使用这个解决方案后,我发现在 Ubuntu 下我的 D630 磁盘不会发出频繁的“咯吱”声了,用 smartctl 检测发现 Load_Cycle_Count 增加的非常慢,问题应该是解决了。然后我重启到 Windows XP 下,发现仍有“咯吱”声,用 smartctl 测试了一下,在 20 分钟内大约有 18 个加载循环,和 76 次每小时的平均计数差不多,说明 windows 下也存在这个问题。 这就有点儿让我想不通了,Linux 下出现问题很容易理解,硬件厂商对 Linux 的支持本来就弱,为什么 Windows 下也会有这个问题?我想这些硬盘厂商在出品之前肯定对硬盘在各种情况下的表现进行过很多次测试,Windows 下的测试应该是最重要的一个吧。难道是故意的?

《笔记本磁盘高频加载/卸载循环问题》上有20条评论

  1. 牛啊,软件bug导致疑似硬件故障.......

    挺看好ubuntu这个发行版的,不过,小草深刻地领悟到,开源软件从某种意义上讲是慈善家投资给我等享用的事业。
    那个project后头有强力的经济支持,那个project肯定青春焕发。Ubuntu就是这样,源于debian,却高于debian。

    不知道文博兄赞同否?

    PS,我刚踏入自由世界不到半年,如果上述感想有错误,恳请各位前辈批评指正!

  2. 我不确定这个问题到底算不算硬件故障,这也就是我在前面加上“我不是硬件”专家的原因,关于这个问题也是众说纷纭。

    哈哈,前辈不敢当。就像做科研一样,开源事业也是基金越多越好做。

    但是我觉得投资开源的未必全是慈善家,很有可能是某款商业软件的潜在竞争对手。比如 IE 中总是默认绑定微软的搜索引擎,Google 显然会去支持 Firefox 来尽量压缩 IE 的市场份额。商场如战场,这种方式和罗斯福的《租借法案》有点儿类似。

  3. 是不是日立的硬盘都是这个问题?我朋友的电脑dell d630也是咯吱咯吱的想。前几天另外一个朋友买的日立的硬盘也非常的响。

  4. 从 Ubuntu 论坛和一些其它的反映来看,应该是涉及到所有的硬盘,因为这个循环的频率取决于操作系统
    除非,某厂商的硬盘有专门的选项设置不听操作系统对加载循环的控制。

  5. 我的inspiron 1520 ,
    在linux 下使用时也嗒嗒的响,我被响怕了,让dell给我换了块,还是响,就不了了之了,
    在vista下长时间不使用也很响,但ista 的硬盘活动太频繁了,根本不太可能听到

  6. 一直以来那种咯吱咯吱的声音不止一次在我的耳边想过,我就没有想过可能会是什么bug
    文博,受教了:)

  7. 在一台一直用 vista的T61上尝试了一下, 平均是21。
    在我这台ubuntu7。10上,。。。平均85。。。。。。天阿

  8. 查了一下, T40 Xp_sp2, 大约27次/小时, 感觉还算正常, 呵呵

  9. 觉得具体还是和硬盘相关,不过我的日立HTS541616J9A问题比较严重,windowsxpsp3下,经常是70多,ft
    ubuntu下通过hdparm设置可以实现为0,呵呵

  10. [Comment ID #269892 Will Be Quoted Here]

    请楼上的高手教教我是怎么做的好吗?
    我用的和你一样的硬盘
    但是我不会调试
    就是感觉声音挺响的

    邮箱联系我好吗?
    谢谢你了!!!xzch6@126.com

  11. hdparm -B 255 /dev/sda

    这个是不是应该是254?

    hdparm provides a command line interface to various hard disk ioctls supported by the stock Linux ATA/IDE device driver subsystem. Some options may work correctly only with the latest kernels. For best results, compile hdparm with the include files from the latest kernel source code.
    Options
    When no flags are given, -acdgkmnru is assumed.

    -a
    Get/set sector count for filesystem read-ahead. This is used to improve performance in sequential reads of large files, by prefetching additional blocks in anticipation of them being needed by the running task. In the current kernel version (2.0.10) this has a default setting of 8 sectors (4KB). This value seems good for most purposes, but in a system where most file accesses are random seeks, a smaller setting might provide better performance. Also, many IDE drives also have a separate built-in read-ahead function, which alleviates the need for a filesystem read-ahead in many situations.
    -A
    Disable/enable the IDE drive's read-lookahead feature (usually ON by default). Usage: -A0 (disable) or -A1 (enable).
    -b
    Get/set bus state.
    -B
    Set Advanced Power Management feature, if the drive supports it. A low value means aggressive power management and a high value means better performance. A value of 255 will disable apm on the drive.
    -c

  12. [Comment ID #270253 Will Be Quoted Here]

    很奇怪,我用了这个方法后,一点都不增长了,但本本无法从挂起恢复;后来看到laptop-mode被禁掉了,手动开了laptop-mode之后,挂起正常了,但又开始增长了
    不知道这个怎么解决

    我的好像和这位兄弟一样的硬盘,SATA 5k160 160G。我还特地问过日立客服,日立回复说这个load cycle值确实会损害硬盘

  13. 我听说的解释有点不同:将硬盘磁头 park 起来不是为省电,而是为保护磁盘。台式机硬盘没有这个设计,因为台式机平时是不动的。而笔记本经常移动,所以设计这个 park ,以减少因移动而损伤硬盘的几率

    操作系统会根据 bios 和 硬盘固件 提供的信息来决定 park 的频率。

回复 hawkman 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注