Достаточно много читаю статей на Хабре, но сам никогда не писал... Буду стараться заполнить этот пробел и сегодня хочу представить статью на тему "Домашний NAS сервер"
Немного о себе...
Должность занимаю Инженер-программист ПЛИС, основные мои задачи:
Ускорение обработки сетевого трафика за счет аппаратной реализации на ПЛИС
Сборка Linux системы на SOC системах
Написание драйверов, для увязки программной и аппаратной частей
Разработка ПП и схем
Долгое время в качестве домашнего сервера у меня служил ПК на базе MiniITX материнки со встроенным процессором. На нем был поднят Linux (Debian), где было установлено Apache, Ftp, PHP, Ngnix, Git, Wiki, Samba, ...
Давно посещали мысли собрать домашний сервер на базе мобильных процессоров и жёстких дисков. Собирать сразу все с нуля не было желания, т.к. достаточно много на это нужно потратить времени, которого без того мало! Поэтом было принято решение делать сервер постепенно, усложняя проект.
Цели, на первый этап
Использовать одноплаточный готовый компьютер, чтобы на первых этапах минимизировать временные затраты
Использовать жёсткие диски 2.5", так как они с точки зрения энергопотребления эффективнее и для их питания нужно только 5в, малый габарит, меньше греются и тише в работе
Возможность управлять и мониторить за питанием дисков и одноплаточника
Бесперебойное питание с контроллером заряда
Возможность подключения до 10 дисков
Возможность охлаждения с регулировкой оборотов для кулеров
Одноплаточник
Для данного домашнего сервачка был выбран одноплаточник Orange Pi4. В то время когда начинал разработку, цена и возможности были оптимальными. Критериями выбора в пользу Orange Pi4 послужили следующие:
производительность
наличие PCIe шины
порты USB3.0
Gigabit Ethernet
Тесты показали, что данный одноплаточник имеет немного выше производительность моего сервачка на базе материнки Gigabyte GA-N3150N-D3V со встроенным процессором Intel® Celeron™ N3150 Quad-Core (1.6 GHz) , которого в принципе мне было достаточно для домашних целей. Так же по электропотреблению одноплаточник на базе RockChip 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 контроллера, вывести на разъем, чтобы можно было еще увеличить количество портов в два раза..
Питание
Сам сервер питается от стандартного блока питания 19 в, которые идут для ноутбуков. Контроллер заряда он же менеджер питания, отвечает за переключение между питанием от внешнего блока питания и внутренней Li-ion 3-Cell батарее. А так же, если входное питание выходит за рамки допустимого, то система переходит на внутренний аккумулятор.
Для аккумуляторов собран активный балансир, с возможностью включения/отключения программно балансировки напряжения между банками аккумулятора. Это дает возможность компенсировать перекос при заряде или разряде аккумуляторов с незначительно разной ёмкостью.
Питание для одноплаточника 5 В/5 А, чего вполне достаточно чтобы можно было подключать внешние карманы, флешки и пр. по USB.
Имеется возможность мониторить входное напряжение блока питания, токи потребления одноплаточника и жестких дисков по отдельности. Также можно мониторить напряжение аккумуляторов и ток заряда/разряда, что дает возможность отслеживать потребляемую мощность сервачком.
Управление жесткими дисками
Для каждого HDD можно индивидуально включить/выключить питание. Около каждого диска можно включить индивидуально светодиод, для индикации программного события. Также для каждого диска есть светодиоды, статуса питания и активности диска.
Есть возможность узнать наличие дисков вставленных в слоты, независимо от того включено ли питание для жесткого диска.
Для охлаждения дисков есть два выхода на кулеры, с возможностью регулировать скорость.
Сборка
Запуск и отладка
В процессе запуска и отладки, как всегда было не без мелких грехов... Видимо сказалось то, что данный проект делался по вечерам после работы иногда по выходным и его разработка заняла продолжительное время.
PCIe у меня не сразу запустилась, так как в разводке платы допустил машинальную ошибку, в результате чего пришлось спаять переходник, с которым все хорошо запустилось. И Linux увидел контроллер на шине у себя:
Также без проблем запустились JMB575 мультиплексоры на 6 GT/s, что видно из вывода команды dmesg:
На данном скрине видно, что система подхватила хост контроллер, который нормально запустился, и мог даже лучше...
Тесты 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
Тест утилитой hdparm -tT /dev/sda:
Копирование с обычного винта на SSD
С SSD на обычный
Копирование через протокол Samba
Тут нужно отметить, что чудес не бывает.. Samba под Linux работает на 50% от канала, как поднять выше скорость не знаю.
Тестирование утилитой fio:
Вывод df -h, с почти всеми включёнными и примонтированными дисками
Также вывод dmesg при включении питания диска и его определение в системе
Мониторинг питания и статуса
Пояснения:
Power -- статус менеджера питания и контроллера
HDD Led -- какие светодиоды возле дисков включены программно
HDD Power -- на каких дисках включено питание
HDD Detect -- статус дисков
Vsys0, Isys0 -- напряжение и ток одноплаточника
Vsys1, Isys1 -- напряжение и ток жестких дисков
Vbat, Ibat -- напряжение и ток аккумулятора
Эти данные разбирает скрипт...
На плате стоит контроллер STM32 для управления вентиляторами, мониторинга питания, по последовательному порту соединен с одноплаточником. Также вывел на нем про запас CAN шину, но ее еще не реализовал.
И немного доработал менеджер питания, так чтобы было как у обычного компьютера, если его включаешь в сеть, он не включится сам, пока не нажмешь на кнопку питания. Когда одноплаточник работает, при нажатии на кнопку питания система завершает работу и отключает питание полностью. Если по каким-то причинам завис одноплаточник, то при удержании кнопки питания система полностью выключается.
Электропортебление
Если система простаивает и включен только один SSD диск, вентиляторы выключены, то:
Суммарное потребление дисков + контролер SATA с мультиплексорами
Vsys1*Isys1 = 19.26в * 0.28а = 5.4 Вт
Потребление одноплаточника в простое, к USB ничего не подключено
Vsys0*Isys0 = 19.26в * 0.43а = 8.3 Вт
Суммарно: 13.7 Вт
Если все процессоры одноплаточника нагрузить на 100 % и включены все диски и вентиляторы, то:
Суммарное потребление дисков + контролер SATA с мультиплексорами
Vsys1*Isys1 = 18.97в * 1.13а = 21.4 Вт
Потребление одноплаточника в простое, к USB ничего не подключено
Vsys0*Isys0 = 18.97в * 0.79а = 15 Вт
Суммарно: 36.4 Вт
Если еще, запустить копирование с одного диска на другой, то Isys1 = 1.22а это уже 23Вт.
И когда все диски вентиляторы отключены и одноплаточник в простое, то:
Vsys1*Isys1 = 19.29в * .34а = 6.5 Вт
Потребление одноплаточника в простое, к USB ничего не подключено
Vsys0*Isys0 = 19.29в * 0.23а = 4.4 Вт
Суммарно: 10.9 Вт
Работа от аккумулятора:
Итоги, выводы
Так как есть много файлов которые редко используются, то при доступе к ним диск включается, а при простое отключается. Это в свою очередь экономит электроэнергию.
Как для меня данного сервачка достаточно для домашней файловой свалки, и нормально работает git который достаточно сильно грузит проц.. Так как сетевка Гигабитная, то текущих скоростей дисков достаточно.
В настоящее время в связи с загруженностью, нет возможности смоделировать корпус и собрать сервер, так чтобы он имел законченный вид, поэтому он пока что без корпуса, но это не мешает ему выполнять свои функции.
Так как данный проект показал достаточный результат, для использования в домашних условиях, где важными критериями являются низкое электропотребление, малые габариты, суммарный большой объем жестких дисков, минимальное тепловыделение и малый шум. В связи с вышесказанным в ближайших планах собираюсь увеличить в два раза емкость аккумуляторов, что позволит добавить время автономной работы в два раза и в тоже время уменьшить в два раза ток на аккумулятор, что в свою очередь увеличит ресурс аккумуляторов.
Планы на будущее
Начал прорисовывать следующую модификацию NAS сервера на большее количество дисков, о нем в следующий раз...
А этот сервер возможно выставлю на продажу...