Mal wieder Zeit gefunden, einen schon leicht angestaubten Punkt auf meiner 2code-Liste abzuhaken:
Ein Bash-Script, das Platten bei Inaktivität nach definierbarem Timeout per hdparm -y in Standby schickt. Für mich sehr nützlich bei SATA-Platten, die sich nicht per hdparm -S konfigurieren lassen.
Gehostet wie immer auf github, oder direkt hier:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/bin/bash # # Automatic disk standby using kernel diskstats and hdparm # # Version 1.1, 2011 by Alexander Koch <lynix47@gmail.com> # # DEVICES syntax: DEVICE:TIMEOUT_SEC DEVICES=( "sda:120" "sdb:120" ) function device_worker() { test -e "/dev/$1" || return 1 logger -t hdd-spindown.sh "spawned monitor thread for $1" COUNT_R=0 COUNT_W=0 while true; do NEW_R=$(awk '{print $1}' /sys/block/$1/stat) NEW_W=$(awk '{print $5}' /sys/block/$1/stat) if [ $COUNT_R -eq $NEW_R ] && [ $COUNT_W -eq $NEW_W ]; then if hdparm -C /dev/$1 | grep active &>/dev/null; then logger -t hdd-spindown.sh "suspending $1" hdparm -qy /dev/$1 if [ $? -gt 0 ]; then logger "failed to suspend $1" return 1 fi fi else COUNT_R=$NEW_R COUNT_W=$NEW_W fi sleep $2 done } for D in ${DEVICES[@]}; do device_worker $(echo "$D" | cut -d ':' -f 1) $(echo "$D" | cut -d ':' -f 2) & done exit 0 |
Auf Performance-Optimierungen habe ich bewusst verzichtet und alles möglichst simpel gehalten.
Funktionsbedingt ist der einstellbare Wert für den Timeout (T) übrigens nicht hart; die reale Zeit an Inaktivität ti genügt der Bedingung T ≤ ti < 2T.