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

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

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

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

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

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


person David Holm    schedule 26.01.2009    source источник


Ответы (2)


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

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

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

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

person Tall Jeff    schedule 26.01.2009
comment
На самом деле у нас были каталоги, которые очень редко записываются в удаленные с помощью fsck, например / lib / modules (!). Мне нравится ваша установка с двумя разделами, я хотел реализовать что-то подобное здесь, но руководство дало этому очень низкий приоритет. - person David Holm; 26.01.2009
comment
@David - Да, конечно, удаление возможно, если оно когда-либо было изменено. То, что делает fsck, далеко не идеально, и могут быть даже ошибки, из-за которых он выбрасывает больше, чем должен / мог. Он исправляет целостность файловой системы, но это также происходит за счет некоторых данных. - person Tall Jeff; 26.01.2009

Дэйв,

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

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

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

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

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

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

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

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

person KOkon    schedule 30.01.2009
comment
Обычно перезагружаемся раз в 24 часа. Почему три синхронизации, а не одной? - person David Holm; 30.01.2009
comment
Мне просто любопытно, почему каждые 24 часа? Я знаю, что большинство встроенных систем должны работать вечно (за исключением обновления ПО). Эти 3 синхронизации произошли из-за некоторых ошибок в более старом ядре, где синхронизация не была синхронизирована, и в сочетании с umount она сбрасывает блоки, которые были смонтированы до umount. - person KOkon; 30.01.2009
comment
24-часовая перезагрузка была реализована, потому что нам приходилось иметь дело с некоторыми ошибочными и плохо поддерживаемыми драйверами, которые иногда перестали работать. Их выгрузка обычно вызывает панику ядра, поэтому мы решили использовать управляемую перезагрузку, а не перезагружать плату сторожевым таймером. - person David Holm; 30.01.2009
comment
Если у вас есть исходный код, вы, вероятно, захотите исправить драйвер, а не заниматься сложностью повреждения файловой системы. - person KOkon; 30.01.2009
comment
Насколько мне известно, двойной или тройной sync - это программирование / сопровождение культа карго, и его следует прекратить. Если в вашем ядре есть ошибки, никакой трюк не будет по-настоящему безопасным. Если ваше ядро ​​не содержит ошибок, размонтирование или повторное монтирование ro всегда сбрасывает изменения в хранилище. Если ваше ядро ​​глючит, лучшим вариантом может быть sync однократное выполнение, ожидание 5-60 секунд и перезагрузка. Обратите внимание: если sync вернется слишком рано, у вас нет возможности узнать, сколько времени вам действительно следует ждать. Фактическая синхронизация может занять очень много времени, если ваш ввод-вывод медленный по сравнению с размером используемого кеша (обычно увеличивается с увеличением ОЗУ). - person Mikko Rantalainen; 20.09.2019
comment
while sleep 1; do grep Dirty /proc/meminfo; done может помочь, но количество кеша, ожидающего очистки, всегда может оказаться больше нуля. - person Mikko Rantalainen; 20.09.2019