Предыстория
В последнее время интернет "пестрит" разного рода проектами, для управления которыми используются одноплатные ПК и в частности малина (как самый яркий представитель данного класса компьютеров). Для меня использование "одноплатников" началось в далеком 2015 году, но не задалось ввиду низкой стабильности работы, периодически я натыкался на аппаратные и программные проблемы при использовании данного класса компьютеров, которые я никак не мог решить, однако, я решил вернуться к этой теме в 2022 году для автоматизации задач научной ядерно-физической лаборатории и нам это удалось. В этой статье я бы хотел поделиться информацией и рассказать о проблемах и способах их решения и о результатах, которых удалось достичь.
1. В чем заключается нестабильная работа одноплатных компьютеров и ее причины
Основные причины проблем:
- Нестабильное напряжение питание;
- Плохое качество uSD-карт;
Остальные проблемы являются производными от этих двух основных проблем. Для работы я брал официальный образ, однако, для того, чтобы добиться стабильной работы его одного недостаточно.
Как влияет нестабильность питания? Потребление тока "малиной" зависит от нагрузки на нее, при увеличении загрузки CPU и GPU потребление тока возрастает, что может привести к просадке напряжения блока питания. Как оказалось Raspberry чувствителен именно к величине питающего напряжения, опробовав порядка 10-15 различных адаптеров и даже попробовав UPS HAT типа EP-0118, я каждый раз обнаруживал один и тот же результат, после 1-3 дней работы счетчик uptime сбрасывался, что говорило о постоянных перезагрузках, как итог после нескольких серий таких перезагрузок (5-10) я получал поврежденный образ ОС, который не загружался. Примеры ошибок при загрузке (на самом деле я получал около 4-5 уникальных ошибок), вот например, следующие ошибки
- Buffer I/O error on device sda1, logical block 243993666
- failed to stop secondary CPUs
Наконец, я решил попробовать официальный адаптер для Raspberry Pi, он выдает напряжение 5,1 В, а это то, что нужно для нормальной работы малины, следовательно, я поставил его и не прогадал, на 1 марта 2023 uptime составляет 36 дней:
Второй момент, который может доставить проблемы - дефекты самой uSD карты, при проблемах с записью, малина может уйти в ребут из которого она может и не подняться. Из этого можно сделать еще 1 главный вывод: НЕ СТОИТ ПОКУПАТЬ КАРТЫ ПАМЯТИ НА Aliexpress, ОНИ ТАМ ПАЛЕНЫЕ (поддельные, часто возникают ошибки записи и т.п.). Для себя я купил карту Kingstone на 16 Гб в обычном магазине.
Так или иначе хороший адаптер питания не может спасти от всех проблем, поэтому дополнительно нужна дальнейшая настройка ОС (описание будет в разделе 3 после того, как я расскажу какие задачи должен решать Raspberry Pi).
2. Задачи лаборатории
Основная задача лаборатории обеспечить максимально непрерывные измерения объектов исследования, в средней на 1 объект может уходить от нескольких дней до месяца измерений. Терять время нельзя, т.к. время = распад источника излучения, уменьшение его активности и, как следствие, увеличение времени измерения. На текущий момент основной парк спектрометров это старые CAMAC-машины, управляемые из DOS-программы, запускаемой из Windows98 в MS-DOS режиме. До относительно недавнего времени весь процесс контроля работы спектрометров заключался в том, что нужно приехать в лабораторию, убедиться, что измерения выполняются нормально, если все ОК, то перебросить спектры по эл. почте руководителю группы, если нет, то заниматься восстановлением измерений. В случае если проблем не было но на все это с дорогой уходило ~2 часа времени, а если возникали проблемы то перезапуск требовал ~3 часов времени.
Для того, чтобы решить проблему было сделано следующее:
- Была написана наша софтина, которая через наш (Висанс/Wissance) драйвер управляла MS-DOS приложением (см. наш проект), благодаря этому мы получили версированные временем периодически сохраняемые спектры; Процесс автосохранения показан в видео на нашем канале.
- Далее была написана другая программа, которая брала бы эти файлы из шаредной папке по сети и записывала в базу данных (SQLite) информацию по ним, а наиболее свежие/актуальные отправляла через эл. почту и кидала бы уведомления в Telegram.
Как маленький итог мы успешно запустили полный контроль и получение актуальных данных, а также возможность понимать происходили ли сбои в накоплении спектров или нет. Это избавило нас от поездок каждый день. Несмотря на то, что задача кажется тривиальной, но в виду ряда технических особенностей реализация ее оказалось весьма сложной (см. объем кода и количество коммитов в ссылках на проектах на github). Завершающей задачей (на самом деле там еще масса задач) оставалось решение вопроса стабильной работы Raspberry Pi.
3. Как мы решили все проблемы
Для того, чтобы сделать стабильной работу Raspberry Pi необходимо:
1. монтировать разделы без записи времени доступа к файлу noatime (для этого нужно отредактировать /etc/fstab:
/dev/mmcblk0p1 /boot vfat ro,noatime 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
2. отключить swap на sd-карту, однако, если свободное ОЗУ (1 Гб для Rpi2 закончится, то система упадет, вероятно, пойдет в перезагрузку). Также я для того чтобы минимизировать проблемы из графического конфигуратора оставил 10% ОЗУ для GPU (у меня в этом режиме не грузится графическая оболочка, но и хер бы с ней):
sudo dphys-swapfile swapoff
sudo dphys-swapfile uninstall
sudo update-rc.d dphys-swapfile remove
3. Сделать монтирование разделов /dev/mmcblk ro (read-only), однако, возникает вопрос, а как тогда ставить собственный софт? Это можно сделать изменив размер раздела, смонтированного как / и выделив из него новый, который можно подмонтировать также через fstab но как rw. Для 16 Гб карты памяти, мне удалось выделить 1Гб, сделать это в самом Raspberry Pi нельзя, для этого нужно использовать другую Linux-систему и консольную утилиту fdisk или графическую gparted или что-то другое. Также для запуска собственных приложений понадобится сделать запускающего демона в /etc/systemd/system. После монтируем раздел / как ro и наслаждаемся стабильностью.
4. Заключение
Что в итоге: полет стабильный на протяжении времени > 1 месяца, Каждую неделю мы экономим ~ 8-10 часов своего времени. Перестанет ли система быть актуальной если будет решена проблема стабильного электропитания установок? Нет, т.к. могут происходить сбои в оборудовании не связанные с питанием, которые могут быть проанализированы по спектрам, и мы это тоже автоматизируем в будущем, также кроме контроля мы предоставляем возможность получать актуальные спектры по расписанию 3 раза в сутки, а в будущем будет добавлена возможность запросить любой спектр в том числе и накапливаемый в данный момент времени. Если данная статья соберет 50 лайков, то я выпущу полный видео гайд о подготовке такой малины с нуля.
И как говорил и говорит Доктор Дью: "Лойс, пиписька, досвидонья".