Домашний NAS сервер

Собственно первый прототип моего домашнего сервачка..

Собственно первый прототип моего домашнего сервачка…

Достаточно много читаю статей на Хабре, но сам никогда не писал… Буду стараться заполнить этот пробел и сегодня хочу представить статью на тему «Домашний NAS сервер»

Немного о себе…

Должность занимаю Инженер-программист ПЛИС, основные мои задачи:

  • Ускорение обработки сетевого трафика за счет аппаратной реализации на ПЛИС

  • Сборка Linux системы на SOC системах

  • Написание драйверов, для увязки программной и аппаратной частей

  • Разработка ПП и схем

Долгое время в качестве домашнего сервера у меня служил ПК на базе MiniITX материнки со встроенным процессором. На не был поднят LInux (Debian), где было установлено Apache, Ftp, PHP, Ngnix, Git, Wiki, Samba, Torrent…

Давно посещали мысли собрать домашний сервер на базе мобильных процессоров и жёстких дисков. Собирать сразу все с нуля не было желания, т.к. достаточно много на это нужно потратить времени, которого без того мало! Поэтом было принято решение делать сервер постепенно, усложняя проект.

Цели, на первый этап

  • Использовать одноплаточный готовый компьютер, чтобы на первых этапах минимизировать временные затраты

  • Использовать жёсткие диски 2.5», так как они с точки зрения энерго потребления эффективнее и для их питания нужно только 5в, малый габарит, меньше греются и тише в работе

  • Возможность управлять и мониторить за питанием дисков и одноплаточника

  • Бесперебойное питание с контроллером заряда

  • Возможность подключения до 10 дисков

  • Возможность охлаждения с регулировкой оборотов для кулеров

Одноплаточник

Для данного домашнего сервачка был выбран одноплаточник Orange Pi4. В то время когда начинал разработку, цена и возможности были оптимальными. Критериями выбора в пользу Orange Pi4послужили следующие:

Тесты показали, что данный одноплаточник имеет немного выше производительность моего сервачка на базе материнки Gigabyte GA-N3150N-D3V со встроенным процессором Intel® Celeron™ N3150 Quad-Core (1.6 GHz) , которого в принципе мне было достаточно для домашних целей. Так же по электропотреблению одноплаточник на базе RochChip RK3399 процессора экономичнее.

Структура

RK3399 имеет одну шину PCIe 2.1×4, которая может работать в Root Complex (RC) и End Point (EP) и максимальная скорость 2.5 GT/s на канал. На одноплаточнике разведено лишь две линии из четырех, что конечно, немного огорчило на то время… На данную шину решил подключить SATA контроллер на чипе ASMedia ASM1064. Данный контроллер со стороны PCIe работает на x1 Gen3, со стороны SATA 4-е порта Gen3.

На два порта которых планировалось подключить мультиплексоры JMicron JMB575, которые поддерживают SATA3 Gen3, тем самым получить 10 SATA потов. Остальные два не задействованных порта SATA контроллера, вывести на разъем, чтобы можно было еще увеличить количество портов в два раза…

Структурная схема SATA шины

Структурная схема SATA шины

Питание

Сам сервер питается от стандартного блока питания 19 в, которые идут для ноутбуков. Контроллер заряда он же менеджер питания, отвечает за переключение между питанием от внешнего блока питания и внутренней Li-ion 3-Cell батарее. А так же, если входное питание выходит за рамки допустимого, то система переходит на внутренний аккумулятор.

Для аккумуляторов собран активный балансир, с возможностью включения/отключения программно балансировки напряжения между банками аккумулятора. Это дает возможность компенсировать перекос при зараде или разряде аккумуляторов с незначительно разной ёмкостью.

Питание для одноплаточника 5 В/5 А, чего вполне достаточно чтобы можно было подключать внешние карманы, флешки и пр. по USB.

Имеется возможность мониторить входное напряжение блока питания, токи потребления одноплаточника и жестких дисков по отдельности. Также можно мониторить напряжение аккумуляторов и ток заряда/разряда, что дает возможность отслеживать потребляемую мощность сервачком.

Управление жесткими дисками

Для каждого HDD можно индивидуально включить/выключить питание. Около каждого диска можно включить индивидуально светодиод, для индикации программного события. Также для каждого диска есть светодиоды, статуса питания и активности диска.

Есть возможность узнать наличие дисков вставленных в слоты, независимо от того включено ли питание для жесткого диска.

Для охлаждения дисков есть два выхода на кулеры, с возможностью регулировать скорость.

Сборка

Нижняя сторона

Нижняя сторона

Верхняя сторона

Верхняя сторона

В процессе сборки

В процессе сборки

Запуск и отладка

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

4a1c51d58655a44ab1b6cca624b1375b.jpg

PCIe у меня не сразу запустилась, так как в разводке платы допустил машинальную ошибку, в результате чего пришлось спаять переходник, с которым все хорошо запустилось. И Linux увидел контроллер на шине у себя:

0997fe0b38b7d15c96eae6b1b55a23a3.png

Также без проблем запустились JMB575 мультиплексоры на 6 GT/s, что видно из вывода команды dmesg:

3911920a68e28b5c5e49f460b1ec0e6f.png

На данном скрине видно, что система подхватила хост контроллер, который нормально запустился, и мог даже лучше…

c1397289421de033b83359f5c7bd4e0b.png

Тесты SATA портов

SSD диск подключен к одному из портов, в данном случае 9, вывод команд, с записью на него 256 Мб, 512 Мб, 1 Гб:

dd if=/dev/zero of=/home/SSD/tmp bs=1M count=256; rm /home/SSD/tmp
dd if=/dev/zero of=/home/SSD/tmp bs=1M count=512; rm /home/SSD/tmp
dd if=/dev/zero of=/home/SSD/tmp bs=1M count=1k; rm /home/SSD/tmp

e211047142ffd815e3b34efc40f45414.png

Тест утилитой hdparm -tT /dev/sda:

Копирование с обычного винта на SSD

b7492f40a4c7e844de5e7d88d1f622a6.png

С SSD на обычный

bb44546bdc73614d7df41516047c6c58.png

Вывод df -h, с почти всеми включёнными и примонтированными дисками

ddb2a16b44397a5ee91a5eab9d147fd5.png

Также вывод dmesg при включении питания диска и его определение в системе

6615d679d0e06b02c8429aa3e4891bca.png

Мониторинг питания и статуса

2cfe8eb83bdaf716e0b81a721ba44256.png

Пояснения:

  • Power — статус менеджера питания и контроллера

  • HDD Led — какие светодиоды возле дисков включены программно

  • HDD Power — на каких дисках включено питание

  • HDD Detect — статус дисков

  • Vsys0, Isys0 — напряжение и ток одноплаточника

  • Vsys0, Isys0 — напряжение и ток жестких дисков

  • Vbat, Ibat — напряжение и ток аккумулятора

Эти данные разбирает скрипт…

На плате стоит контроллер STM32 для управления вентиляторами, мониторинга питания, по последовательному порту соединен с одноплаточником. Также вывел на нем про запас CAN шину, но ее еще не реализовал.

И немного доработал менеджер питания, так чтобы было как у обычного компьютера, если его включаешь в сеть, он не включится сам, пока не нажмешь на кнопку питания. Когда одноплаточник работает, при нажатии на кнопку питания система завершает работу и отключает питание полностью. Если по каким-то причинам завис одноплаточник, то при удержании кнопки питания система полностью выключается.

Электропортебление

Если система простаивает и включен только один SSD диск, вентиляторы выключены, то:

f501d425d0d24680195ba141228ae67f.png

Суммарное потребление дисков + контролер SATA с мультиплексорами

Vsys1*Isys1 = 19.26в * 0.28а = 5.4 Вт

Потребление одноплаточника в простои, к USB ничего не подключено

Vsys0*Isys0 = 19.26в * 0.43а = 8.3 Вт

Суммарно: 13.7 Вт

Если все процессоры одноплаточника нагрузить на 100% и включены все диски и вентиляторы, то:

0965305140f9226c56e85a7dc2579da2.png

Суммарное потребление дисков + контролер SATA с мультиплексорами

Vsys1*Isys1 = 18.97в * 1.13а = 21.4 Вт

Потребление одноплаточника в простои, к USB ничего не подключено

Vsys0*Isys0 = 18.97в * 0.79а = 15 Вт

Суммарно: 36.4 Вт

Если еще, запустить копирование с одного диска на другой, то Isys1 = 1.22а это уже 23Вт.

И когда все диски вентиляторы отключены и одноплаточник в простое, то:

173087c93013676b21066a234af20e0a.png

Vsys1*Isys1 = 19.29в * .34а = 6.5 Вт

Потребление одноплаточника в простои, к USB ничего не подключено

Vsys0*Isys0 = 19.29в * 0.23а = 4.4 Вт

Суммарно: 10.9 Вт

Работа от аккумулятора:

Одноплаточник в простое, включен один диск

Одноплаточник в простое, включен один диск

Одноплаточник, процессоры на 100%, включен один диск

Одноплаточник, процессоры на 100%, включен один диск

Снова от блока питания, идет заряд

Снова от блока питания, идет заряд

Итоги, выводы

Так как есть много файлов которые редко используются, то при доступе к ним диск включается, а при простое отключается. Это в свою очередь экономит электроэнергию.

Как для меня данного сервачка достаточно для домашней файловой свалки, и нормально работает git который достаточно сильно грузит проц. Так как сетевка Гигабитная, то текущих скоростей дисков достаточно.

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

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

Планы на будущее

Начал прорисовывать следующую модификацию NAS сервера на большее количество дисков, о нем в следующий раз…

А этот сервер возможно выставлю на продажу…

© Habrahabr.ru