如果你在你的路由器上外接了一块硬盘,而你又不是一直在使用它,你可能会想要自动休眠这块硬盘。一是为了减少噪音,二是为了减少热量以避免高温对硬盘造成伤害。
这篇介绍的方法可能不适用于每一个路由器。
hd-idle
首先,你应当尝试使用 hd-idle
,它会休眠通过 SCSI 层访问的硬盘。安装并测试它是否能够休眠硬盘(假设你的硬盘是 /dev/sda
):
opkg install hd-idle
hd-idle -t sda
如果你听到你的硬盘停转了,接着你就可以去自定义它的配置了,配置文件是 /etc/config/hd-idle
。
hdparm
如果 hd-idle
不工作,那就尝试一下 hdparm
:
opkg install hdparm
hdparm -y /dev/sda
如果这次你听到了硬盘停转,那就去创建一个脚本文件 /etc/spindown
以便启动 hdparm
:
#!/bin/sh
oldstate=''
n="$2"
while :; do
sleep 60
newstate=$(grep "$1" /proc/diskstats)
if [ "$newstate" = "$oldstate" ]; then
n=$(($n - 1))
[ "$n" != 0 ] || hdparm -y /dev/"$1"
else
n="$2"
oldstate=$newstate
fi
done &
接着给脚本添加执行权限:
chmod 777 /etc/spindown
然后添加以下内容到 /etc/rc.local
(假设你的硬盘是 /dev/sda
并且设定闲置 20 分钟后休眠硬盘):
/etc/spindown sda 20
一个更简单的方法是:如果 hdparm -y /dev/sda
工作,可以只将以下内容插入 /etc/rc.local
中:
hdparm -S 240 /dev/hda
其中 240 代表 20 分钟,时间编码的设置可以自行搜索 hdparm
的参数设置。
sdparm
第三个尝试的方法是使用 sdparm
:
opkg install sdparm
sdparm -f -C stop /dev/sda
如果这次你听到硬盘停转了,那么就使用和 hdparm
一样的脚本文件 /etc/spindown
,但是需要将以下行替换:
[ "$n" != 0 ] || hdparm -y /dev/"$1"
为:
[ "$n" != 0 ] || sdparm -f -C stop /dev/"$1"
hd-idle好像不会自动启动,配置完了之后还需要人工/etc/init.d/hd-idle enable和/etc/init.d/hd-idle start一下,可以通过ps | grep hd-idle来判断是否加载了正确的配置文件。
当时我测试了 hd-idle 对我的硬盘不起作用,所以我就没有再设置接下来的开启启动了。另外 hd-idle 是有对应的 luci-app-hd-idle 的,应该可以在那里设置启动的选项。感谢回复。会再对文章进行补充的。👍