22

Я занимаюсь разработкой приложения на встроенной плате Linux (работает под управлением Debian), например, Raspberry Pi, Beagle Board/Bone или olimex. Доски работают в условиях, когда электричество неожиданно отключается (размещение БП и т.д. Гораздо сложнее), и это будет происходить каждый день пару раз. Интересно, могут ли неожиданные отключения питания вызвать сбой / проблему в операционной системе Linux? Если это то, что я должен волновать, что бы вы предложили, чтобы предотвратить повреждения ОС от неожиданного отключения электроэнергии?

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

4 ответа4

14

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

Как пишет l0b0, использование файловой системы журналирования поможет, так как она сможет отслеживать, что на самом деле было сделано. В дополнение к информации из Википедии, на которую ссылается l0b0, вас также может заинтересовать https://unix.stackexchange.com/questions/12699/do-journaling-filesystems-guarantee-against-corruption-after-a-power-failure. ,

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

10

Чтобы минимизировать вероятность повреждения ОС, вероятно, лучше иметь отдельные разделы "системы" и "данных" на SD-карте. Таким образом, вы можете смонтировать "системный" раздел только для чтения и использовать высокоэластичную ФС в разделе "данных".

Кроме того, большинство из этих плат имеют очень низкое энергопотребление, поэтому возможна резервная батарея. Плата "LiPo rider" для Raspberry Pi может использоваться в качестве базового ИБП для обеспечения полного отключения при отключении питания.

5

Это будет зависеть от

  1. используете ли вы файловую систему журналирования и
  2. насколько хорошо приложения могут обрабатывать прерванную обработку.

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

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

0

Поскольку никто не упомянул какие-либо конкретные файловые системы: более современные файловые системы (ext3, ext4, ntfs) способны обрабатывать сбои намного лучше, чем старые файловые системы (ext2, ext, fat32) из-за журналирования.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .