ich werf hier noch einen anderen Ansatz in die Runde
die Kollegen von WD schalten ihre Festplatten im NAS aus, indem sie mit einem Script ständig die iostasts des Kernels beobachten
d.h. cat /proc/diskstats
hier die Doku zu den Feldern:
http://www.kernel.org/doc/Documentation/iostats.txt
Werden innerhalb einer gewissen Zeit keine (Lese/Schreib)-Zugriffe der Festplatte festgestellt, dann wird in dem Script die Festplatte mit
/usr/sbin/hdparm -y /dev/sd?
abgeschaltet. An dieser Stelle kann auch ein Shutdown durchgeführt werden.
ich habe mal das WD-Script für ein bis zwei Festplatten kopiert:
Die Variable SLEEPMIN ist hier der TimeOut in Minuten
cat /etc/model dient bei WD zur Ermittlung der Anzahl der Festplatten
Rich (BBCode):
#!/bin/sh
SLEEPMIN=10
#Determine which model (1NC/2NC) we are running on.
MODEL=`/bin/cat /etc/model`
if [ "$MODEL" == "WWLXN" ];then
MODEL="1NC"
else
MODEL="2NC"
fi
while :; do
/usr/sbin/hdparm -C /dev/sda | /bin/grep standby >/dev/null
if [ "$?" -ne "0" ]; then
# Write datetime to default RTC file
/bin/date +%Y%m%d%H%M > /etc/.defaultRTC
/bin/sync
/bin/sleep 3
sleepcount=0
iow=`/bin/cat /proc/diskstats | /bin/grep -E 'sda ' | /usr/bin/cut -d' ' -f16`
ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sda4' | /usr/bin/cut -d' ' -f10`
[ -z "$ior" ] && ior=0
io=`/usr/bin/expr $iow + $ior`
if [ "$MODEL" == "2NC" ];then
ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sdb4' | /usr/bin/cut -d' ' -f10`
[ -z "$ior" ] && ior=0
io=`/usr/bin/expr $io + $ior`
fi
while :; do
# Wait for 60 seconds
/bin/sleep 60
iow=`/bin/cat /proc/diskstats | /bin/grep -E 'sda ' | /usr/bin/cut -d' ' -f16`
ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sda4' | /usr/bin/cut -d' ' -f10`
[ -z "$ior" ] && ior=0
io2=`/usr/bin/expr $iow + $ior`
if [ "$MODEL" == "2NC" ];then
ior=`/bin/cat /proc/diskstats | /bin/grep -E 'sdb4' | /usr/bin/cut -d' ' -f10`
[ -z "$ior" ] && ior=0
io2=`/usr/bin/expr $io2 + $ior`
fi
if [ "$io" -eq "$io2" ]; then
sleepcount=$((sleepcount+1))
else
sleepcount=0
io=$io2
fi
if [ "$sleepcount" -eq "$SLEEPMIN" ]; then
/usr/sbin/hdparm -y /dev/sda >/dev/null
if [ "$MODEL" == "2NC" ];then
/usr/sbin/hdparm -y /dev/sdb >/dev/null
fi
break
fi
done
fi
/bin/sleep 60
done
Der Witz dieser Lösung ist, dass nur der Kernel beobachtet wird. Keine Prozesse etc. Entscheidend ist nur was hinten an der Festplatte ankommt (nach dem swap etc.)
Setzt man SLEEPMIN auf einem Wert von 30 oder 60 Minuten, dann dürfte im LAN auch Ruhe sein.