ubi文件系统损坏的原因

时间:2013-10-24 07:21:44

标签: linux filesystems flash-memory ubifs

我使用ubi文件系统和mtd子系统在NAND闪存的顶部工作。 它工作正常。

但现在我发现了以下错误:

UBI错误:ubi_io_read:错误-74从PEB 2701读取516096个字节:8192,读取516096个字节

end_request:I / O错误,dev mtdblock5,扇区49160

我上面提到的那些错误的原因是什么? 如何从这些错误中恢复?

2 个答案:

答案 0 :(得分:3)

错误-74是EBADMSG。看看ubi.h,我们可以看到,

  • UBI_IO_FF :闪存的读取区域仅包含0xFF
  • UBI_IO_FF_BITFLIPS :与%UBI_IO_FF相同,但也有数据                   MTD驱动程序报告的完整性错误                   (在NAND情况下无法纠正的ECC错误)
  • UBI_IO_BAD_HDR :EC或VID标头已损坏(错误魔法或CRC)
  • UBI_IO_BAD_HDR_EBADMSG :与%UBI_IO_BAD_HDR相同,但也有一个                       MTD驱动程序报告的数据完整性错误                       (在NAND情况下无法纠正的ECC错误)
  • UBI_IO_BITFLIPS :检测并更正了位翻转

每个UBI块都是一个闪存擦除块(典型值为128K),这些块有两个UBI头,它们是一个页面大小(典型值为2k)。阅读此页面时出现错误。通过纠错码或ECC无法恢复。

如果您在 UbiFs 之上使用 UBI ,则应将这些块安排为折磨。这涉及擦除和重写擦除块。如果多次读取,Flash可以陈旧。这些位可以翻转并要求重写数据。可能会发现 UBI 标题只需要重新编程,闪存就可以了。

如果没有,所有NAND mtd 驱动程序都有bad block table。如果数据确实无法恢复,则擦除块将在此表中标记为坏, Ubi 不应再使用此扇区。

如果错误仍然存​​在,那么这是一个可能的问题。但是,正常使用NAND闪存有点预期。 NAND闪存的典型周期为1,000到100,000。经过一定程度的磨损后,闪光灯可能完全无法使用。这取决于闪存类型,文件系统(和wear leveling)以及系统上的应用程序。

错误配置的闪存驱动程序可能会导致这些错误。闪存的不正确的ECC代码可能导致预先成熟的错误(闪存为4位ECC提供空间,但驱动程序仅实现1位)。它也可能是由于每隔1ms-100ms不断fsync()磁盘的错误应用程序引起的;这种类型的行为将在几年内磨损闪光灯,即使所有其他组件都是最佳的。 Ubi 应该有一些最好的磨损平衡 可用。如果您经常重新闪存图像,您可以打折 ubi 磨损均衡并导致此类问题。

答案 1 :(得分:0)

两者都显示与您的NAND闪存中的损坏或坏块有关的I / O错误,尝试使用另一个闪存并使用它。您也可以尝试擦除闪存并再次尝试。

谢谢&问候,
Alok Thaker