十萬(wàn)次掉電測(cè)試是怎樣煉成的?
少年,不得了了,出大事了!
“監(jiān)測(cè)了一個(gè)月的數(shù)據(jù),昨晚碰上意外斷電,F(xiàn)lash盤里數(shù)據(jù)全沒了!怎么辦?”
“客戶設(shè)備意外停電,來(lái)電后Flash盤里的程序都沒了!怎么辦?”
“系統(tǒng)掉電后,flash盤里目錄全部變亂碼了!怎么辦?”
這些問(wèn)題的罪魁禍?zhǔn)拙褪荈lash文件系統(tǒng)不具備掉電保護(hù)特性。
數(shù)據(jù)安全日益重要,而文件系統(tǒng)卻依然我行我素不管掉電過(guò)程中文件的死活,這怎么能忍!
致遠(yuǎn)不能忍!
不過(guò)光有一腔熱血是遠(yuǎn)遠(yuǎn)不夠的,解決問(wèn)題還需進(jìn)行全面細(xì)致的調(diào)研。Nand Flash在擦除和寫入過(guò)程中發(fā)生掉電在實(shí)際應(yīng)用中是極有可能發(fā)生的,那么在NandFlash擦除/寫入時(shí)掉電會(huì)發(fā)生什么呢?為什么會(huì)造成如此惡劣的影響呢?下面我們來(lái)一一剖析。
以8位 SLC工藝的NandFlash寫操作為例,掉電時(shí)寫到怎樣就是怎樣。譬如寫入0x01 0x02 0x03 0x04,寫到0x03時(shí)斷電,此時(shí)FLASH中有如下可能:
如果是MLC結(jié)構(gòu),同樣寫到0x3,那可能結(jié)果就是:
理想很美好,現(xiàn)實(shí)很骨感,寫入0x03都能蹦出這么多種情況,實(shí)際應(yīng)用中的突發(fā)掉電造成的結(jié)局就更千奇百怪了。那如果在文件系統(tǒng)中沒有相應(yīng)的預(yù)防措施會(huì)發(fā)生什么慘案呢?
WinCE內(nèi)核中,文件系統(tǒng)版本主要包括 exFAT,F(xiàn)AT32,F(xiàn)AT16,這幾個(gè)文件系統(tǒng)都不具備掉電保護(hù)功能。以FAT32文件系統(tǒng)為例,我們放慢鏡頭,仔細(xì)觀察在Flash寫操作過(guò)程中到底發(fā)生了什么。
上圖是FAT32文件系統(tǒng)讀取文件示意圖,簇是 FAT32 進(jìn)行數(shù)據(jù)存儲(chǔ)的最小單位,文件按照鏈?zhǔn)浇Y(jié)構(gòu)存儲(chǔ),F(xiàn)AT表項(xiàng)中存儲(chǔ)了下一個(gè)簇號(hào),文件系統(tǒng)根據(jù)FAT表項(xiàng)中存儲(chǔ)的簇號(hào)獲取下一個(gè)簇,直至文件讀取完成。
現(xiàn)在我們向文件末尾添加一些數(shù)據(jù),文件系統(tǒng)將會(huì)為文件分配新的簇,將FAT表項(xiàng)內(nèi)容改寫為新的簇號(hào),將新添加的數(shù)據(jù)寫入到下一簇號(hào)的數(shù)據(jù)區(qū)中,如此往復(fù)直至文件保存完成。
等等,說(shuō)好的慢鏡頭呢? 我們是不是錯(cuò)過(guò)了什么?
鏡頭回到最開始,文件系統(tǒng)為文件分配新的簇,F(xiàn)lash對(duì)新分配的簇進(jìn)行擦除操作,完成后寫入新的數(shù)據(jù)內(nèi)容。完成數(shù)據(jù)塊的寫入后,改寫FAT表項(xiàng)內(nèi)容為下一個(gè)簇號(hào),如此往復(fù)直至文件全部保存完成。
那么問(wèn)題來(lái)了,如果在寫入數(shù)據(jù)塊過(guò)程中發(fā)生斷電,F(xiàn)AT表還沒來(lái)得及更改,那是不是就意味著新修改的內(nèi)容沒有被保存?回答是肯定的,當(dāng)然這也是最幸運(yùn)情況之一了,因?yàn)椴]有對(duì)原文件造成損壞,只是丟失了新添加的內(nèi)容而已。
如果掉電恰好發(fā)生在操作FAT表、目錄區(qū)呢,是不是有毛骨悚然的感覺?
WinCE默認(rèn)的文件系統(tǒng)面對(duì)突發(fā)的掉電這么無(wú)助,難道我們只能袖手旁觀?
不!
致遠(yuǎn)WinCE平臺(tái)為了支持文件系統(tǒng)掉電保護(hù)功能,在文件系統(tǒng)中加入了TFAT特性,同時(shí)在驅(qū)動(dòng)中添加掉電保護(hù)功能代碼。為了驗(yàn)證TFAT特性和掉電保護(hù)功能代碼的實(shí)用性,我們?yōu)閃inCE平臺(tái)量身打造了Flash掉電測(cè)試方案。
使用智能定時(shí)器控制被測(cè)設(shè)備電源,使用測(cè)試軟件A監(jiān)測(cè)文件系統(tǒng)狀況,測(cè)試軟件B進(jìn)行數(shù)據(jù)拷貝操作,在拷貝過(guò)程中對(duì)設(shè)備隨機(jī)斷電,如此往復(fù)以模擬Flash寫入時(shí)掉電,軟件運(yùn)行流程如下圖所示。
寶劍鋒從磨礪出,梅花香自苦寒來(lái),經(jīng)過(guò)一個(gè)月漫長(zhǎng)的測(cè)試,測(cè)試次數(shù)約達(dá)10~12萬(wàn)次,若未出現(xiàn)失敗信息則可為該平臺(tái)發(fā)放Flash掉電測(cè)試通過(guò)許可證,自此仗劍走天涯!