2013-10-24 253 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) ,因爲它對發佈的消息有一個重試計數(至少在當前的主線上)。所以這個消息應該發生多次。 –