如果你在你的路由器上外接了一块硬盘,而你又不是一直在使用它,你可能会想要自动休眠这块硬盘。一是为了减少噪音,二是为了减少热量以避免高温对硬盘造成伤害。

这篇介绍的方法可能不适用于每一个路由器。

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"