Должен ли я использовать ext3 во встроенной системе?

StackOverflow https://stackoverflow.com/questions/479926

Вопрос

У нас есть ряд встроенных систем, которым требуется доступ для чтения и записи к файловой системе, которая находится на флэш-накопителе с эмуляцией блочного устройства.Наша самая старая платформа работает на компактной флэш-памяти, и эти системы используются более 3 лет без единого запуска fsck во время загрузки, и до сих пор у нас не было сбоев, связанных с файловой системой или CF.

На нашей новейшей платформе мы использовали USB-флэш-память для первоначального производства, а сейчас переходим на диск-на-модуле для хранения данных с возможностью чтения/записи.Некоторое время назад у нас были проблемы с файловой системой на многих устройствах, работающих на USB-накопителях, поэтому я включил e2fsck, чтобы посмотреть, поможет ли это.Как оказалось, мы получили партию плохих флэш-памятей, поэтому после их замены проблема исчезла.С тех пор я отключил e2fsck, поскольку у нас не было никаких признаков того, что это делает систему более надежной, и исторически мы обходились без него.

Теперь, когда мы начали добавлять модули «Диск-на-модуле», я снова начал видеть ошибки файловой системы.Внезапно система не может читать/записывать определенные файлы, и если я попытаюсь получить доступ к файлу из аварийной консоли, я просто получаю сообщение «Ошибка ввода/вывода".Я снова включил e2fsck, и все файлы были исправлены.

О'Рейли"Создание встраиваемых систем Linux" рекомендует запускать e2fsck на файловых системах ext2, но не упоминает об этом в отношении ext3, поэтому я немного не понимаю, следует ли мне включать его или нет.

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

Это было полезно?

Решение

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

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

Я согласен, что размещение ваших двоичных файлов или других важных данных, доступных только для чтения, в отдельном разделе, доступном только для чтения, помогает гарантировать, что они не могут быть ошибочно удалены из-за исправления fsck структур файловой системы.Как минимум, поможет размещение их в корневом подкаталоге, отличном от того, в котором хранятся данные чтения/записи.Но в обоих случаях, если вы поддерживаете обновления программного обеспечения, вам все равно потребуется схема записи областей «только для чтения».

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

Другие советы

Дэйв,

Я всегда рекомендую запускать fsck после нескольких перезагрузок, но не каждый раз.

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

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

Я не знаю, на каком встроенном устройстве вы работаете, но как часто оно перезагружается?Если это контролируемая перезагрузка, вы всегда можете выполнить команду «sync;sync;sync» перед перезапуском.

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

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

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

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top