Ситуация:
Ядро и рутовая ФС расположены на SD и мы стартуем и работаем с SD. Проблема:
Если резетнуть или выключить плату, то в 30% случаев следующая загрузка оказывается неуспешной, т.к. херится файловая система на SD карточке. В результате можно успешно стартануть только если прогнать флешку через "ScanDisk" (командой e2fsck /dev/sdb2). Там находит кучу ошибок в файловой системе (лог приведен ниже) и исправляет их.
Решение-1
Если перед резетом или выключением делать команду halt (он же shutdown) то все процессы выгружаются и файловая система не херится.
НО(!) Данное решение меня не устраивает т.к. в общем случае система не знает что ее сейчас выключат и не может ничего выполнить заранее.
ВОПРОС:
Есть ли какое-либо другое решение, чтобы избежать каких-то доп. процедур перед выключением питания ? Можно ли выставить какой-то безопасный режим работы с SD ?
======================
Лог ошибок при проверке e2fsck:
не пойму - так что тогда требуется?
я не лазил в механизм подготовки перед выключением, но предполагаю, что есть серия скриптов и бинарников, которые по команде halt или shutdown бродкастят в систему "о выключение". драйвера останавливаются, программы и процессы завершаются, файлы закрываются.. в файловой системе ставиться файл со штампом "корректно выключился" и все замирает..
2rw9uao стесняюсь спросить - а логи и файлы статистики, скажем за неделю, хде держишь? в "важном" аль "барахле"?
Вопрос конечно актуальный, мало кому понравится встраиваемое решение, которое умирает при аварийном отключении электричества ...
Штатно (на платах), это решается использованием NAND в качестве корневой ФС с UBI файловой системой.
В случаей с SD, логично использовать как минимум ext3 файловую систему с синхронным монтированием (хотя я не уверен, что для ext3 это необходимо) и если даже в этом случае корневая рушится - искать причины того что (какой сервис или приложение) к этому приводит ...
Как вариант, обратить внимание на тип используемого Scheduler-а в ядре - именно он определяет схему кеширования для увеличения быстродействия взаимодействия с носителями.
1. Правильно я понимаю, что проблемы разрушения файловой системы при аварийном выключении связаны с кэшированием операций ? Можно ли отключить кэширование при работе с SD? Решит ли это проблему?
2.
А почему с NAND такой проблемы нет? Она не использует кэширования ?
Дело не в nand а в ФС - для mtd устройств специальные ФС используются которые более устойчивы к внезапным отключениям, последние незаписанные данные могут потеряться - не более, сама структура ФС восстановится при включение.