Всю жизнь у меня всегда есть сервер дома, для таких сайтов как этот, если я плачу за интернет и он очень стабильный, как и энергоснабжение, то не всегда есть смысл платить за хостинг.
Помимо этого, есть необходимость в облачных хранилищах, которые тоже дорогие.
Плюсом на досуге я занимаюсь съемкой видео на ютуб и хранить все исходники не особо хочется.
Terramaster F4-423 это по сути обычный компьютер на интеле, у него есть биос, стоят 4 пиновые PWM вентиляторы, есть два слота под оперативную память (я поставил 16 гигов), есть два слота под nvme диски, и что самое интересное - есть hdmi выход, т.е. я просто подключил монитор, клавиатуру и могу устанавливать любую систему на голое железо, а не в виртуалки.
Практика показала что даже при выкрученных на максимум вентиляторах обычные системные блоки достаточно плохо продувают диски, а тут если прибавить вентиляторы чуть выше среднего, то в 30 градусную жару при 4х дневной нагрузке 24/7 на все 4 диска (ребилд на скорости в 250 мегабайт на каждый диск). NAS выдувает воздух с задней стенки, и засасывает его через корзины, т.е. входной поток проходит сквозь все диски и при такой плотной компановке охлаждение в норме, не превышает 43-45 градусом, но если мои диски просто положить на стол и подключить, то они быстро нагреются до 55 градусов, это очень горячие диски на 18 террабайт с 3 раздельными блоками головок и кучей блинов.
Поэтом, у вот такой накопитель создает идеальные условия для охлада моих дисков.
Да и так, я разглядывал кучу системников, сейчас сложно найти системник на 4 диска 3.5, а системники с хорошей продувкой корзины обычно как целая тумбочка.
Установил Debian 12, минималку netinstall
Первым делом добавил все ветки репозитория в /etc/apt/sources.list
deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware deb http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware
Далее стандарно обновил систему
apt update && apt upgrade
Далее накатил минимальный набор софта
apt install wget curl iotop blktrace git hdparm
mdadm --create --verbose /dev/md0 -l 10 -n 4 /dev/sda /dev/sdb /dev/sdc /dev/sdd
Указать уровень шума
hdparm -B 128 /dev/sd[a,b,c,d]
Указать время засыпания при неактивности
hdparm -S 20 /dev/sd[a,b,c,d]
Принудительно приглушить диски
DRIVE_TO_SET=/dev/sd[a,b,c,d] && hdparm -Y $DRIVE_TO_SET
Для полноценной работы нужно чтобы все датчики нормально мониторились - температуры дисков, процессора и обороты вентилятора
apt install lm-sensors
Для обычных ситуаций достаточно запустить команду sensors-detect
и нажимать везде y, но у меня особый случай, точнее, устройство специфичное,
чтобы получить результат прямо сейчас, вводим:
modprobe coretemp modprobe drivetemp modprobe it87 force_id=0x8620
А чтобы это работало после перезагрузки
в /etc/modules
coretemp drivetemp it87
Но it87 просто так не заведется, нужно еще опцию прописать в файле
/etc/modprobe.d/it87.conf
options it87 force_id=0x8620
После данных манипуляций команда sensors будет иметь такой вывод, т.е. видно
drivetemp-scsi-3-0 Adapter: SCSI adapter temp1: +33.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +32.0°C, highest = +46.0°C) drivetemp-scsi-1-0 Adapter: SCSI adapter temp1: +34.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +32.0°C, highest = +49.0°C) coretemp-isa-0000 Adapter: ISA adapter Package id 0: +51.0°C (high = +105.0°C, crit = +105.0°C) Core 0: +44.0°C (high = +105.0°C, crit = +105.0°C) Core 1: +44.0°C (high = +105.0°C, crit = +105.0°C) Core 2: +44.0°C (high = +105.0°C, crit = +105.0°C) Core 3: +44.0°C (high = +105.0°C, crit = +105.0°C) acpitz-acpi-0 Adapter: ACPI interface temp1: +27.8°C it8620-isa-0a30 Adapter: ISA adapter in0: 1.88 V (min = +0.00 V, max = +3.06 V) in1: 1.37 V (min = +0.00 V, max = +3.06 V) in2: 2.26 V (min = +0.00 V, max = +3.06 V) +5V: 5.59 V (min = +0.00 V, max = +6.12 V) in4: 2.27 V (min = +0.00 V, max = +3.06 V) in5: 2.22 V (min = +0.00 V, max = +3.06 V) in6: 1.34 V (min = +0.00 V, max = +3.06 V) 3VSB: 1.61 V (min = +0.00 V, max = +6.12 V) Vbat: 3.36 V fan2: 0 RPM (min = 0 RPM) fan3: 1290 RPM (min = 0 RPM) fan4: 0 RPM (min = 0 RPM) fan5: 0 RPM (min = 0 RPM) temp1: +41.0°C (low = -128.0°C, high = +127.0°C) sensor = thermal diode temp2: +37.0°C (low = -128.0°C, high = +127.0°C) sensor = thermal diode temp3: +47.0°C (low = -128.0°C, high = +127.0°C) temp4: +47.0°C temp5: +47.0°C temp6: +47.0°C intrusion0: ALARM drivetemp-scsi-2-0 Adapter: SCSI adapter temp1: +34.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +32.0°C, highest = +50.0°C) drivetemp-scsi-0-0 Adapter: SCSI adapter temp1: +34.0°C (low = +0.0°C, high = +60.0°C) (crit low = -40.0°C, crit = +70.0°C) (lowest = +32.0°C, highest = +46.0°C) nvme-pci-0300 Adapter: PCI adapter Composite: +41.9°C (low = -273.1°C, high = +81.8°C) (crit = +84.8°C) Sensor 1: +41.9°C (low = -273.1°C, high = +65261.8°C) Sensor 2: +38.9°C (low = -273.1°C, high = +65261.8°C)
Узнать где какой датчик в /sys/class/hwmon/… можно такой командой
for f in $(ls -1 /sys/class/hwmon/); do echo $f" - "$(cat /sys/class/hwmon/${f}/name); done
Выведет например такое
hwmon0 - acpitz hwmon1 - nvme hwmon2 - coretemp hwmon3 - drivetemp hwmon4 - drivetemp hwmon5 - drivetemp hwmon6 - drivetemp hwmon7 - it8620
Как мы поняли из прошлого листинга, вентиляторы у нас это hwmon7, а вот понять какой наш, можно последовательно выполнив на все вентиляторы подобные команды (я уже знаю что у меня hwmon7/pwm3 это оба вентилятора)
Сперва включаем ручное управление
echo 1 > /sys/class/hwmon/hwmon7/pwm3_enable
Потом останавливаем
echo 0 > /sys/class/hwmon/hwmon7/pwm3
А потом запускаем на полную скорость
echo 255 > /sys/class/hwmon/hwmon7/pwm3
Мой первый вариант получения скоростей был таким, через lm-sensors
# получение температуры датчиков: id_датчика, строчка с темпепературой function getSensTemp { echo $(sensors $1 | grep $2 |tr -s ' '|cut -d '+' -f 2| cut -d '.' -f1); } #получение оборотов вентилятора function getFanSpeedRPM { echo $(sensors it8620-isa-0a30 |grep fan$1|tr -s ' '|cut -d ' ' -f 2); } # задает все переменные function setTemp { tempHdd1=$(getSensTemp "drivetemp-scsi-0-0" "temp1"); tempHdd2=$(getSensTemp "drivetemp-scsi-1-0" "temp1"); tempHdd3=$(getSensTemp "drivetemp-scsi-2-0" "temp1"); tempHdd4=$(getSensTemp "drivetemp-scsi-3-0" "temp1"); hddMax=$(echo $tempHdd1"!"$tempHdd2"!"$tempHdd3"!"$tempHdd4|sed 's/!/\n/g'|sort -n|tail -1) tempSSD=$(getSensTemp "nvme-pci-0300" "Composite"); tempCpu=$(getSensTemp "coretemp-isa-000" "Package"); fanRPM=$(getFanSpeedRPM 3); }
в итоге стало более проще
function getMaxHddTemp { echo $(($(cat /sys/class/hwmon/hwmon[3,4,5,6]/temp1_input|sort -n|tail -1)/1000)); } function getCpuTemp { $(($(cat /sys/class/hwmon/hwmon2/temp1_input)/1000)) }