faq обучение настройка
Текущее время: Чт мар 28, 2024 22:18

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 80 ]  На страницу 1, 2, 3, 4, 5, 6  След.
Автор Сообщение
СообщениеДобавлено: Пн сен 09, 2013 15:18 
Не в сети

Зарегистрирован: Вт июл 23, 2013 11:19
Сообщений: 484
На эту тему было достаточно много вопросов на этом и других форумах. Как временное решение я предложил написать скрипт управления, кто-то мне за это даже пообещал "памятник нерукотворный". Памятник мне рановато, еще поживу ;) , а скрипт готов. Всем жажущим - можете применять. Проверял только на DNS-325, но обязан работать на всех DNS-3xx. Если у кого на отличной от 325-го модели не заведется - пишите, будем разбираться.

1. Создаем файл скрипта, например fan_new.sh
Содержание fan_new.sh:
Код:
#!/bin/sh

t_stop=41
t_start=46

killall -9 fan_control

while true
do
   curr=`/usr/sbin/fan_control -g 0 | awk '{print $4*1}'`
   curr_stat=`/usr/sbin/fan_control -g 3 | awk '{print $4*1}'`
   if [ "$1" != "" ] ; then
      echo "temp = $curr , state = $curr_stat"
   fi
   if [ $curr -ge $t_start ] ; then
      if [ $curr_stat -eq 0 ] ; then
         /usr/sbin/fan_control -f 2
         if [ "$1" != "" ] ; then
            echo "FAN start"
         fi
      fi
   fi
   if [ $curr -le $t_stop ] ; then
      if [ $curr_stat -ge 1 ] ; then
         /usr/sbin/fan_control -f 0
         if [ "$1" != "" ] ; then
            echo "FAN stop"
         fi
      fi
   fi
   sleep 60
done

Параметры можно указать свои:
t_stop - температура остановки вентилятора
t_start - температура запуска вентилятора
Я не делал 3-х ступенчатое управление, только вкл/выкл. Полное управление увеличит скрипт как минимум раза в 2, а сегодня понедельник, я столько строчек не осилю ;)
Влючение вентилятора на макс.оборотах - строка "/usr/sbin/fan_control -f 2". Для кого это слишком шумно, может поменять на "/usr/sbin/fan_control -f 1". Но при сильном перегреве этого может не хватать для нормального охлаждения.

2. Для тех, кто не знает, что такое fun_plug, создайте файл "fun_plug" (без расширения), залейте его и "fan_new.sh" в корень Volume_1 и перегрузите NAS. И на этом все.
Содержимое fun_plug:
Код:
chmod +x /mnt/HD/HD_a2/fan_new.sh
/mnt/HD/HD_a2/fan_new.sh &


3. Для тех, кто пользуется fun_plug, дописать эти 2 строчки в конец существующего /mnt/HD/HD_a2/fun_plug. После этого перезапускать не обязательно, можно зайти по телнет или ssh и запустить
Код:
chmod +x /mnt/HD/HD_a2/fan_new.sh
/mnt/HD/HD_a2/fan_new.sh &


Кто хочет посмотреть отладку работы, зайти по телнет или ssh и запустить
Код:
/mnt/HD/HD_a2/fan_new.sh -d

Когда надоест - Ctrl+C и
Код:
/mnt/HD/HD_a2/fan_new.sh &

Можно и без fun_plug обойтись, но в этом варианте любая ошибка может привести к полному выходу из строя устройства, поэтому тут описывать не буду ;)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн сен 09, 2013 22:25 
Не в сети

Зарегистрирован: Пт авг 30, 2013 18:52
Сообщений: 16
На DNS-315 все работает! Огромное спасибо. А монумент все же воздвигнем :)


Вложения:
fan_monument.JPG
fan_monument.JPG [ 68.83 KiB | Просмотров: 33012 ]
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн сен 09, 2013 22:53 
Не в сети

Зарегистрирован: Пт авг 30, 2013 18:52
Сообщений: 16
Есть вопрос: а что будет, если не отрубать фоновый процесс fan_control - убрать строку killall -9 fan_control?
Может ли выполнение этого скрипта параллельно с работающим fan_control привести к каким-то сбоям? Просто если оставить fan_control в фоне, в случае, когда перегрев будет сильным, несмотря на отработку скрипта, и температуры дойдут до зашитых штатно значений, вентилятор станет управляться уже в соответствии с fan_control. На практике это, конечно, никогда не произойдет, но иметь дополнительную подстраховку с прописанным режимом HIGH (в fan_control) было бы неплохо. В то же время при обычном режиме использования NASa режим LOW (в fan_new.sh) вполне справляется и не так шумит.
В отладочном режиме скрипт без killal -9 fan_control работает без ошибок, но запускать напостоянку без советов знающих людей побаиваюсь


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 03, 2013 14:10 
Не в сети

Зарегистрирован: Вт июл 23, 2013 11:19
Сообщений: 484
Вот дали ссылку http://bnrg.eecs.berkeley.edu/~randy/Courses/CS294.F07/11.3.pdf на исследование отказоустойчивости винтов. Она подтверждает, как оптимальные, цифры из /etc/fan_temperature.txt
TEMPERATURE_STOP = "39"
TEMPERATURE_LOW = "45"
TEMPERATURE_HIGH = "49"
Ниже 32-33С винт резко идет в разнос. Про выше 45-46С определенности нет, но исследователи все же не рекомендуют более 50С.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 09, 2013 10:46 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
Поправил скрипт для off/low/high.
Код:
#!/bin/sh

t_stop=41
t_start=46

killall -9 fan_control

while true
do
   curr=`/usr/sbin/fan_control -g 0 | awk '{print $4*1}'`
   curr_stat=`/usr/sbin/fan_control -g 3 | awk '{print $4*1}'`
   if [ "$1" != "" ] ; then
      echo "temp = $curr , state = $curr_stat"
   fi
   if [ $curr -ge $t_start ] ; then
      if [ $curr_stat -le 1 ] ; then
         /usr/sbin/fan_control -f 2
         if [ "$1" != "" ] ; then
            echo "FAN start 2"
         fi
      fi
   elif [ $curr -gt $t_stop ] ; then
      if [ $curr_stat -le 1 ] ; then
         /usr/sbin/fan_control -f 1
         if [ "$1" != "" ] ; then
            echo "FAN start 1"
         fi
      fi
  elif [ $curr -le $t_stop ] ; then
      if [ $curr_stat -ge 1 ] ; then
         /usr/sbin/fan_control -f 0
         if [ "$1" != "" ] ; then
            echo "FAN stop"
         fi
      fi
   fi
   sleep 60
done

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Последний раз редактировалось valeriy_raa Ср окт 09, 2013 19:23, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Ср окт 09, 2013 19:06 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
Нашел ошибки входных данных.
Команда
/usr/sbin/fan_control -g 0
выдает 42 градуса в то время как в информации о системе 35

Такое ощущение что при kill процесса fan_control перестает готовить данные для webа

А /usr/sbin/fan_control -g 3
выдает только значения 0 либо 1.а где 2?

Причем разница между
/usr/sbin/fan_control -f 2
/usr/sbin/fan_control -f 1
/usr/sbin/fan_control -f 0
явно есть


Как говорится кому верить?

Поэтому чтобы избежать лишних вызовов скрипт можно упростить
Код:
#!/bin/sh

t_stop=41

killall -9 fan_control

/usr/sbin/fan_control -f 2

while true
do
   curr=`/usr/sbin/fan_control -g 0 | awk '{print $4*1}'`
   curr_stat=`/usr/sbin/fan_control -g 3 | awk '{print $4*1}'`
   if [ "$1" != "" ] ; then
      echo "temp = $curr , state = $curr_stat"
   fi
   if [ $curr -gt $t_stop ] ; then
      if [ $curr_stat -eq 0 ] ; then
         /usr/sbin/fan_control -f 2
         if [ "$1" != "" ] ; then
            echo "FAN start"
         fi
      fi

  elif [ $curr -le $t_stop ] ; then
      if [ $curr_stat -ge 1 ] ; then
         /usr/sbin/fan_control -f 0
         if [ "$1" != "" ] ; then
            echo "FAN stop"
         fi
      fi
   fi
   sleep 60
done


_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Чт окт 10, 2013 11:36 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
Поправил скрипт для off/low/high. C игнорированием результата /usr/sbin/fan_control -g 3
Код:
#!/bin/sh
t_stop=40
t_start=45
killall -9 fan_control
while true
do
   curr=`/usr/sbin/fan_control -g 0 | awk '{print $4*1}'`
   if [ "$1" != "" ] ; then
      curr_stat=`/usr/sbin/fan_control -g 3 | awk '{print $4*1}'`
      echo "temp = $curr , state = $curr_stat"
   fi
   if [ $curr -ge $t_start ] ; then
      /usr/sbin/fan_control -f 2
   elif [ $curr -gt $t_stop ] ; then
      /usr/sbin/fan_control -f 1
   elif [ $curr -le $t_stop ] ; then
      /usr/sbin/fan_control -f 0
   fi
   sleep 30
done

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 08:35 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
При использовании всех данных скриптов DNS-320 не уходит в сон :(

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 11:16 
Не в сети

Зарегистрирован: Вт июл 23, 2013 11:19
Сообщений: 484
valeriy_raa писал(а):
При использовании всех данных скриптов DNS-320 не уходит в сон :(

попробуйте поиграться этим
Код:
# hdparm -S /dev/sda
  -S: bad/missing standby-interval value (0..255)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 11:31 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
vtverdohleb писал(а):
попробуйте поиграться этим
Код:
# hdparm -S /dev/sda
  -S: bad/missing standby-interval value (0..255)


Например
Код:
hdparm -S 60 /dev/sda

5 минут нет обращения выключать диски.
Вы так предлагает использовать?

Код:
#!/bin/sh

t_stop=41
killall -9 fan_control
/usr/sbin/fan_control -f 2

#В сон HDD если нет активности в течении 5 минут(60 - 5 минут)
hdparm -S 60 /dev/sda
hdparm -S 60 /dev/sdb

while true
do
   curr=`/usr/sbin/fan_control -g 0 | awk '{print $4*1}'`
   curr_stat=`/usr/sbin/fan_control -g 3 | awk '{print $4*1}'`
   if [ "$1" != "" ] ; then
      echo "temp = $curr , state = $curr_stat"
   fi
   if [ $curr -gt $t_stop ] ; then
      if [ $curr_stat -eq 0 ] ; then
         /usr/sbin/fan_control -f 2
         if [ "$1" != "" ] ; then
            echo "FAN start"
         fi
      fi

  elif [ $curr -le $t_stop ] ; then
      if [ $curr_stat -ge 1 ] ; then
         /usr/sbin/fan_control -f 0
         if [ "$1" != "" ] ; then
            echo "FAN stop"
         fi
      fi
   fi
   sleep 30
done

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Последний раз редактировалось valeriy_raa Пт окт 11, 2013 16:38, всего редактировалось 2 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 12:37 
Не в сети

Зарегистрирован: Вт июл 23, 2013 11:19
Сообщений: 484
да


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 16:22 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
В интернете нашел вот такой текст fan_control.sh

Код:
#!/bin/sh

# how often to read and store temperatures in seconds
PERIOD="30"
# if you have just one HDD set to "0"
SECOND_HDD=1
LOGFILE="/mnt/USB/HD_c1/log/fan.log"
# writing temperature to this file :
LOGTEMPFILE="/mnt/USB/HD_c1/log/fan_temp"
LOGTEMPEXT=".log"

# temperatures and hysteresis
SysHigh="60"
SysLow="55"
HddHigh="48"
HddLow="45"
Hyst="2"

calc()
{
awk 'BEGIN {print '"$*"'; exit}'
}



# do not edit bellow this line
# ----------------------------
SL=$((SysLow-Hyst))
DL=$((HddLow-Hyst))

logcommand() {
   logger "$1"
   echo "`/bin/date +"%b %e %H:%M:%S"`: $1" >> $LOGFILE
}

logtemperature() {
   if [ "$5" = "$1" ]; then
      TEXT=" (NC) "
   else
      TEXT=""
   fi
   case $1 in
      0) FAN_LEVEL="Stop";;
      1) FAN_LEVEL="Low";;
      2) FAN_LEVEL="High";;
      *) FAN_LEVEL="Undefined";;
   esac

   echo "`/bin/date +"%Y-%m-%d %H:%M:%S"`-Fan:$FAN_LEVEL$TEXT-Temp: Sys:$2-HDD1:$3-HDD2:$4" >> $LOGTEMPFILE$(/bin/date +"%y%m%d")$LOGTEMPEXT
}

disk1_temp() {
   if hdparm -C /dev/sda | grep -q standby ; then
      Ta=-1
   else
      Ta=`smartctl -d marvell --all /dev/sda |grep 194 | tail -c 3 | head -c 4`
   fi
}
disk2_temp() {
    if hdparm -C /dev/sdb | grep -q standby ; then
      Tb=-1
   else
      Tb=`smartctl -d marvell --all /dev/sdb |grep 194 | tail -c 3 | head -c 4`

         fi
}
   
system_temp() {
   ST=`/usr/sbin/ffff -g 0 | tail -c 3`
}

logcommand "Starting DNS-320 Fancontrol script"
disk1_temp
if [ $SECOND_HDD -eq "1" ]; then
   disk2_temp
else
   Tb="-1"
fi
system_temp
logcommand "Current temperatures: Sys: "$ST"C, HDD1: "$Ta"C, HDD2: "$Tb"C"

FAN=`/usr/sbin/ffff -g 3 | tail -c 2`

while /bin/true; do
   disk1_temp
   if [ $SECOND_HDD -eq "1" ]; then
        disk2_temp
    else
        Tb="-1"
    fi
    OLD_FAN=$FAN

   system_temp
   if [ $ST -ge $SysHigh -o $Ta -ge $HddHigh -o $Tb -ge $HddHigh ]; then
   logcommand "primer if FAN$FAN"
      if [ $FAN != 2 ]; then
         logcommand "Running fan on high, temperature too high: Sys: "$ST"C, HDD1: "$Ta"C, HDD2: "$Tb"C "
         /usr/sbin/ffff -f 2
         FAN=2
      fi
   else
      if [ $ST -ge $SysLow -o $Ta -ge $HddLow -o $Tb -ge $HddLow ]; then
         if [ $FAN != 1 ]; then
            logcommand "Running fan on low, temperature high: Sys: "$ST"C, HDD1: "$Ta"C, HDD2: "$Tb"C "
            /usr/sbin/ffff -f 1
            FAN=1
         fi
      else
         if [ $ST -le $SL -a $Ta -le $DL -a $Tb -le $DL ]; then
            if [ $FAN != 0 ]; then
               logcommand "Stopping fan, temperature low: Sys: "$ST"C, HDD1: "$Ta"C, HDD2: "$Tb"C "
               /usr/sbin/ffff -f 0
               FAN=0
            fi
         fi
      fi
   fi
   logtemperature $FAN $ST $Ta $Tb $OLD_FAN
   /bin/sleep $PERIOD
done

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 19:57 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
Устройство спит. Потребление около 4 Вт
Код:
#!/bin/sh

t_stop=41
t_start=45

killall -9 fan_control

#В сон HDD если нет активности в течении 5 минут(60 - 5 минут)
hdparm -S 60 /dev/sda
hdparm -S 60 /dev/sdb

while true
do
   curr=`/usr/sbin/fan_control -g 0 | awk '{print $4*1}'`
   if [ $curr -ge $t_start ] ; then
      /usr/sbin/fan_control -f 2
   elif [ $curr -gt $t_stop ] ; then
      /usr/sbin/fan_control -f 1
   elif [ $curr -le $t_stop ] ; then
      /usr/sbin/fan_control -f 0
   fi

   curr_stat=`/usr/sbin/fan_control -g 3 | awk '{print $4*1}'`

   if [ "$1" != "" ] ; then
      echo "temp = $curr , state = $curr_stat"
   fi

   sleep 30
done

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Последний раз редактировалось valeriy_raa Сб окт 12, 2013 08:40, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт окт 11, 2013 20:51 
Не в сети

Зарегистрирован: Вт июл 23, 2013 11:19
Сообщений: 484
Ну и замечательно! Александер думаю этот пост увидит и в ШК отстучит, возможно этот скрипт примут за базовый в дальнейших прошивках


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Сб окт 12, 2013 08:43 
Не в сети

Зарегистрирован: Чт апр 05, 2007 11:14
Сообщений: 211
Откуда: Москва
vtverdohleb писал(а):
Ну и замечательно! Александер думаю этот пост увидит и в ШК отстучит, возможно этот скрипт примут за базовый в дальнейших прошивках


Не уверен. Осталась проблема с тем, что в Информация о системе температура остается на момент загрузки и в дальнейшем не меняется. Видимо скрипт должен записывать в какое-то место значение температуры и возможно чтото ещё
Кроме всего прочего правильнее исправить ошибки в fan_control. В GPL он в бинарном виде.Так что самим не поправить :(

_________________
DIR-825/AC G1A (3.0.1)
DNS-320 Alt-F(0.1RC4.1-rev-A2)<-2.05b08(2.13.0507.2014)
DFL-260E (10.22.01.04-26411 Apr 1 2015)
DCS-5020L
DGS-1100-16
DIR-655 (HW:A3;FW:1.35WW Build 02)
DFL-210 (v2.27.08.03)


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 80 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB