Настройка Raspberry в качестве регистратора данных

13

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

Сейчас я нахожусь на этапе регистрации, кажется, работает, и я пытаюсь настроить систему, и у меня есть пара вопросов.

  1. Система предназначена для записи данных на USB-накопитель FAT32, который может быть отключен, подключен или заменен в любое время. Каков предпочтительный метод автоматической установки любого вставленного запоминающего устройства USB в фиксированный каталог? Пакет usbmount, кажется, почти делает это, но отсутствие обслуживания делает его немного осторожным.

  2. Я не могу гарантировать электропитание и выполнять чистые отключения. К счастью, единственными файлами, которые должны быть записаны, кроме внутренней информации об ОС, должны быть журналы. Спасет ли меня журнальная файловая система для ОС от меня, или я должен монтировать систему только для чтения или работать с RAM-дисками?

  3. Будет ли файловая система FAT на USB-накопителе выживать и восстанавливаться после перебоев с питанием и внезапных выбросов? Должен ли я создавать новый файл журнала каждый раз, когда он монтируется?

  4. Я настроил автоматический запуск X-сервера и поиграл со сценариями автозапуска LXDE, чтобы запустить отображение состояния и отключить диспетчер окон / заставку. Есть ли какие-то другие ошибки для поддержания непрерывного отображения?

  5. Регистратор не будет иметь доступа к Ethernet и скорее нуждается в точных часах. Подходит ли модуль RasClock?

Извините за длинный пост и несколько полу-связанных вопросов.

Я привык иметь дело с простыми встроенными устройствами, для которых у меня есть полный контроль над программным обеспечением, и задача правильной настройки реальной операционной системы заставляет меня немного беспокоиться. С другой стороны, я скорее подозреваю, что я не единственный (ab-), использующий Pi для этого типа приложений, так что, надеюсь, вопросы не слишком специфичны для моей конкретной ситуации.

doynax
источник
Вы где-нибудь описываете свое работающее USB-> последовательное решение, чтобы другие потенциальные регистраторы данных могли его попробовать? Я хочу получить дополнительную выгоду от моего скребка / регистратора / веб-камеры Pi. Благодарность!
Тай Вииникка,

Ответы:

7

Система предназначена для записи данных на USB-накопитель FAT32, который может быть отключен, подключен или заменен в любое время.

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

Я не могу гарантировать электропитание и выполнять чистые отключения.

Опять же, внезапное отключение питания (практически) любой компьютерной системы рискованно. Это обычно заканчивается хорошо (кто не сделал этого кучу раз, случайно, из - за сбоя питания, и т.д.?), Но там , кажется, необычное количество людей , сообщающих о коррупции SD карты с пи. Поэтому, если вы имеете в виду: «В основном система не будет закрыта без ошибок», вам нужно переосмыслить, потому что это будет тупиковая стратегия. Обратите внимание, что отключение возможно без клавиатуры или сетевого подключения. Вы также можете использовать похожий метод, чтобы запустить чистое размонтирование флешки.

Вы можете добавить syncопцию в, /etc/fstabчтобы ограничить кэширование, но man mountзаметки:

В случае носителей с ограниченным числом циклов записи (например, некоторые флэш-накопители) «синхронизация» может привести к сокращению жизненного цикла.

Это относится и к SD-картам, хотя, если вы не забываете периодически проверять (и при необходимости заменять) носитель, это может стоить того. Это немного повлияет на общую производительность.

Поэтому старайтесь не дергать за штекер или USB-флешку как можно быстрее, и, конечно, не создавайте настройки, которые зависят от этого. Например, не говорите себе или другим пользователям: «Можно отключить USB-накопитель в любое время», потому что это не так, и вы не можете сделать это так.

Выполнение соответствующих syncвызовов в приложении (например, в режиме ожидания или после значительной записи) - это хорошая идея.

Если у вас есть все , что вы хотите установлен и настроен , вы потенциально можете смонтировать корневую файловую систему только для чтения, если вы создаете отдельные разделы для /var, /runи /tmpи смонтировать эти RW; Вы также можете создать один такой смонтированный раздел и вставить в него каталоги rw.

На распбианском пи вам не о чем беспокоиться /run, так как это уже tmpfs (RAM); /sysи /procтакже находятся в оперативной памяти (но не используйте их ни для чего, кроме того, для чего они предназначены). Если система предназначена для одной цели, и все ваши данные поступают на USB-накопитель, /varэто единственный проблемный вопрос, но я думаю, что это не так критично.

Златовласка
источник
Наша основная проблема заключается в том, что во время аварийной остановки может произойти отключение питания, что, как я подозреваю, будет частым явлением во время тестирования (отсюда и необходимость в регистраторе для начала). Я проверю, что мы можем подключить резервную батарею для Pi и, возможно, подключить какой-нибудь датчик для обнаружения потери питания. Однако моя жизнь была бы намного проще, если бы корневая файловая система могла быть смонтирована в режиме только для чтения, а память USB защищалась от периодических сбросов и тому подобного.
Doynax
@doynax: можно запустить с корневой файловой системой RO. У меня нет никакого опыта с этим, но я добавил пару абзацев в конце о том, что я считаю основными проблемами.
Златовласка
2

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

По сути, вам нужно убедиться, что если вы обрезаете середину записи блока данных (или контакты коротки), вы можете распознать этот факт. в основном предварительно добавьте данные с номером блока (и длиной, если не фиксированный размер), и добавьте CRC и (тот же) номер блока в конце.

Первая запись, которую вы делаете, находится в конце со значением, которое НЕ является номером следующего блока. Таким образом, если ваша запись не будет завершена, произойдет несоответствие номера блока, и этот блок данных станет мусором. Затем запишите свой блок данных с реальным номером блока, после которого следует длина, затем ваш CRC, сгенерированный вашим любимым алгоритмом, и снова реальный номер блока. (CRC защищает от коротких контактов, которые повреждают ваши данные).

Когда питание восстанавливается или карта памяти вставляется заново, принимайте последовательные блоки только до точки, где начальные и конечные порядковые номера не совпадают или CRC неверен. Удалите этот блок и возобновите регистрацию.

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

Что вам действительно нужно, так это избыточные копии вашей FAT и выполните аналогичные действия с таблицей FAT. Последовательный номер скажет вам, что является самым последним, а совпадение спереди / сзади и CRC обеспечат целостность.

Уже прошло время сна, поэтому я надеюсь, что это достаточно ясно.

Руфус В. Смит
источник
1

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

Matt
источник
Это отличное предложение. Избавьте нас от необходимости устанавливать часы и работать с аккумулятором. Нам просто нужно отследить часовой пояс (и правила DST, я полагаю), и для чистого регистратора данных универсальное время должно подойти.
doynax
Работает ли модуль GPS в помещении, когда ни одна часть неба не видна и все же обеспечивает преимущество по сравнению с простым RTC?
Стефан Гурихон