Tech-Research WIKI

технологичные раскопки

Инструменты пользователя

Инструменты сайта


docs:terramaster_homeserver

Домашний сервер на TerraMaster F4-423

Зачем мне такое?

Всю жизнь у меня всегда есть сервер дома, для таких сайтов как этот, если я плачу за интернет и он очень стабильный, как и энергоснабжение, то не всегда есть смысл платить за хостинг.
Помимо этого, есть необходимость в облачных хранилищах, которые тоже дорогие.
Плюсом на досуге я занимаюсь съемкой видео на ютуб и хранить все исходники не особо хочется.

Почему же я выбрал именно Terramaster?

Terramaster F4-423 это по сути обычный компьютер на интеле, у него есть биос, стоят 4 пиновые PWM вентиляторы, есть два слота под оперативную память (я поставил 16 гигов), есть два слота под nvme диски, и что самое интересное - есть hdmi выход, т.е. я просто подключил монитор, клавиатуру и могу устанавливать любую систему на голое железо, а не в виртуалки.

Практика показала что даже при выкрученных на максимум вентиляторах обычные системные блоки достаточно плохо продувают диски, а тут если прибавить вентиляторы чуть выше среднего, то в 30 градусную жару при 4х дневной нагрузке 24/7 на все 4 диска (ребилд на скорости в 250 мегабайт на каждый диск). NAS выдувает воздух с задней стенки, и засасывает его через корзины, т.е. входной поток проходит сквозь все диски и при такой плотной компановке охлаждение в норме, не превышает 43-45 градусом, но если мои диски просто положить на стол и подключить, то они быстро нагреются до 55 градусов, это очень горячие диски на 18 террабайт с 3 раздельными блоками головок и кучей блинов.
Поэтом, у вот такой накопитель создает идеальные условия для охлада моих дисков.

Да и так, я разглядывал кучу системников, сейчас сложно найти системник на 4 диска 3.5, а системники с хорошей продувкой корзины обычно как целая тумбочка.

Конфигурация

  • В качестве системного SSD поставил Samsung 980 (просто 980, без PRO и EVO), в отличие от всяких прошек тут не 9 ватт, а только 4 потребление, т.е. будет не таким горячим и лучше будет себя чувствовать в тесной коробке.
  • Стоит две планки памяти по 8 гигабайт, одна шла в комплекте, вторую докупил подобрав по таймингам Patriot Viper
  • Установлено 4 диска WD DC HC550 18tb, не знаю почему так много, когда покупал то это было самое выгодное решение рублей на гигабайт, условно там WD Red Plus на 8Tb стоил почти как этот на 18, но диски очень компромисные в плане шума

Система

Установил Debian 12, минималку netinstall

Первым делом добавил все ветки репозитория в /etc/apt/sources.list

  1. deb http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
  2. deb-src http://deb.debian.org/debian/ bookworm main contrib non-free non-free-firmware
  3.  
  4.  
  5. deb http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
  6. deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
  7.  
  8. deb http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware
  9. deb-src http://deb.debian.org/debian/ bookworm-updates main contrib non-free-firmware

Далее стандарно обновил систему

apt update && apt upgrade

Далее накатил минимальный набор софта

  1. apt install wget curl iotop blktrace git hdparm

Работа с дисками

Массив

  1. mdadm --create --verbose /dev/md0 -l 10 -n 4 /dev/sda /dev/sdb /dev/sdc /dev/sdd

Контроль шума HDD

Указать уровень шума

  1. hdparm -B 128 /dev/sd[a,b,c,d]

Указать время засыпания при неактивности

  1. hdparm -S 20 /dev/sd[a,b,c,d]

Принудительно приглушить диски

  1. DRIVE_TO_SET=/dev/sd[a,b,c,d] && hdparm -Y $DRIVE_TO_SET

Поддержка датчиков и управление вентиляторами/температурой

Для полноценной работы нужно чтобы все датчики нормально мониторились - температуры дисков, процессора и обороты вентилятора

Подгрузка модулей

  1. apt install lm-sensors

Для обычных ситуаций достаточно запустить команду sensors-detect и нажимать везде y, но у меня особый случай, точнее, устройство специфичное,
чтобы получить результат прямо сейчас, вводим:

  1. modprobe coretemp
  2. modprobe drivetemp
  3. modprobe it87 force_id=0x8620

А чтобы это работало после перезагрузки
в /etc/modules

  1. coretemp
  2. drivetemp
  3. it87

Но it87 просто так не заведется, нужно еще опцию прописать в файле
/etc/modprobe.d/it87.conf

  1. options it87 force_id=0x8620

lm-sensors

После данных манипуляций команда sensors будет иметь такой вывод, т.е. видно

  • Датчик температуры жесткого диска
  • Датчик температуры nvme
  • Датчик температуры процессора и чипсета
  • Обороты вентиляторов
  1. drivetemp-scsi-3-0
  2. Adapter: SCSI adapter
  3. temp1: +33.0°C (low = +0.0°C, high = +60.0°C)
  4. (crit low = -40.0°C, crit = +70.0°C)
  5. (lowest = +32.0°C, highest = +46.0°C)
  6.  
  7. drivetemp-scsi-1-0
  8. Adapter: SCSI adapter
  9. temp1: +34.0°C (low = +0.0°C, high = +60.0°C)
  10. (crit low = -40.0°C, crit = +70.0°C)
  11. (lowest = +32.0°C, highest = +49.0°C)
  12.  
  13. coretemp-isa-0000
  14. Adapter: ISA adapter
  15. Package id 0: +51.0°C (high = +105.0°C, crit = +105.0°C)
  16. Core 0: +44.0°C (high = +105.0°C, crit = +105.0°C)
  17. Core 1: +44.0°C (high = +105.0°C, crit = +105.0°C)
  18. Core 2: +44.0°C (high = +105.0°C, crit = +105.0°C)
  19. Core 3: +44.0°C (high = +105.0°C, crit = +105.0°C)
  20.  
  21. acpitz-acpi-0
  22. Adapter: ACPI interface
  23. temp1: +27.8°C
  24.  
  25. it8620-isa-0a30
  26. Adapter: ISA adapter
  27. in0: 1.88 V (min = +0.00 V, max = +3.06 V)
  28. in1: 1.37 V (min = +0.00 V, max = +3.06 V)
  29. in2: 2.26 V (min = +0.00 V, max = +3.06 V)
  30. +5V: 5.59 V (min = +0.00 V, max = +6.12 V)
  31. in4: 2.27 V (min = +0.00 V, max = +3.06 V)
  32. in5: 2.22 V (min = +0.00 V, max = +3.06 V)
  33. in6: 1.34 V (min = +0.00 V, max = +3.06 V)
  34. 3VSB: 1.61 V (min = +0.00 V, max = +6.12 V)
  35. Vbat: 3.36 V
  36. fan2: 0 RPM (min = 0 RPM)
  37. fan3: 1290 RPM (min = 0 RPM)
  38. fan4: 0 RPM (min = 0 RPM)
  39. fan5: 0 RPM (min = 0 RPM)
  40. temp1: +41.0°C (low = -128.0°C, high = +127.0°C) sensor = thermal diode
  41. temp2: +37.0°C (low = -128.0°C, high = +127.0°C) sensor = thermal diode
  42. temp3: +47.0°C (low = -128.0°C, high = +127.0°C)
  43. temp4: +47.0°C
  44. temp5: +47.0°C
  45. temp6: +47.0°C
  46. intrusion0: ALARM
  47.  
  48. drivetemp-scsi-2-0
  49. Adapter: SCSI adapter
  50. temp1: +34.0°C (low = +0.0°C, high = +60.0°C)
  51. (crit low = -40.0°C, crit = +70.0°C)
  52. (lowest = +32.0°C, highest = +50.0°C)
  53.  
  54. drivetemp-scsi-0-0
  55. Adapter: SCSI adapter
  56. temp1: +34.0°C (low = +0.0°C, high = +60.0°C)
  57. (crit low = -40.0°C, crit = +70.0°C)
  58. (lowest = +32.0°C, highest = +46.0°C)
  59.  
  60. nvme-pci-0300
  61. Adapter: PCI adapter
  62. Composite: +41.9°C (low = -273.1°C, high = +81.8°C)
  63. (crit = +84.8°C)
  64. Sensor 1: +41.9°C (low = -273.1°C, high = +65261.8°C)
  65. Sensor 2: +38.9°C (low = -273.1°C, high = +65261.8°C)

Работа без lm-sensors

Узнать где какой датчик в /sys/class/hwmon/… можно такой командой

  1. for f in $(ls -1 /sys/class/hwmon/); do echo $f" - "$(cat /sys/class/hwmon/${f}/name); done

Выведет например такое

  1. hwmon0 - acpitz
  2. hwmon1 - nvme
  3. hwmon2 - coretemp
  4. hwmon3 - drivetemp
  5. hwmon4 - drivetemp
  6. hwmon5 - drivetemp
  7. hwmon6 - drivetemp
  8. hwmon7 - it8620
  • acpitz - это вроде как чипсет
  • nvme - ну это мой m2 накопитель
  • derivetemp - это температура 4х дисков
  • it8620 - это системный мониторинг, включающий в себя и напряжения и обороты вентиляторов и даже какие-то температуры

Управление вентиляторами

Как мы поняли из прошлого листинга, вентиляторы у нас это hwmon7, а вот понять какой наш, можно последовательно выполнив на все вентиляторы подобные команды (я уже знаю что у меня hwmon7/pwm3 это оба вентилятора)

Сперва включаем ручное управление

  1. echo 1 > /sys/class/hwmon/hwmon7/pwm3_enable


Потом останавливаем

  1. echo 0 > /sys/class/hwmon/hwmon7/pwm3


А потом запускаем на полную скорость

  1. echo 255 > /sys/class/hwmon/hwmon7/pwm3




Мой первый вариант получения скоростей был таким, через lm-sensors

  1. # получение температуры датчиков: id_датчика, строчка с темпепературой
  2. function getSensTemp {
  3. echo $(sensors $1 | grep $2 |tr -s ' '|cut -d '+' -f 2| cut -d '.' -f1);
  4. }
  5.  
  6.  
  7. #получение оборотов вентилятора
  8. function getFanSpeedRPM {
  9. echo $(sensors it8620-isa-0a30 |grep fan$1|tr -s ' '|cut -d ' ' -f 2);
  10. }
  11.  
  12.  
  13. # задает все переменные
  14. function setTemp {
  15. tempHdd1=$(getSensTemp "drivetemp-scsi-0-0" "temp1");
  16. tempHdd2=$(getSensTemp "drivetemp-scsi-1-0" "temp1");
  17. tempHdd3=$(getSensTemp "drivetemp-scsi-2-0" "temp1");
  18. tempHdd4=$(getSensTemp "drivetemp-scsi-3-0" "temp1");
  19. hddMax=$(echo $tempHdd1"!"$tempHdd2"!"$tempHdd3"!"$tempHdd4|sed 's/!/\n/g'|sort -n|tail -1)
  20. tempSSD=$(getSensTemp "nvme-pci-0300" "Composite");
  21. tempCpu=$(getSensTemp "coretemp-isa-000" "Package");
  22. fanRPM=$(getFanSpeedRPM 3);
  23. }

в итоге стало более проще

  1. function getMaxHddTemp {
  2. echo $(($(cat /sys/class/hwmon/hwmon[3,4,5,6]/temp1_input|sort -n|tail -1)/1000));
  3. }
  4.  
  5. function getCpuTemp {
  6. $(($(cat /sys/class/hwmon/hwmon2/temp1_input)/1000))
  7. }

TODO

  • Описать процесс создания рейд
  • Описать опции форматирования и монтирования рейда
  • Описать настройку управления вентиляторами
docs/terramaster_homeserver.txt · Последнее изменение: 2024/06/18 19:10 — PavelB

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki