Управление кулером в Ubuntu при помощи fancontrol

04.01.2010 8 Автор Vovanys

После покупки минисервера появилась необходимость контролировать обороты кулеров, чтобы убрать вообще издаваемый шум.

Для того чтобы это сделать необходимо поставить пакет lm-sensors.
apt-get install lm-sensors

В папке /etc/init.d/ появляется новый скрипт fancontrol который периодически опрашивает датчики и если необходимо меняет обороты.

Для получения данных об оборотах куллеров необходимо  выполнить комманду:

root@vovanys:~# sensors
it8718-isa-0290
Adapter: ISA adapter
in0: +1.17 V (min = +0.00 V, max = +4.08 V)
in1: +1.82 V (min = +0.00 V, max = +4.08 V)
in2: +3.39 V (min = +0.00 V, max = +4.08 V)
in3: +4.08 V (min = +0.00 V, max = +4.08 V) ALARM
in4: +3.15 V (min = +0.00 V, max = +4.08 V)
in5: +0.03 V (min = +0.00 V, max = +4.08 V)
in6: +1.23 V (min = +0.00 V, max = +4.08 V)
in7: +4.08 V (min = +0.00 V, max = +4.08 V) ALARM
in8: +4.08 V
fan1: 537 RPM (min = 0 RPM)
fan2: 891 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
temp1: -53.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: -2.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: +20.0°C (low = +127.0°C, high = +90.0°C) sensor = thermal diode
cpu0_vid: +0.000 V
coretemp-isa-0000
Adapter: ISA adapter
Core 0: +47.0°C (high = +86.0°C, crit = +100.0°C)
coretemp-isa-0001
Adapter: ISA adapter
Core 1: +47.0°C (high = +86.0°C, crit = +100.0°C)

Fan1: обороты кулера  процессора.

Fan2: обороты внешнего кулера, который подключается отдельно (у меня отдельно подключена 120-тка)

Для управления используются файлы /sys/class/hwmon/hwmon0/device/fan1_input и /sys/class/hwmon/hwmon0/device/fan2_input

Взависимости от числа записанного в файле меняется скорость вращения (и шума) кулера.

Для того чтобы включить кулер на «полную» можно сделать так:
echo "255" > /sys/class/hwmon/hwmon0/device/fan1_input

Чтобы у знать какое число отвечает за какие обороты необходимо выполнить команду pwmconfig

При запуске команды запустится утилита которая выдаст список оборотов и число которое необходимо посылать в файл /sys/class/hwmon/hwmon0/device/fan1_input, такого плана:
hwmon0/device/pwm1
PWM 255 FAN 1713
PWM 240 FAN 1713
PWM 225 FAN 1642
PWM 210 FAN 1527
PWM 195 FAN 1400
PWM 180 FAN 1285
PWM 165 FAN 1153
PWM 150 FAN 1036
PWM 135 FAN 902
PWM 120 FAN 784
PWM 105 FAN 829
PWM 90 FAN 1106
PWM 75 FAN 0
Fan Stopped at PWM = 75

Как показывает вывод самые большие обороты у кулера при значении 255, а если передать что-то ниже 75 кулер остановится вообще.

Теперь необходимо настроить файл которые отвечает за обороты и температуру (взаимосвязь температура = обороты)  /etc/fancontrol :

У меня он имеет вид:
INTERVAL=3
FCTEMPS=hwmon0/device/pwm1=/sys/bus/platform/drivers/coretemp/coretemp.0/temp1_input hwmon0/device/pwm3=/sys/bus/platform/drivers/coretemp/coretemp.0/temp1_input
FCFANS= hwmon0/device/pwm1=hwmon0/device/fan1_input hwmon0/device/pwm3=hwmon0/device/fan2_input
MINTEMP=hwmon0/device/pwm1=30 hwmon0/device/pwm3=30
MAXTEMP=hwmon0/device/pwm1=60 hwmon0/device/pwm3=60
MINSTART=hwmon0/device/pwm1=120 hwmon0/device/pwm3=120
MINSTOP=hwmon0/device/pwm1=75 hwmon0/device/pwm3=0

INTERVAL: частота (в секундах) опроса датчиков температуры.
FCTEMPS: устройство ввода температуры процессора.
FCFANS: устройство ввода текущей скорости кулера. Например: hwmon0/device/pwm1=hwmon0/device/fan1_input. Здесь мы описываем что за температуру pwm1 отвечают обороты fan1_input.
MINTEMP: температура (°C) при которой нужно ВЫКЛЮЧАТЬ кулер на процессоре.
MAXTEMP: температура (°C) при которой кулер надо включать на МАКСИМАЛЬНУЮ скорость.
MINSTOP: значение PWM при котором останавливается кулер.
MINSTART: значение PWM при котором кулер запускается вновь, должно быть немного выше MINSTOP.
Если используется несколько кулеров то параметры необходимо писать через пробел.
После того как файл сохранен необходимо запустить fancontrol:

/etc/init.d/fancontrol start

И посмотреть используя sensors какие сейчас обороты и какая температура.