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 bereitgestelltsudo 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