设置 OpenWrt 自动休眠外接硬盘

2019年12月02日 142点热度 0人点赞 2条评论

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

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

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"

Neo

与卿再世相逢日,玉树临风一少年。

文章评论

  • Anonymous

    hd-idle好像不会自动启动,配置完了之后还需要人工/etc/init.d/hd-idle enable和/etc/init.d/hd-idle start一下,可以通过ps | grep hd-idle来判断是否加载了正确的配置文件。

    2020年03月14日
    • Neo

      当时我测试了 hd-idle 对我的硬盘不起作用,所以我就没有再设置接下来的开启启动了。另外 hd-idle 是有对应的 luci-app-hd-idle 的,应该可以在那里设置启动的选项。感谢回复。会再对文章进行补充的。👍

      2020年03月14日