GNU/Linux >> LINUX-Kenntnisse >  >> Linux

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

Ja, es ist möglich, erfordert aber einige benutzerdefinierte Entwicklungsarbeit und ist nicht trivial, und der Code wird spezifisch für den USB->SATA-Bridge-Chip INNERHALB Ihres Gehäuses sein.

Der Deal ist, dass die USB-Bridge mehr als nur ein elektrischer Konverter ist. Eine über USB angeschlossene Festplatte emuliert ein SCSI-Laufwerk, das einen anderen Befehlssatz hat. Während die standardmäßigen Lese-/Schreib-/Suchbefehle die ganze Zeit übersetzen, tun die exotischeren Spin-Up/Down-Befehle dies nicht. Die meisten Chips tun das nicht. Außerdem gibt es KEINE universelle API auf Chipebene. Wenn ich also den Code schreiben würde, müsste ich ein Programmierhandbuch für den USB-Bridge-Chip haben.

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


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

nicht bereitgestellt
sudo hdparm -I /dev/sdX

was uns die Festplattenfähigkeiten mitgeteilt hätte, aber viele Festplatten reagieren einfach nicht auf diese Befehle.

Glücklicherweise gibt es ein sehr praktisches Dienstprogramm, hd-idle, das Sie von hier herunterladen können und mit dem Sie nach einer bestimmten Zeit das Herunterfahren der Festplatte erzwingen können. Das Programm wurde speziell für Debian entwickelt (funktioniert aber generell 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.

Bearbeiten:Es kompiliert und installiert korrekt auf Raspbian.


Ich hatte kein Glück mit hd-idle; es lief aber funktionierte nicht. Am Ende habe ich das folgende Skript geschrieben:

#!/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

Linux
  1. Verwenden der Kraft in der Linux-Befehlszeile

  2. So erzwingen Sie die Textmodus-Installation von Redhat Linux

  3. Echo-Befehlsbeispiele in Linux

  4. Linux-Shell wc -c Zeichenanzahl +1

  5. Erzwingen Sie lokalen IP-Verkehr zu einer externen Schnittstelle

Linux echo Command Tutorial für Anfänger (5 Beispiele)

Bash Echo-Befehl mit Beispielen in Linux erklärt

Echo-Befehl unter Linux

So verwenden Sie den Echo-Befehl in Bash-Skripten unter Linux

Echo-Befehl unter Linux:7 praktische Beispiele

Beispiele für Linux-Echo-Befehle