Является ли tune2fs -l / dev / mmcblk0pN надежным для проверки ошибки файловой системы?

627
AnkurTank

У нас есть пользовательская плата на базе BBB, она имеет оперативную память 256 МБ и 4 ГБ или eMMC. Мы используем Linux-3.12 и на eMMC у нас есть разделы ext4.

Я пишу скрипт, который периодически запускается и проверяет ошибки файловой системы, и если разделы не смонтированы, я пытаюсь исправить ошибку с помощью e2fsck.
Первоначально я использовал e2fsck -n /dev/mmcblk0pN (N is partition number)для проверки на наличие ошибок в разделе файловой системы.
Однако вышеприведенная команда начала давать неверный результат, когда раздел монтируется и файлы создаются на этом разделе.

Теперь мне нужна альтернатива для проверки ошибки файловой системы.
Один из вариантов - использовать tune2fs -lкоманду в этом разделе для проверки Filesystem stateполя.

Теперь я не уверен, является ли это поле надежным для проверки ошибок файловой системы или нет? И какие возможные значения это поле может иметь? Я видел его ценность clean, clean with errorsи, not cleanно я не получить больше информации от человека страницы.

Итак, tune2fs -l /dev/mmcblk0pN | grep “Filesystem state” | grep “error”надежно ли обнаруживать ошибки файловой системы? Любой другой лучший способ проверить ошибки файловой системы в разделе?

Любое предложение / указатели / информация?

0

1 ответ на вопрос

1
Theodore Ts'o

«Tune2fs -l» сообщит вам, замечало ли ядро ​​проблемы с повреждением файловой системы во время работы. Например, если вы просите ext4 удалить файл, а ext4 обнаруживает, что некоторые блоки в этом файле уже помечены как освобожденные, это означает, что битовая карта выделения повреждена. Обратите внимание, что растровое изображение allocaiton уже было повреждено в тот момент, когда ext4 обнаружило его. Фактически, он мог быть поврежден в течение нескольких дней или недель, и если бы вы писали новые файлы, возможно, что ext4 мог бы выделить блоки для новых файлов, которые использовались для более старых файлов, и пользователь мог потерять данные как результат.

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

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

Обратите внимание, что если вы ищете, не обнаружена ли файловая система поврежденной, потому что ядро ​​споткнулось о что-то явно неправильное, вам не нужно просто очищать dmesg или / var / log / messages. Вы также можете попробовать прочитать файл / sys / fs / ext4 // first_error_time. Если этот файл содержит ненулевое значение, это сообщит вам время (с использованием эпохи Unix), когда ядро ​​обнаружило повреждение файловой системы. Файл errors_count в этом каталоге скажет вам, сколько повреждений файловой системы было обнаружено (но это может быть просто повторное срабатывание системы из-за одной и той же проблемы). Также интересно, если вы хотите проверить, как ваша система обрабатывает ошибки файловой системы, обнаруживаемые ядром, вы можете попробовать записать строку в файл trigger_fs_error - например, echo "test error">

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

Большое спасибо за подробный ответ Теодор. В настоящее время мы используем SysVInit busybox, и он не присущ проверке `fsck` при загрузке. У нас нет демона `filesystem_check`, подобного` systemd`. Поэтому теперь единственное, что мы можем сделать - это написать скрипт и запускать его при запуске и периодически во время нормальной работы системы. При загрузке скрипт проверяет все разделы ext4 и исправляет ошибку, используя `e2fsck -y (или e2fsck -p)`, и при необходимости перезагружается. При нормальной работе он делает то же самое, но не исправляет ошибку, а просто сообщает об этом. AnkurTank 7 лет назад 0
У меня есть два вопроса: 1) как мы можем надежно проверить ошибку файловой системы на смонтированных и отключенных разделах? Как вы также указали, что раздел должен быть размонтирован, и я также проверял, когда раздел монтируется и записи на него идут, `e2fsck` не может дать правильный результат. 2) Может ли несмонтированные разделы случайно иметь ошибки в файловой системе? (Аппаратные блоки могут быть виновниками, но я не могу думать ни о какой другой причине). AnkurTank 7 лет назад 0
E2fsck не может дать достоверный результат при проверке смонтированной файловой системы. Единственное исключение - если вы используете LVM и создаете снимок только для чтения. Этот снимок только для чтения может быть проверен надежно (но вы не можете исправить работающую файловую систему). Все это я описал выше. Theodore Ts'o 7 лет назад 0
Несмонтированные файловые системы могут иметь ошибки из-за (а) проблем с оборудованием, (б) ошибок в ядре, (в) нечистых отключений, если флэш-накопитель не сертифицирован на сбой питания. Не все флэш-устройства гарантированно поступают правильно, если они получают сбой питания. Theodore Ts'o 7 лет назад 0
Спасибо за ответ Теодору. В таком случае, как кто-либо отслеживает ошибки файловой системы в смонтированных разделах и предпринимает действия на ее основе? нельзя ли это не контролировать? Мы не хотим, чтобы ошибка файловой системы достигала состояния, при котором она переустанавливается как доступная только для чтения, и пользователь не сможет выполнить над ней какую-либо операцию. Есть ли какая-либо конкретная сертификация, которую мне нужно проверить в техническом паспорте eMMC, в которой будет указано, сертифицирована ли она при сбое питания? AnkurTank 7 лет назад 0
Если вы являетесь производителем мобильных телефонов и покупаете устройства eMMC за сотни тысяч устройств одновременно, вы обычно можете задать эти вопросы своему поставщику, и действительно серьезные производители проведут собственное тестирование на сбой питания. Или вы не можете использовать съемные батареи и проектировать свое устройство таким образом, чтобы оно полностью отключалось, когда питание начинает снижаться. Совершенство не может быть сделано по дешевке. Это означает использование памяти ECC для предотвращения повреждения памяти космическими лучами до того, как будут записаны дисковые буферы и т. Д. Каков ваш вариант использования? Это жизненно важно для миссии? Avionics? Самостоятельная вождение автомобиля? Theodore Ts'o 7 лет назад 0
Что касается твердотельных накопителей, они указаны в технических характеристиках, и в этом разница между твердотельными накопителями потребительского уровня, которые могут стоить всего несколько сотен долларов, и твердотельными накопителями корпоративного уровня, которые могут стоить почти тысячу долларов или более. Я не знаю, сколько устройств eMMC сертифицировано при сбое питания. Существует печальная тенденция, называемая «гонка ко дну», когда производители пытаются сократить доли копейки от своих затрат на спецификацию материалов, что имеет очень неприятную тенденцию к тому, что качество не обязательно является наивысшим приоритетом. Да, я сравниваю розничные цены с оптовыми, но .... Theodore Ts'o 7 лет назад 0
Также обратите внимание, что большинство производителей телефонов экономят на стоимости разработки программного обеспечения, поэтому они не поспевают за последними исправлениями ошибок из серии стабильных ядер. Так что, если честно, это не просто проблема с оборудованием. Вот почему я спрашиваю, каков ваш вариант использования; Это необычно для производителей телефонов, чтобы заботиться. К сожалению, для слишком многих из них, если они не загораются и не взрываются на самолетах, это считается победой ... (и это не только их вина; большинство людей не хотят платить за качество, поэтому мы получаем то, что заслуживаем) Theodore Ts'o 7 лет назад 0
Если вы используете LVM, вот как вы можете проверить смонтированную файловую систему. Это требует создания снимка только для чтения, и большинство встроенных систем / телефонов не * используют * LVM. (Полагаю, что они могли бы, если бы им было это интересно ...) https://git.kernel.org/cgit/fs/ext2/e2fsprogs.git/tree/contrib/e2croncheck Theodore Ts'o 7 лет назад 0
Спасибо за ответ, мы НЕ в критически важной или авионике или автомобиле с самостоятельным вождением. Это критический случай использования встроенного приложения, не связанного с безопасностью жизни. Однако мы видим эти ошибки файловой системы в наших тестовых устройствах. Эти ошибки, кажется, возникают из-за фрагментации (или, по крайней мере, это то, что мы можем понять из сообщений ядра). Я разместил его на нескольких форумах, например на форуме BBB: https://groups.google.com/forum/#!topic/beagleboard/L7piqfHiyO8. Однако мы не нашли основную причину ИЛИ подходящего решения для этого (за исключением установки min_free_kbytes до 16M). AnkurTank 7 лет назад 0
Поэтому мы пытаемся найти решение для восстановления после ошибок файловой системы, если это произойдет. Подобный вопрос я также разместил здесь http://superuser.com/questions/1138443/how-to-reduce-unmovable-and-and-unevictable-pages-in-linux. AnkurTank 7 лет назад 0
Похоже, ваша основная проблема в том, что вы пытаетесь использовать систему только с 256 МБ ОЗУ, а драйвер eMMC пытается выделить кусок памяти порядка 3 (8 смежных страниц по 4 КБ) и не работает. Это вызывает ошибки ввода-вывода, которые повреждают файловую систему. Вы можете просто делать больше, чем может поддерживать ваша система, или может быть, что какой-то модуль или драйвер ядра загружен вами как утечка памяти. Theodore Ts'o 7 лет назад 0
Я также проверю утечку памяти ядра и обновлю ее. AnkurTank 7 лет назад 0
Кажется, что у нас есть утечка памяти в драйвере edma (Linux 3.12) am335x. Мы пытаемся получить помощь от TI. Между тем у меня было одно сомнение в том, что `e2fsck -y` разрушительная операция? для моего сценария я планирую использовать `e2fsck -p`, поскольку руководство говорит, что оно безопасно решает проблему без вмешательства человека. Какая ошибка потребует вмешательства человека, если e2fsck считает, что операция будет разрушительной? AnkurTank 7 лет назад 0