Erzwingen Sie das Herunterfahren einer externen Festplatte unter Linux (Himbeer-Pi)

14

Ich bin gerade dabei, einen Heimserver mit einem Raspberry Pi einzurichten, dessen externe Festplatte über USB angeschlossen ist. Meine Festplatte läuft jedoch im Leerlauf niemals herunter.

Ich habe schon die Hinweise ausprobiert raspberrypi.org ... ohne Erfolg.

1.)

sudo hdparm -S5 /dev/sda

kehrt zurück

/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

kehrt zurück

/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

... und 3.)

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

kehrt zurück

/dev/sda: HDD         1234

... ohne das Laufwerk herunterzudrehen.

Ich verwende folgende Hardware:

  • Inateck FDU3C-2 USB-HDD-Dockingstation mit zwei Anschlüssen
  • Western Digital WD10EZRX Grün 1 TB

Ist es möglich, dass die gesendeten Spin-Down-Signale irgendwo überschrieben / verloren / ignoriert werden?

user258346
quelle
1
Update: Die erwähnte Inateck-Dockingstation verfügt über eine Funktion zum Klonen von Festplatten, die einen Master / Source- und einen Slave / Sink-Port für Festplatten bietet. Beim Anschließen der Festplatte an den Slave-Port trainieren die oben genannten Befehle. Dadurch wird das Problem des fehlenden Spin-Down auf den Master-Port begrenzt.
user258346
1
Wenn Sie der Meinung sind, dass dies eine Lösung ist, sollten Sie Ihre eigene Lösung akzeptieren. Corny mag es scheinen, aber es ist nützlich für zukünftige Leser mit dem gleichen Problem.
MariusMatutiae
1
Sie wissen natürlich, dass der Befehl, den Sie in Ihrem Skript verwenden, genau derselbe ist, von dem Sie sagten, dass er nicht funktioniert hat. hdparm -y / dev / sda ...
MariusMatutiae

Antworten:

3

Mit HD-Idle hatte ich kein Glück; es lief aber funktionierte nicht. Am Ende schrieb ich das Skript:

#!/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
user300457
quelle
4
ich dachte hdparm -y hat nicht funktioniert
Cristian Ciupitu
Danke, funktioniert perfekt. Meine blaue WD-Festplatte wird jetzt heruntergefahren, wenn sie nicht verwendet wird. Was ist Ihrer Meinung nach ein vernünftiges Intervall, in dem cron das Skript nennt? Ich nenne es jetzt alle 15 Minuten.
Tarator
5

Ja, es ist möglich, erfordert jedoch einige kundenspezifische Entwicklungsarbeiten und ist nicht trivial. Der Code wird spezifisch für den USB- & gt; SATA-Bridge-Chip INSIDE Ihres Gehäuses sein.

Der Deal ist, dass die USB-Bridge mehr als ein elektrischer Konverter ist. Eine per USB angeschlossene Festplatte emuliert ein SCSI-Laufwerk mit einem anderen Befehlssatz. Während die standardmäßigen Lese- / Schreib- / Suchbefehle die ganze Zeit übersetzen, wird das exotischere Hoch- und Runterfahren nicht ausgeführt. Die meisten Chips tun das nicht. Außerdem gibt es KEINE universelle Chip Level API. Wenn ich also den Code geschrieben hätte, hätte ich ein Programmierhandbuch für den USB-Bridge-Chip.

Fazit: Wenn Sie keine Programmierspezifikationen auf dem Chip haben und mit dem ATA- und SCSI-Befehlssatz und der Kapselung von Passthrough-Befehlen vertraut sind, müssen Sie darauf verzichten. Zu viel Arbeit und kein Standard.

David Lethe
quelle
5

Es ist durchaus möglich, dass die von Ihnen gesendeten Signale vernachlässigt werden. Sie haben keine Ausgabe von bereitgestellt

sudo hdparm -I /dev/sdX

Das hätte uns die Festplattenfähigkeiten erklärt, aber viele Festplatten reagieren einfach nicht auf diese Befehle.

Zum Glück gibt es ein sehr bequemes Dienstprogramm, hd-Leerlauf, die Sie hier herunterladen können So können Sie das Herunterfahren einer Festplatte nach einer bestimmten Zeit erzwingen. Das Programm wurde speziell für Debian entwickelt (funktioniert aber allgemein unter Linux), so dass die Installation für Sie sehr einfach sein sollte. Ich hoffe nur, dass es auch auf einer ARM-Architektur funktioniert, was ich nicht testen kann.

Edit: kompiliert und installiert korrekt auf Raspbian.

MariusMatutiae
quelle