Spin down script ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Evox
Beiträge: 173
Registriert: 25.04.2009 13:33:52
Wohnort: localhost

Spin down script ?

Beitrag von Evox » 17.02.2016 18:33:31

Patient ist eine WD Blue (EZEX)NoPaste-Eintrag39157 diese geht exakt nur 1x selbständig in Spindown nach (Re)Start von System/hdparm bzw. Manuell dagegen funktioniert problemlos.

Suche eine Möglichkeit über ein zeitgesteuertes Script diese HDD (nur Idle!) schlafen zulegen.
You Disapeared In The Darkness Of The Night...

Benutzeravatar
MegaV0lt
Beiträge: 173
Registriert: 21.11.2011 11:16:07
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Spin down script ?

Beitrag von MegaV0lt » 18.02.2016 09:26:08

Ich habe mir mal ein Skript gebastelt:

Code: Alles auswählen

#!/bin/bash

# spindown.sh
# Prüft '/proc/diskstats' und fährt Disk herunter

#What:          /proc/diskstats
#Date:          February 2008
#Contact:       Jerome Marchand <jmarchan@redhat.com>
#Description:
#               The /proc/diskstats file displays the I/O statistics
#               of block devices. Each line contains the following 14
#               fields:
#                1 - major number
#                2 - minor mumber
#                3 - device name
#                4 - reads completed successfully
#                5 - reads merged
#                6 - sectors read
#                7 - time spent reading (ms)
#                8 - writes completed
#                9 - writes merged
#               10 - sectors written
#               11 - time spent writing (ms)
#               12 - I/Os currently in progress
#               13 - time spent doing I/Os (ms)
#               14 - weighted time spent doing I/Os (ms)
#               For more details refer to Documentation/iostats.txt


#exit   # Deaktiviert!

### Variablen
#DISKLABEL="HDT721010SLA360"          # Label der Disk, die verwendet werden soll
DISKLABEL="$(readlink /mnt/usbdisk)" # Mountpoint ist ein Symlink auf den Namen der Disk
DISKLABEL="$(basename ${DISKLABEL})" # Für den Fall, dass der Link "/mnt/..." lautet""
DISKSTATS="/proc/diskstats"          # diskstats
INTERVALL=$((60*60))                 # Prüfintervall in Sekunden
SGSTART="/usr/bin/sg_start"          # Tool zum herunterfahren der Platte
HDPARM="/sbin/hdparm"                # Tool hdparm
LOG="/var/log/$(basename ${0%.*}).log" # Log
MAXLOGSIZE=$((20*1024))              # In Bytes

[ ! -e $DISKSTATS ] && echo "$DISKSTATS nicht gefunden!" && exit 1
[ ! -e $HDPARM ] && echo "$HDPARM nicht gefunden!" && exit 1
[ ! -e /dev/disk/by-label/$DISKLABEL ] && echo "/dev/disk/by-label/$DISKLABEL nicht gefunden!" && exit 1

[ -e $LOG ] && mv -f $LOG $LOG.old   # Altes Log sichern
echo "$(date +'%F %R') - $0 Start" > $LOG  # Neues Log

DISK="$(readlink -m /dev/disk/by-label/$DISKLABEL)" # /dev/sdb1
#DISK="${DISK/\/dev\/}"                             # sdb1
DISK=$(basename $DISK)                              # sdb1
DISK="${DISK:0:3}"                                  # sdb

while true ; do
  NOW="$(date +'%F %R')"
  while read -r ; do
    DLINE=($REPLY)                   # Zeile in ein Array
    case ${DLINE[2]} in              # 3. Wert ist sd?
      "$DISK") [ -z "$OLDLINE" ] && OLDLINE="$REPLY" && continue
         if [[ "$REPLY" == "$OLDLINE" ]] ; then
           if [ -z "$STOPFLAG" ] ; then
             echo "Stopping disk ($DISK) at $NOW" >> $LOG
             # Stop Disk
             #$SGSTART --stop /dev/$DISK
             $HDPARM -y /dev/$DISK >> $LOG
             STOPFLAG="$NOW"
           fi
           #echo "$NOW - Disk ($DISK) still idle" >> $LOG
           unset ACTIVEFLAG
         else # Lines changed!
           if [ -z "$ACTIVEFLAG" ] ; then
             echo "Found disk ($DISK) active at $NOW" >> $LOG
             ACTIVEFLAG="$NOW"
           fi
           #echo "$NOW - Disk ($DISK) still active" >> $LOG
           OLDLINE="$REPLY" ; unset STOPFLAG
         fi
         break # Weitere Zeilen müssen nicht gelesen werden
         ;;
    esac
  done < $DISKSTATS

  if [ -e "$LOG" ] ; then       # Log-Datei umbenennen, wenn zu groß
    FILESIZE=$(stat -c %s $LOG)
    [ $FILESIZE -ge $MAXLOGSIZE ] && mv -f "$LOG" "$LOG.old"
  fi

  sleep $INTERVALL # Warten
done

exit
Ohne Gewähr!
"Das Internet? Gibt's diesen Blödsinn immer noch?"
[Homer Simpson], Sicherheitsinspektor im Kernkraftwerk Springfield.

Benutzeravatar
Evox
Beiträge: 173
Registriert: 25.04.2009 13:33:52
Wohnort: localhost

Re: Spin down script ?

Beitrag von Evox » 20.02.2016 14:46:28

Danke für den Input
Schaue mir es mal und Berichte ob es funktioniert.

Seit den Einbau von der WD Blue spinnt Debianhdparm, mal funktioniert spindown dann wiederum nicht. Sämtliche HDD Anschlüsse überprüft und Kabel ausgetauscht.
You Disapeared In The Darkness Of The Night...

Benutzeravatar
Evox
Beiträge: 173
Registriert: 25.04.2009 13:33:52
Wohnort: localhost

Re: Spin down script ?

Beitrag von Evox » 25.02.2016 20:03:19

Teste gerade ein einfaches Script und läuft bisher ohne Probleme.[1]
Debianhdparm (Inaktiv!) wird gebraucht und Debiansmartmontools wird berücksichtigt.
[1] NoPaste-Eintrag39179
You Disapeared In The Darkness Of The Night...

Antworten