Hi Fans!
Ich habe ein kleines Skript gebastelt um die Festplattentemperatur mitzuloggen.
Eigentlich wollte ich damit die Temperatur im NAS messen.
Ein netter Nebeneffekt ist, dass man sieht wann die Platte aktiv war und wann sie im Standby war.
Leider kann man die Temperatur der Platte nicht auslesen ohne sie aufzuwecken. Wenn man Spindown aktiviert hat, muss das Intervall zum Auslesen der Temperatur größer sein, als die eingestellte Spindown Zeit. Deshalb schaue ich vorher nach ob die Platte im Zustand active/idle oder standby ist. Wenn noch nicht genug Zeit vergangen ist, wird nur "on" statt der Temperatur ins Log eingetragen.
Leider hat auch das smatrtctl der Firmware einen Bug und muss ersetzt werden. Dazu das smartctl des NAS4220 aus der database laden, auf das do_it Verzeichnis kopieren, auspacken und folgende Zeilen in das init von do_it einfügen
|
Quellcode
|
1
2
3
4
|
if [ -f $WORK_DIR/smartctl ]; then
echo "replace smartctl binary"
cp $WORK_DIR/smartctl /sbin
fi
|
hdparm -C /dev/hda ermittelt den Zustand (active/idle oder standby) der Platte
smartctl -A /dev/hda liest SMART Daten aus - dort ist auch die Temperatur enthalten
smartctl -y /dev/hda legt die Platte schlafen
TIM_SD muss größer oder gleich mit der im GUI konfigurierten sein
das Skript hddtemp.sh wird im init des do_it wie folgt gestartet und läuft im Hintergrund
|
Quellcode
|
1
2
|
cp $HD_MNT_POINT/public/applications/do_it/hddtemp.sh /var/tmp
/var/tmp/hddtemp.sh &
|
Und hier ist hddtemp.sh
|
Quellcode
|
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
43
44
45
46
47
48
49
50
51
|
#!/bin/sh
#------------------------------------------------
# Harddisk temperature monitor
# Version: 1.0 by HWguru
#
# requires smartctl from NAS4220
# must be on ramdisk to avoid waking up of hdd
# inspired by the spindown tracking tool of gmeyer
#
# TIM_RD sets the readout interval
# TIM_SD must be set to the spindown time
#------------------------------------------------
HDD=/dev/hda #disk to be minitored
HDD_LOGF=hdd_temp.log; #name of logfile
HDD_LOG1=/var/log/$HDD_LOGF; #path in ramdisk
HDD_LOG2=/mnt/IDE1/public/applications/do_it/$HDD_LOGF; #path on disk
TIM_RD=5 #log interval [min]
TIM_SD=30 #spindown time [min]
CNT=0
while (true); do #loop forever
DATTIM=`date +%d.%m.%Y,%H:%M,` #read date and time
echo -n $DATTIM >> $HDD_LOG1;
STATE=`hdparm -C $HDD | grep "drive state" | awk '{print $4}'`
if [ "$STATE" = "active/idle" ]; then #only read temperature if disk is active
if [ "$CNT" = "0" ]; then #and only after TIM_SD - otherwise would not sleep
MINU=`echo $DATTIM | awk 'BEGIN {FS = ","} ; {printf "%2s\n", substr($2,4,2)}'`
HDT=`smartctl -n standby -A $HDD | grep Temperature | awk '{printf "%2s\n", $10}'` #old: substr($4,2,2)
echo $DATTIM$HDT >> $HDD_LOG2; #log to file on disk
else
HDT=on
fi
if [ "$CNT" = "$TIM_SD" ]; then #spindown time reached
CNT=0 #allow temp readout again
else
let CNT+=$TIM_RD
fi
else #HDD in standby
HDT=""
CNT=0 #allow temp readout again
fi
echo $HDT >> $HDD_LOG1; #write entry to logfile
sleep `expr $TIM_RD \* 60` #sleep for time in seconds
done
# end
|
und als
Download in der Database
Kontrolle ist alles
HWguru