在Linux嵌入式系統(tǒng)中,文件系統(tǒng)和緩存機(jī)制常導(dǎo)致數(shù)據(jù)存儲穩(wěn)定性問題。本文通過案例分析原因,對比不同文件系統(tǒng)特性,為開發(fā)者提供優(yōu)化建議,助力提升數(shù)據(jù)穩(wěn)定性和系統(tǒng)可靠性。
? 前言
基于Linux的嵌入式操作系統(tǒng),由于有文件系統(tǒng)以及緩存的存在,在數(shù)據(jù)存儲方面的使用注意事項(xiàng)比單片機(jī)直接寫存儲器的應(yīng)用會有更多的要求才能達(dá)到數(shù)據(jù)的穩(wěn)定可靠。如下都是比較常見的異常:
系統(tǒng)沒有正常關(guān)機(jī),導(dǎo)致磁盤出現(xiàn)文件系統(tǒng)錯(cuò)誤或者變?yōu)橹蛔x;
頻繁讀寫數(shù)據(jù),文件系統(tǒng)中文件被損壞或者變?yōu)橹蛔x;
在讀寫過程中突然斷電,導(dǎo)致文件系統(tǒng)變?yōu)橹蛔x。
? 案例回顧
先看幾個(gè)真實(shí)案例:
案例1
有客戶反饋在使用M3354-512LI-F1GT的核心板當(dāng)中。發(fā)現(xiàn)會出現(xiàn)文件系統(tǒng)變成只讀的現(xiàn)象,此時(shí)主機(jī)就不能正常使用。
案例2
EPC-287C-L ARM9系列核心板,當(dāng)網(wǎng)關(guān)程序和配置信息放在/opt文件夾下面執(zhí)行一段時(shí)間,偶爾出現(xiàn)/opt文件夾下的信息都被清空或者里面權(quán)限變?yōu)橹蛔x。
案例3
M280工控板在運(yùn)行一段時(shí)間后,/opt目錄下的文件不能編輯,編輯的時(shí)候會出現(xiàn)只讀的情況,但是文件的屬性又不是只讀的。
案例分析
案例1的問題可能是本身ubifs的機(jī)制問題,解決方式是通過更新ubifs數(shù)據(jù)分區(qū)的格式為yaffs格式。
偶發(fā)性的opt目錄只讀問題,暫時(shí)沒有好的辦法去解決。一般情況下,建議在對opt分區(qū)或者文件系統(tǒng)進(jìn)行寫操作時(shí),使用sync命令或函數(shù)同步數(shù)據(jù)。由于SLC NandFlash的標(biāo)準(zhǔn)讀寫次數(shù)上限為10萬次,因此,不建議太頻繁的進(jìn)行擦除寫入。
硬件上,為了保證產(chǎn)品穩(wěn)定,建議添加備份電源或者大電容,保證10s左右的續(xù)航時(shí)間,讓系統(tǒng)有足夠時(shí)間去做文件系統(tǒng)同步。
? 要點(diǎn)提示
當(dāng)然,不單只有ubifs文件系統(tǒng)才會出現(xiàn)opt目錄只讀問題,在ext4和yaffs2的文件系統(tǒng)也有出現(xiàn)。比如沒有正確按照文檔的步驟操作打包或者燒寫文件系統(tǒng)的鏡像,也會直接造成文件系統(tǒng)鏡像損壞。當(dāng)文件系統(tǒng)出現(xiàn)損壞或錯(cuò)誤時(shí),操作系統(tǒng)會將其自動掛載為只讀模式,以防止進(jìn)一步的數(shù)據(jù)損壞。這是為了保護(hù)數(shù)據(jù)的完整性和安全性。有時(shí),操作系統(tǒng)在引導(dǎo)過程中會自動檢測文件系統(tǒng)錯(cuò)誤。為了避免這些錯(cuò)誤進(jìn)一步擴(kuò)散,操作系統(tǒng)會將文件系統(tǒng)以只讀模式掛載,以便用戶可以修復(fù)錯(cuò)誤。
還有一種是人為主動將其掛載為只讀模式,將文件系統(tǒng)以只讀模式掛載可以增加系統(tǒng)的安全性,防止未經(jīng)授權(quán)的用戶修改或刪除關(guān)鍵文件。特別是在網(wǎng)絡(luò)環(huán)境中,只讀文件系統(tǒng)可以起到一定的保護(hù)作用??梢栽诎l(fā)生損壞、錯(cuò)誤、硬件故障時(shí)保護(hù)數(shù)據(jù)的完整性和安全性。
根據(jù)應(yīng)用場景選擇合適的文件系統(tǒng),能有效減少opt分區(qū)變?yōu)橹蛔x的概率,提高產(chǎn)品的穩(wěn)定性。
圖1和圖2摘自TOSHIBA的公開文檔,為我們在做文件系統(tǒng)的選擇時(shí)提供了很好的參考。圖1列出了電子產(chǎn)品對文件系統(tǒng)的參數(shù)要求,如快速啟動、IO性能、內(nèi)存消耗、使用壽命和掉電忍受能力。
圖1 選擇文件系統(tǒng)考慮的因素
不同的文件系統(tǒng)因?yàn)樵O(shè)計(jì)理念的不同,在上述因素的實(shí)現(xiàn)以及應(yīng)用場合也是不一樣的。在圖2所列的4種文件系統(tǒng)特性對比中,可以很清楚看到,YAFFS2對內(nèi)存消耗比較小,但不太適合于經(jīng)常寫數(shù)據(jù)的應(yīng)用,比較適合于存儲靜態(tài)數(shù)據(jù)的應(yīng)用場景。如果要進(jìn)行動態(tài)數(shù)據(jù)存儲,建議用戶進(jìn)行數(shù)據(jù)寫平衡加強(qiáng)處理。而UBIFS文件系統(tǒng)則相反,對內(nèi)存消耗較大,能適用于頻繁寫數(shù)據(jù)的場合,但因?yàn)槲募到y(tǒng)緩存的原因,在抗掉電能力稍弱,需要在硬件和系統(tǒng)方面做一些補(bǔ)救。
圖2 幾種文件系統(tǒng)的特性對比
簡單歸納一下,在產(chǎn)品設(shè)計(jì)中一定要根據(jù)應(yīng)用場景來選擇合適的文件系統(tǒng)才能保證產(chǎn)品穩(wěn)定和數(shù)據(jù)可靠。不經(jīng)常寫數(shù)據(jù)可優(yōu)先選擇YAFFS2,經(jīng)常寫數(shù)據(jù)則應(yīng)當(dāng)考慮UBIFS;經(jīng)常異常掉電,優(yōu)先選擇YAFFS2,有掉電保護(hù)則可選擇UBIFS。
D9系列Cortex-A55?核心板 | |
四/五核Cortex-A55
UART*16 CAN FD*4 千兆以太網(wǎng)*2 |