Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.53 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # adjust the following three values to your needs
  4. DEV=sda
  5. IDLEMIN=10
  6. LOGFILE=/tmp/spindown.log
  7.  
  8. type echo | grep -qi built || echo "Warning: echo is not a built-in command"
  9.  
  10. STATFILE=/sys/block/$DEV/stat
  11. PERIOD=5
  12. let "CYCLES=$IDLEMIN*60/$PERIOD"
  13. state=active
  14.  
  15. # keep 'sleep' executable in memory to prevent disk spin-up loading 'sleep'
  16. sleep 100d &
  17.  
  18. rw=0
  19. count=0
  20. downtime=0
  21. read start rest < /proc/uptime
  22. start=${start%.*}
  23. echo "" >> $LOGFILE
  24. date "+%D %T - start monitoring of /dev/$DEV" >> $LOGFILE
  25. while true ; do
  26.   rw_old=$rw
  27.   read rw < $STATFILE
  28.   if [ "$rw" != "$rw_old" ] ; then
  29.     if [ "$state" = "standby" ] ; then
  30.       read now rest < /proc/uptime
  31.       now=${now%.*}
  32.       let diffs="$now-$lastacc"
  33.       date -d "$diffs seconds ago" "+%D %T - idle" >> $LOGFILE
  34.       let diffs="$now-$idle"
  35.       let "downtime+=$diffs"
  36.       let "percent=($downtime*100)/($now-$start)"
  37.       date -d "$diffs seconds ago" "+%D %T - spin down" >> $LOGFILE
  38.       let "h=$diffs/3600" "m=($diffs/60)%60" "s=$diffs%60"
  39.       date "+%D %T - spin up after ${h}h ${m}m ${s}s (${percent}%% down)" >> $LOGFILE
  40.     fi
  41.     count=0
  42.     state=active
  43.     read lastacc rest < /proc/uptime
  44.     lastacc=${lastacc%.*}
  45.   else
  46.     if [ "$state" = "active" ] ; then
  47.       let "count=$count+1"
  48.     fi
  49.   fi
  50.   if [ "$state" = "active" -a $count -ge $CYCLES ] ; then
  51.     #hdparm -Y /dev/$DEV   # use this to actually spin down
  52.     state=standby
  53.     read idle rest < /proc/uptime
  54.     idle=${idle%.*}
  55.   fi
  56.   sleep $PERIOD
  57. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement