2013-10-24 254 views
1

我已经使用ubi文件系统和mtd子系统工作在NAND闪存的顶端。 它工作正常。ubi文件系统损坏的原因

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

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

END_REQUEST:I/O错误, dev mtdblock5,sector 49160

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

+1

这些消息本身并不表示问题。如果你有Linux源代码,你可以编译* drivers/mtd/test *模块并在你的设备上运行它们。如果您的硬件组合(闪存芯片+闪存控制器)存在某些软件问题,则应指出这些测试。 **注意:**一些测试是破坏性的。 –

回答

-1

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

感谢&问候,
阿洛克Thaker

+0

为避免NAND闪存损坏,必须采取哪些预防措施? – Sujatha

+0

喜NAND闪存腐败的发生可能由于诸多因素没有合适的坐骑或多个读/写等 –

2

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

  • UBI_IO_FF:闪存的读取区域仅包含0xFFs
  • UBI_IO_FF_BITFLIPS:同%UBI_IO_FF,而且还出现了由报告数据 完整性错误在MTD驱动
  • UBI_IO_BAD_HDR(在NAND的情况下不可校正的ECC错误):在EC或VID头损坏(坏魔术或CRC)
  • UBI_IO_BAD_HDR_EBADMSG:一样%UBI_IO_BAD_HDR,但也有由MTD驱动 (不可校正的ECC错误在NAND的情况下)
  • UBI_IO_BITFLIPS报道了 数据完整性错误:分别检测和校正位翻转

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

如果您正在使用UBI上的UBIFS顶部,这些块应安排是折磨。这涉及擦除和重写擦除块。如果读取多次,Flash可以去陈旧。这些位可以翻转并要求重写数据。可能会发现只需要对头进行重新编程,并且闪光灯会正常工作。

如果不是,所有NAND mtd驱动程序有一个bad block table。在数据确实不可恢复的情况下,该表中的擦除块将被标记为不良,并且应该不再使用该扇区。

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

错误配置的闪存驱动器可能导致这些错误。不正确的闪存ECC码可能会导致过早的错误(闪存为4位ECC提供空间,但驱动程序仅实现1位)。它也可能是由于每隔1ms-100ms不断地在磁盘上运行一个坏应用程序造成的;即使所有其他组件都是最佳的,这种类型的行为也会在几年内磨损闪光。 育碧应该有一些最好的损耗平均 提供。如果你不断地重新闪光的图像,你可以打折UBI损耗均衡而造成这种问题的。

+0

我想你张贴错误日志是不完整的。参见[io.c中,ubi_io_read()](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/mtd/ubi/io.c?#n185) ,因为它对发布的消息有一个重试计数(至少在当前的主线上)。所以这个消息应该发生多次。 –