我已经使用ubi文件系统和mtd子系统工作在NAND闪存的顶端。 它工作正常。ubi文件系统损坏的原因
但现在我发现了以下错误:
UBI错误:ubi_io_read:错误-74,而从PEB 2701阅读516096个字节:8192,读516096个字节
END_REQUEST:I/O错误, dev mtdblock5,sector 49160
上面提到的那些错误的原因是什么? 如何从这些错误中恢复?
我已经使用ubi文件系统和mtd子系统工作在NAND闪存的顶端。 它工作正常。ubi文件系统损坏的原因
但现在我发现了以下错误:
UBI错误:ubi_io_read:错误-74,而从PEB 2701阅读516096个字节:8192,读516096个字节
END_REQUEST:I/O错误, dev mtdblock5,sector 49160
上面提到的那些错误的原因是什么? 如何从这些错误中恢复?
两者都显示与NAND闪存中的损坏或坏块相关的I/O错误,请尝试使用另一个闪存并使用它。您也可以尝试擦除闪存并再次尝试。
感谢&问候,
阿洛克Thaker
为避免NAND闪存损坏,必须采取哪些预防措施? – Sujatha
喜NAND闪存腐败的发生可能由于诸多因素没有合适的坐骑或多个读/写等 –
错误-74是EBADMSG
。纵观ubi.h我们可以看到,
每个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损耗均衡而造成这种问题的。
我想你张贴错误日志是不完整的。参见[io.c中,ubi_io_read()](https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/mtd/ubi/io.c?#n185) ,因为它对发布的消息有一个重试计数(至少在当前的主线上)。所以这个消息应该发生多次。 –
这些消息本身并不表示问题。如果你有Linux源代码,你可以编译* drivers/mtd/test *模块并在你的设备上运行它们。如果您的硬件组合(闪存芯片+闪存控制器)存在某些软件问题,则应指出这些测试。 **注意:**一些测试是破坏性的。 –