在 linux (raspberry pi) 上强制关闭外部硬盘驱动器

use*_*346 17 linux hard-drive external-hard-drive raspberry-pi

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

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

1.)

sudo hdparm -S5 /dev/sda
Run Code Online (Sandbox Code Playgroud)

返回

/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
Run Code Online (Sandbox Code Playgroud)

2.)

sudo hdparm -y /dev/sda
Run Code Online (Sandbox Code Playgroud)

返回

/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
Run Code Online (Sandbox Code Playgroud)

...和 ​​3。)

sudo sdparm --flexible --command=stop /dev/sda
Run Code Online (Sandbox Code Playgroud)

返回

/dev/sda: HDD         1234
Run Code Online (Sandbox Code Playgroud)

...没有驱动器降速。

我使用以下硬件:

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

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

小智 5

是的,这是可能的,但需要一些自定义开发工作,而且代码将特定于您的机箱内的 USB->SATA 桥接芯片。

这笔交易是 USB 桥接器不仅仅是一个电气转换器。USB 连接的 HDD 模拟具有不同命令集的 SCSI 驱动器。虽然标准的读/写/搜索命令一直在转换,但更奇特的向上/向下旋转不会。大多数芯片不会这样做。此外,没有通用的芯片级 API。所以如果我写了代码,我就必须有一个 USB 桥接芯片的编程手册。

最重要的是,除非您对芯片有编程细节并且熟悉 ATA 和 SCSI 指令集以及封装直通命令,否则您将不得不这样做。工作太多,没有标准。


Mar*_*iae 5

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

sudo hdparm -I /dev/sdX
Run Code Online (Sandbox Code Playgroud)

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

幸运的是,有一个非常方便的实用程序,hd-idle,您可以从这里下载允许您在指定的时间流逝后强制降低磁盘转速。该程序是专门为 Debian 开发的,(但它一般适用于 Linux),因此它的安装对您来说应该非常容易。我只是希望它也适用于我无法测试的 ARM 架构。

编辑:它可以在 raspbian 上正确编译和安装。


小智 5

我没有使用 hd-idle 的运气;它运行但没有运行。我最终编写了以下脚本:

#!/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
Run Code Online (Sandbox Code Playgroud)

  • 我认为 `hdparm -y` 没有用。 (5认同)