盒子

猫盘折腾记:WD笔记本蓝盘的待机问题

2019-10-04  本文已影响0人  重案组知乎

前言:真没想到在实现硬盘待机(准确地说,是搞清楚这块硬盘的待机逻辑究竟是什么)上花了这么多的时间。本文是猫盘折腾记:Debian下的LED、风扇自动控制脚本这篇教程的番外篇,记录在硬盘待机上所花费的功夫...

工作过程

既然把猫盘定位为一个使用频率很低的轻量级NAS,那自然做就做到极致,把硬盘不工作时待机作为必须目标来实现。不为省电,只为延长硬盘使用寿命、降低设备工作温度、降低噪音、延长风扇寿命。

猫盘的刷机是照葫芦画瓢,完全按照猫盘 (ARMADA A3720) 刷机教程进行的,非常顺利,在此再次感谢原作者精准而周到的文字记录!!!

刷机成功后,从废笔记本上拆下硬盘,西数320G,WD Scorpio Blue蓝盘,具体型号是WD3200BPVT。安装进猫盘后,按照教程末尾提到的方法,修改了待机时间为10分钟,即把/etc/udev/rules.d/99-hdparm.rules里面的hdparm -S后面的参数改成120。

在没有精确计时的情况下,猫盘一直放置着,过了一段时间后硬盘的确是停止了工作,检测方法是用手触摸,感觉不到硬盘的转动。也可以用命令行hdparm -C /dev/sda,输出为standby表示已经待机,如果是active/idle则表示还在工作状态。

问题

既然硬盘待机没问题,那么就开始编写我的控制脚本。第一次写Linux Shell,边学边写,大概半天时间也就搞定了。另外,为了检测硬盘温度,安装了smartmontools。脚本一开始运行的效果似乎不错,但经过仔细测试,发现在硬盘待机上存在问题:

这两个现象的并存,让我几乎人格分裂。(1)会让你觉得脚本有问题,导致没有待机,(2)则证明脚本并不会操作硬盘,不会触发唤醒。

进一步搜索资料,发现有人说使用hdparm -S设置待机等待时间的命令,必须要先使用hdparm -B 数字来设置APM节能级别,数字大于127时不会待机。通过hdparm -B /dev/sda我能看到当前APM数值为254,可之前硬盘明明是能待机的... 还是试试吧,于是在/etc/udev/rules.d/99-hdparm.rules中的命令中增加了-B127,但结果是没有看到任何变化。

在种种现象的相互矛盾、各种参数设置无法达到预计效果的情况下,不由的开始怀疑硬盘并没有按照软件预想进行工作。在搜了很多资料后,发现这一篇文章
提到,hdparm的-B、-S参数可能在西数的某些硬盘上不能按设计工作,甚至有人遇到问题的硬盘型号跟我的一模一样:

The HD claims to support APM, but settings > 128 don't disable standby as claimed, so it exhibits the cycling problem. This is a "Blue" model as follows: "Model Family: Western Digital Scorpio Blue Serial ATA (AF) Device Model: WDC WD3200BPVT-22JJ5T0"

又经过几天零零碎碎的调查、测试,得出以下结论(此处省略描写辛酸的1万字):

APM(hdparm的-B参数) Spin down time (-S参数) 待机等待时间
1 60 10秒
1 120 10秒
63 60 10秒
64 60 10秒
65 60 10分钟
70 60 10分钟
90 60 10分钟
127 60 10分钟
127 96 10分钟
127 144 12分钟
127 180 15分钟
200 60 10分钟
254 60 10分钟

解决办法

在我的这块硬盘上,使用hdparm -B127 -S120 /dev/sda,并且不安装smartmontools,可以按照预期,在硬盘无操作10分钟后进入待机状态。如果需要调整为等待15分钟,则-S参数设置为180,以此类推。

终极解决办法

在上面提到的那篇帖子中,提到了终极解决方法, 使用hd-idle来控制硬盘待机。其原理好像是监控/proc/diskstats中的硬盘读写计数器,当持续不变的时间达到预设值时,就发送指令让硬盘待机。这样相当于利用操作系统的监控能力,避开了硬盘厂商五花八门的电源管理机制,理论上在任何硬盘上都能工作,的确是一个好办法。不过因为我已经把这块硬盘的待机工作机制基本研究清楚,就没有再试了。

上一篇 下一篇

猜你喜欢

热点阅读