Flash-Memory

如何檢測即將發生的 MTD 設備故障

  • April 30, 2014

我們編寫在第三方設備上執行的軟體。在我們支持的其中一種設備上,製造商告訴我們不要寫入快閃記憶體驅動器,否則我們會冒著用完它支持的有限寫入操作的風險。不幸的是,我們的應用程序的要求之一是在引導過程中保留一些數據,我們別無選擇。

我不確切知道設備內部的驅動器是什麼,也不知道它是如何配置的,所以一個問題是我如何才能找到這些資訊?我設法找到的一些資訊: bash-3.2$ df | grep mtd /dev/mtdblock5 65536 7824 57712 12% /apps

bash-3.2$ dmesg | grep -i mtd Kernel command line: root=/dev/mtdblock4 rootfstype=jffs2 rw ip=none console= mem=128M init=/sbin/init mtdparts=mtd:512k(bootloader),512k(env),2M(kernel_a),2M(kernel_b),59M(filesystem),64M(user) loglevel=3 panic=5 reboot=h 6 cmdlinepart partitions found on MTD device <NULL> Creating 6 MTD partitions on "<NULL>":

我查看了 proc 和 sysfs 並沒有發現任何有用的東西。設備環境沒有安裝任何有用的工具,例如我能找到的 hdparam、lshw 等。

另一個問題是是否有任何啟發式軟體可以用來檢測“寫入限制”是否接近?

最後,在寫入磁碟以限制負面影響時,是否可以觀察到任何最佳實踐?例如,小的突發寫入是否比持續的寫入操作更好?是數據吞吐量問題還是文件系統問題?如果我打開一個文件而不關閉它並繼續在那裡流式傳輸數據,是否比為每個新數據打開、寫入和關閉更好?

非常感謝您提供的任何幫助,丹。

如果我打開一個文件而不關閉它並繼續在那裡流式傳輸數據,是否比為每個新數據打開、寫入和關閉更好?

不。關閉或不關閉緩衝輸出的文件會影響數據是否/何時可以從文件中讀取,但這與是否/何時將其物理寫入磁碟不同。

換句話說,當您刷新文件句柄(例如通過關閉它)時,從同一個文件讀取的單獨程序現在將能夠讀取您刷新到文件的數據,但這並不一定意味著文件已經被寫入由核心輸出。如果它在使用中,它可能會被記憶體,並且可能只有那個記憶體才有效。

sync當在整個文件系統上呼叫時,系統磁碟記憶體會被刷新(-> 寫入設備) 。AFAIK 無法對單個文件執行此操作。

另一個問題是是否有任何啟發式軟體可以用來檢測“寫入限制”是否接近?

我非常懷疑這一點,尤其是因為您對該設備知之甚少。像這樣的數字將是近似的和保守的,這就是為什麼我認為設備通常不會在預定義的點發生故障:它們在發生故障時會發生故障,並且由於它們可能在任何時候發生故障,所以你不妨做你想做的事可以檢查並防止因此而失去,而不是假設在〜N次操作之前一切正常。

fsck盡可能執行(在掛載文件系統之前)。如果這是一個長時間執行的設備,請確定在系統空閒時每隔一段時間進行 umount 和 fsck 的方法。

引用自:https://unix.stackexchange.com/questions/127276