Стратегии борьбы с непредсказуемым источником питания

15

Я хочу установить Pi в моей машине и использовать его для записи данных GPS. Каким стратегиям (в моей программе) я могу следовать, чтобы минимизировать проблемы из-за прерывания питания при записи на SD-карту?

Пока я могу думать о:

  • Хранение данных и только запись с перерывами
  • Запись только в том случае, если скорость автомобиля не близка к нулю (т.е. при выключении зажигания)
  • Запишите временный файл, который я могу себе позволить испортить, а затем сохраняйте это время от времени

Мне интересно, есть ли

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

Очевидно (я думаю) некоторая потеря данных неизбежна, но как я могу минимизировать ее?

рыба фугу
источник

Ответы:

3

Есть два варианта (по крайней мере) на стороне предложения:

  • У многих автомобилей теперь есть гнездо для аксессуаров, которое не включается зажиганием ... если оно есть в вашем автомобиле, используйте его (но будьте осторожны, чтобы отключить его, когда оно не используется!), Которое должно обеспечить вам надежное питание (хотя это может упасть во время работы двигателя сгибать)
  • Если вы разрабатываете свой собственный преобразователь питания, добавьте достаточно большой резервуарный конденсатор, чтобы гарантировать, что питание остается достаточно продолжительным после выключения транспортного средства ... вы также можете обнаружить отключение транспортного средства (подача транспортного средства ниже порогового значения) в GPIO, чтобы убедитесь, что вы не начинаете писать после отключения питания
Андрей
источник
2

В Windows Embedded существует концепция, называемая расширенными фильтрами записи. Они используют его, чтобы избежать повреждения данных из-за потери питания и т. Д. Операционная система записывает их в оверлей ОЗУ. Файловая система не повреждена при потере мощности, и вы можете «зафиксировать» данные в памяти, только если захотите.

Аналогично, в операционных системах Linux есть метод, позволяющий сохранить файловую систему нетронутой, и вы можете записывать на SD-карту только при желании. Этот вопрос объясняет, как создать файловую систему только для чтения, и вы можете сохранить изменения только при желании. Это означает, что вы должны использовать свой вариант 3: «Записать во временный файл и сохранить при необходимости». Вопрос также указывает на статью «Как создать файловую систему только для чтения». Возможно, это может быть первое место, чтобы начать!

Sai
источник
Кто-нибудь пытался перейти с этой статьей на PI? Похоже, что потребуется много адаптации
GuySoft
2

Все зависит от количества данных, которые вы готовы потерять. Если вы не можете позволить себе потерять что-либо, потребуется найти способ подключить PI непосредственно к аккумулятору (с предохранителем, конечно), чтобы он не выключался при выключении зажигания.

Опять же, типичный автомобильный аккумулятор будет иметь около 80 А-ч, а ПИ будет потреблять от 500 до 1200 мА (в зависимости от того, является ли это модель А или В), так что, вероятно, он разряжает автомобильный аккумулятор в течение 2-6 дней, так что я не думаю, что вы найдете это приемлемым.

Если вы по-прежнему не можете позволить себе потерять данные, вы можете разработать какое-то нестандартное оборудование, в котором вы можете управлять источником питания от PI, а также отслеживать состояние зажигания. Если зажигание выключено, вы сбрасываете свои данные на SD-карту, выключаете ОС и затем, как последний шаг, выключаете источник питания. При включении зажигания также необходимо включить источник питания, чтобы возобновить работу ПИ. Это все выполнимо, но довольно большой проект.

Однако, если вы сочтете приемлемым потерять некоторые данные при завершении работы, я бы разработал демон, который периодически сохраняет данные GPS в файл таким образом, чтобы он выполнял вызов fsync после каждой записи (чтобы сбросить данные на SD-карту). открытка). Если вы делаете это каждые несколько секунд (а также используете журналируемую файловую систему ext4 по умолчанию), это, вероятно, будет означать, что вы будете терять только последние несколько секунд при каждой потере питания.

Пожалуйста, имейте в виду, что Raspbian (по крайней мере, моя установка) не поставляется с fsck корневой файловой системы во время загрузки. Вы должны сделать следующее, чтобы включить его при каждом монтировании:

tune2fs -c 1 /dev/mmcblk0p2

Вы также должны изменить последнюю строку для корневой файловой системы в / etc / fstab, чтобы она содержала 1, например так:

/dev/mmcblk0p2  /               ext4    defaults,noatime,commit=120  0       1
                                                               Change this ^^^^^

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

Joppe
источник
1

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

К сожалению, на данный момент нет в наличии, но вы можете сделать предварительный заказ.

mirams
источник
0

Если вам часто приходится сталкиваться с потерей питания, тщательный выбор файловой системы и методов загрузки (только чтение, журнал, автоматический fsck, быстрое восстановление ...) может помочь обеспечить надежную работу системы.

Со стороны приложения, использование определенных баз данных ( sqlite ?) Должно гарантировать полный статус записи или отсутствие записи данных при повторном открытии.

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

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

В автомобиле у вас будет +12/24 В, а PI использует +5 В, поэтому есть потенциал (хех) для чего-то в преобразователе или перед ним. Вы можете быть в состоянии диодно-ИЛИ другой аккумулятор 9-12 В разумного размера перед преобразователем, который вступит во владение, например, при падении напряжения. Учитывая относительно сильное энергопотребление, его нужно каким-то образом держать заряженным. Вы также можете установить компаратор или специальный монитор напряжения для основной линии электропередачи и получать оповещения, когда основное питание не работает. (Я не знаю, что было бы быстрым способом подать сигнал PI.)

XTL
источник
1
Похоже, что возник вопрос, связанный с властью: raspberrypi.stackexchange.com/questions/3778/…
XTL