在Linux(Raspberry Pi)上强制降速外部硬盘驱动器


16

我目前正在使用具有通过USB连接的外部硬盘的Raspberry Pi设置家庭服务器。但是,我的硬盘驱动器在空闲时永远不会旋转。

我试图在已经提供的线索raspberrypi.org ......没有任何成功。

1.)

sudo hdparm -S5 /dev/sda

退货

/dev/sda:
 setting standby to 5 (25 seconds)
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2.)

sudo hdparm -y /dev/sda

退货

/dev/sda:
 issuing standby command
SG_IO: bad/missing sense data, sb[]:  70 00 04 00 00 00 00 0a 00 00 00 00 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

...和3.)

sudo sdparm --flexible --command=stop /dev/sda

退货

/dev/sda: HDD         1234

...无需降低驱动器转速。

我使用以下硬件:

  • Inateck FDU3C-2双端口USB 3.0硬盘扩展坞
  • 西部数据WD10EZRX绿色1TB

发送的降速信号是否有可能被覆盖/丢失/忽略?


1
更新:提到的Inateck扩展坞具有克隆硬盘驱动器的功能,为HDD提供了主/源和从/宿端口。将HDD插入从端口时,请执行上述锻炼命令。这限制了缺少向下旋转到主端口的问题。
user258346

1
如果您认为这是解决方案,则应该接受自己的解决方案。虽然看起来很不错,但对于以后遇到同样问题的读者来说,它很有用。
MariusMatutiae

1
您当然会意识到,您在脚本中使用的命令与您所说的不起作用完全相同,对吗?hdparm -y / dev / sda ...
MariusMatutiae

Answers:


4

我没有HD空闲的运气;它运行了但没有运行。我最终在下面编写了脚本:

#!/bin/bash
# This script looks for recent disk access, and if nothing has changed, puts /dev/"drive" into spindown mode.
# This should be used only is the hdparm power management function is not working.
# Call this script with cron or manually as desired
#
#
#
# Change which drive this script looks at by changing the drive variable below:
drive="sda"
#
#
current=`date`
caller=$(ps ax | grep "^ *$PPID" | awk '{print $NF}')
filename="/tmp/diskaccess.txt"
if [ -f "$filename" ]; then
    stat_old=`cat "$filename" | tr -dc "[:digit:]"`
    stat_new=`cat /sys/block/"$drive"/stat | tr -dc "[:digit:]"`
    if [ "$stat_old" == "$stat_new" ]; then
        stat="0"
        echo "The disk hasn't been used; spinning down /dev/$drive"
        echo $stat_old
        hdparm -y /dev/$drive > /dev/null
    else
        stat="1"
        echo $stat_old
        echo $stat_new
        echo "The drive has been used..."
        echo $stat_new > $filename
    fi
else
    echo "/tmp/diskaccess.txt file does not exist; creating it now."
    echo $stat_new > $filename
fi
echo $stat " - " $drive " - " $current " - by: " $caller >> /tmp/diskaccesslog.txt

4
我以为hdparm -y没有用。
Cristian Ciupitu 2014年

谢谢,效果很好。我的WD蓝色硬盘现在不使用时会旋转下来。您认为cron调用脚本的合理间隔是多少?我现在每15分钟调用一次。
Tarator

5

是的,这是可能的,但需要一些自定义开发工作,而且并非易事,并且代码将特定于机柜的USB-> SATA桥芯片INSIDE。

关键是USB桥接器不仅可以用作电转换器。带有USB的硬盘驱动器模拟具有不同命令集的SCSI驱动器。虽然标准的读/写/搜索命令一直在翻译,但更奇特的向上/向下旋转不会。大多数芯片不会这样做。此外,没有通用的芯片级API。因此,如果我编写代码,则必须拥有USB桥接芯片的编程手册。

最重要的是,除非您在芯片上具有编程方面的知识,并且熟悉ATA和SCSI指令集并封装传递命令,否则您将无需做任何事情。太多的工作,没有标准。


5

您发送的信号完全有可能被忽略。您没有提供的输出

sudo hdparm -I /dev/sdX

可以告诉我们磁盘功能,但是许多磁盘根本不响应这些命令。

幸运的是,有一个非常方便的实用程序hd-idle,您可以从此处下载该实用程序,使您可以在经过指定的时间后强制磁盘旋转。该程序是专为Debian开发的(但通常可在Linux上运行),因此您的安装应该非常容易。我只是希望它也可以在ARM体系结构上工作,这是我无法测试的。

编辑:它编译并正确安装在raspbian上。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.