題 在linux上強制降低外部硬盤驅動器(raspberry pi)


我目前正在使用帶有通過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 HDD擴展塢
  • Western Digital WD10EZRX Green 1TB

發送的降速信號是否有可能被覆蓋/丟失/忽略?


13
2017-09-29 11:29


起源


更新:受監控的Inateck擴展塢具有克隆硬盤驅動器的功能,為HDD提供主/源和從/接收端口。當將HDD插入從端口時,上面提到的命令是鍛煉。這限制了丟失到主端口的減速問題。 - user258346
如果您認為這是解決方案,則應接受自己的解決方案。儘管可能看起來像Corny,但它對於具有相同問題的未來讀者是有用的。 - MariusMatutiae
當然,您確實意識到您在腳本中使用的命令與您聲明的無效工作相同,對吧? hdparm -y / dev / sda... - MariusMatutiae


答案:


我沒有運氣與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

2
2018-02-15 21:16



我想 hdparm -y沒用。 - Cristian Ciupitu


是的,這是可能的,但需要一些自定義開發工作,而不是微不足道,代碼將特定於機箱的USB-> SATA橋接芯片INSIDE。

這筆交易是USB橋不僅僅是一個電子轉換器。 USB連接的HDD模擬具有不同命令集的SCSI驅動器。雖然標準的讀/寫/搜索命令一直在轉換,但更奇特的旋轉上/下命令卻沒有。大多數芯片都不會這樣做。此外,還沒有通用的芯片級API。所以,如果我編寫代碼,我必須有一個USB橋接芯片的編程手冊。

最重要的是,除非你在芯片上有編程細節並且熟悉ATA和SCSI指令集以及封裝傳遞命令,否則你將不得不這樣做。太多的工作,沒有標準。


5
2017-10-21 21:02





您發送的信號完全可能被忽略。你沒有提供輸出

sudo hdparm -I /dev/sdX

這會告訴我們磁盤功能,但許多磁盤根本不響應這些命令。

幸運的是,有一個非常方便的實用程序,高清空閒, 你可以從這裡下載,允許您在指定的時間過後強制磁盤減速。該程序是專為Debian開發的(但它一般適用於Linux),因此它的安裝應該非常容易。我只是希望它也適用於ARM架構,這是我無法測試的。

編輯:它在raspbian上正確編譯和安裝。


5
2017-10-22 08:35