Причина повреждения файловой системы Ubi
Я использовал файловую систему ubi и подсистему mtd для работы на вершине NAND flash. Работало нормально.
Но сейчас я нахожу следующие ошибки:
Ошибка UBI: ubi_io_read: ошибка -74 при чтении 516096 байт из PEB 2701:8192, чтение 516096 байт
end_request: ошибка ввода / вывода, dev mtdblock5, сектор 49160
в чем причина тех ошибок, о которых я упоминал выше? Как оправиться от этих ошибок?
2 ответа
На обоих показаны ошибки ввода-вывода, связанные с повреждением или повреждением блока на вашей NAND Flash, попробуйте использовать другую флэш-память и используйте ее. Вы также можете попробовать стереть вспышку и повторить попытку.
С уважением,
Алок Такер
Ошибка -74 EBADMSG
, Глядя на ubi.h мы можем видеть,
- UBI_IO_FF: область чтения флэш-памяти содержит только 0xFFs
- UBI_IO_FF_BITFLIPS: то же самое, что%UBI_IO_FF, но также была ошибка целостности данных, сообщаемая драйвером MTD (неисправимая ошибка ECC в случае NAND)
- UBI_IO_BAD_HDR: заголовок EC или VID поврежден (плохая магия или CRC)
- UBI_IO_BAD_HDR_EBADMSG: то же самое, что%UBI_IO_BAD_HDR, но также была ошибка целостности данных, сообщаемая драйвером MTD (неисправимая ошибка ECC в случае NAND)
- UBI_IO_BITFLIPS: битовые перевороты были обнаружены и исправлены
Каждый блок UBI является блоком флэш-стирания (обычно 128 КБ), и эти блоки имеют два заголовка UBI размером в страницы (обычно 2 КБ). Когда эта страница была прочитана, произошла ошибка. Который не удалось восстановить с помощью кодов исправления ошибок или ECC.
Если вы используете UBI поверх UbiF, эти блоки должны быть запланированы для пыток. Это включает в себя стирание и перезапись блока стирания. Flash может устареть, если его читать много раз. Биты могут перевернуться и потребовать перезаписи данных. Может оказаться, что заголовок UBI просто нужно перепрограммировать, и флэш будет в порядке.
Если нет, то все драйверы NAND mtd имеют неверную таблицу блоков. В случае, если данные действительно не подлежат восстановлению, блок стирания будет помечен как плохой в этой таблице, и Ubi больше не должен использовать этот сектор.
Если ошибка не устранена, это возможная проблема. Тем не менее, это вполне ожидаемо при обычном использовании NAND-вспышки. Типичные циклы от 1000 до 100 000 для NAND-вспышки. После определенного износа вспышка может быть полностью непригодна. Это зависит от типа флэш-памяти, файловой системы (и выравнивания износа) и приложений в системе.
Неправильно настроенный флэш-драйвер может вызвать эти ошибки. Неправильный код ECC для флэш-памяти может привести к преждевременным ошибкам (флэш-память предоставляет место для 4-битного ECC, но драйвер, например, реализует только 1 бит) Это также может быть вызвано плохим приложением, которое постоянно fsync()
диск каждые 1 мс-100 мс; этот тип поведения изнашивает вспышку в течение нескольких лет, даже если все остальные компоненты являются оптимальными. У Ubi должны быть одни из лучших доступных уровней выравнивания. Если вы постоянно обновляете изображение, вы можете отказаться от выравнивания износа ubi и вызвать такую проблему.