Тема: SdUnIdle
Всем привет
Наконец то я решил проблему с автоотключением винта по определенному времени (у меня было 10 минут).
В общем как оказалось, достаточно прочитать смарт винта, это сбивало внутренний таймер винта. написал небольшлй скрипт, теперь на моем сервере винт крутится минимум час, а не колбасится туда-сюда каждые 15 минут
Идея такова, что в скрипте каждые 5 минут читается смарт, если не было обращений к диску. И так до тех пор, пока таймер разрешает
Сам скрипт:
#!/bin/sh
UNIDLE=3001
SLEEPTIME=300
ctimer=0
cline="";
ti=0
tu=0
while true; do
cat /proc/diskstats | grep "sda " > /var/log/unidle.log
while read line; do
if [ "$cline" != "$line" ]; then
cline=$line
ctimer=0
if [ "$ti" -gt "0" ]; then
s=`printf "%d hours %d mins\n" $(($ti/60/60%60)) $(($ti/60%60))`
logger "Clear UnIdle Timer. Timer $s"
ti=0
fi
tu=$(($tu+$SLEEPTIME))
else
ctimer=$(($ctimer+$SLEEPTIME))
if [ "$ctimer" -lt "$UNIDLE" ]; then
s=`printf "%d hours %d mins\n" $(($ctimer/60/60%60)) $(($ctimer/60%60))`
logger "Run UnIdle Commnad. Timer $s"
smartctl -a -d sat,12 /dev/sda |grep ^194| awk '{print $10}' > /var/log/unidle1.log
logger "Temperature /dev/sda: " `cat /var/log/unidle1.log` " celsius"
tu=$(($tu+$SLEEPTIME))
else
ti=$(($ti+$SLEEPTIME))
if [ "$tu" -gt "0" ]; then
s=`printf "%d hours %d mins\n" $(($tu/60/60%60)) $(($tu/60%60))`
logger "Stopping UnIdle. Timer $s"
tu=0
fi
fi
fi
sleep $SLEEPTIME
done < /var/log/unidle.log
done