斷電保護其實很早就做了
但是都不是消費級
早期只有工業固態硬碟(正確來說只是一片板子而已 連外殼都沒有)
台灣有在市面流通並不多 那個年代SLC還在跟剛出來的MLC 大戰
2010 TDK SHG2A Half Slim Type SSD (SLC)這個是我第一個接觸到斷電保護優點的固態硬碟 當年買的起只有4G (灌XP夠了)
2012年企業級的已經大多數都有斷電保護 (最便宜售價還是破萬中)
2013年斷電保護才下放到消費級(大陸BIWIN DELUXE C8380,效能是垃圾,但有斷電保護,台灣似乎沒有對應產品)
2014年 INTEL 730 消費級放入斷電保護
2015年 OCZ VECTOR 180 加入斷電保護
清月雨 wrote:
那個...斷電保護...(恕刪)
消費級的斷電保護確實做的不是很完整,但是只要能讓命令完成,最起碼就不會掉FW了。
這就是你說的工業用一片板狀態

01最近不少網友,對於對岸的測試文章,用一種見到真理似的態度在看待,既然這篇提到了斷電保護,那就讓大家參考參考差異吧。那個什麼論壇訂製版,不也是說多好多棒,結果怎麼現在出問題了呢?
http://bbs.pceva.com.cn/thread-126726-1-4.html
上面這是對岸測試斷電保護的測試文,文章確實寫得挺豐富的,屬於圖文並茂的文章,But.....豐富跟漂亮,就代表做的就會是正確的結果嗎? 我大概有這幾個疑問之處。
1.斷電方式並沒有多做說明,不曉得實際上是怎麼去控制呢?
2. 20多次就能認定有保護的功能? 那用示波器量降壓曲線不是更快?
3.搞個進去系統後跑IOMETER,到底是譁眾取寵,還是真的有其意義?
那我來說說台灣部分,我的做法方面有何差異好了,
1.全硬碟先寫成髒盤,之後安裝作業系統,不管是Windows,還是Linux,甚至是任何的系統都可以,畢竟這功能可是企業/工業等級的設計,怎麼可能就只用Windows系統測試呢?利用Winhex製作1:1映像檔,供之後去做比對時使用。
2.接到主機上進行系統開機中途斷電,斷電方式部分有兩種型態,一種是BIOS控制做關機斷電動作,另一種是總開關做定時斷電,為什麼要從系統讀取過程斷電呢?原因是這樣的,雖然斷電保護主要是保護數據,但是別忘了,硬體線路設計,也該是檢驗的一部份,這部分的運作同樣也是會有異常的可能性,例如數據全都正確,但是開機後,主機卻無法正常讀取資料,導致卡住不正常現象。
3.實驗次數部分,我是真的看了會很想笑,20幾次叫做實驗? 完全是欺負一般人,不會曉得所謂的業界標準吧!?
一般消費級產品,實驗次數為5000~1萬次,企業/工業等級的產品,我的方式都是要運行3~5萬次的實驗,才能認定是可靠的保護機制,過程並不會每次都去檢查,而是幾百次之後才做一次比對,像對方這樣每次去做檢查,看起來好像非常確實,卻實際只做了這麼一點次數,不是譁眾取寵不然是什麼? 一千次後比對,難道錯的資料,還會變回對得不成?
測試目的
文件系統應能保證在系統突然斷電的情況下,最大限度地恢復(保護)有用數據。如果在修改一個文件時掉電,那麼斷電後的文件,保護方式根據實際情況可分為3種:
①用舊文件完全代替新寫文件,新寫文件(沒寫完)被忽略。這種保護方式應用比較多,比如在更新設置時掉電,使用掉電前的設置,使用者是可以接受的。
②用新文件完全代替舊文件(新文件寫了多少就保留多少)。這種保護方式適合應用在文字檔的情況,比如短信。新訊息雖然不完整,但根據情況用戶可以得到部分信息,如果發送方訊息完整或屬於可猜測的情況,則可以要求發送方重發。
③已寫部分用新文件,未寫部分用老文件,所謂“新加舊”的保護方式。這種保護方式可以應用在動態更新的文件上。但是,對於使用偏移量進行的文件讀寫操作,採用這種保護方式,會產生亂碼。
測試方法
測試代碼隨機產生掉電消息,模擬一次掉電行為。測試程式加入到yaffs_FEWriteChunkToNAND()(yaffs_fileem.cpp)中,在寫Data區和Spare區時,分別產生隨機掉電位置,模擬斷電行為。
掉電后,程式重新掛載文件系統,並且讀取掉電時,正在更新的文件,與原文件相比給出判定結果。
程序用到的測試變量:掉電類別 -g_tstPowerOff,1為Data區掉電,2為Spare區掉電。在完全模擬時,掉電類別隨機產生。程序用TestLog.log記錄掉電後判定的結果。TestLog.log為增加方式打開,新記錄寫在最後,不影響原有的記錄結果。
測試手段
模擬一次“掉電”行為,需要進行特殊的處理。實際的掉電行為在電源重新供應後,整個系統會重新開始,包括重薪啟動文件系統。掉電前系統的所有參數、系統堆棧以及現場均失效。在測試中模擬掉電行為有一定的難度,直接斷電既不安全,也不現實,可用 exit() 函數中止程序來模擬。在執行寫操作時,寫入隨機的字節數后,用 exit() 函數立即中止程序的運行;再重新啟動程序,讀取掉電時寫入的文件,分析文件以檢查文件系統新的掉電保護功能。
一般測試手段不適用自動測試,也不可能手工進行大量的測試。在測試中,可以巧妙使用try{} 和 catch(} 結構,既模擬了實際的掉電行為,又保證了自動測試的順利進行。
模擬斷電行為的核心代碼如下:

01真的別再刪文了,除非管理員都能跟著不睡覺,不然何必放大檢視呢?至於品牌保護者,要你就搞懂上面這些,不然就拿出可靠性DATA比對的證據來,否則我的結論依然是,SanDisk 的FW,就是會導致資料不可靠,也確實會讓系統偵測到錯誤,這也只是說出事實罷了,廠商沒付我費用也就算了,還要搞得像是我造謠?
up2u wrote:
感覺拿測試代碼模擬...(恕刪)
哈嘍!你還好嗎? 我打了一串的實際做法,你一句軟體模擬,就能當做是沒看到了嗎?斷電實驗的目的,不是要追求什麼感覺,測試的目的就是要能模擬真實條件,看看會不會有其它待完善的情況與機會。
別認為只有硬體方式才叫做驗證,這也就是我會兩種都跑的原因,即使是當機或因為相容性的掉裝置,同樣也是會有問題的,一切重點只在於,該怎麼去針對引發問題情況,做出省時省力及有效的實驗安排,這才是驗證測試的重點,如果掉一次裝置就出現一個Bad Block的話,預留的數量到底能撐多久?哪個不相容問題的案例,不是出現幾千次的次數?
為何要這麼多的實驗次數?因為斷電保護既然是需要用到電容,那麼自然需要確保它不會失效,了解線路規劃是否需要改進。現在的或許不太會出狀況,但是過去用超級電容時,問題可真的沒有少遇到過。
流於表面的驗證或測試,實際上就失去意義了,例如下圖這情況,磁碟連接之後系統反應有些過慢,但錯誤資訊裡面並沒有任何顯示,不過只要去看IO的部分,就會了解問題實際上是存在的,真心去查問題,還是單純執行所謂流程,主要差別在此。

大家在看SSD產品測試時,難道都沒發現到一個問題,為何數據到底是不是正確,怎麼都沒有人去做確認呢? SSD測試並非什麼都要搞的一直滿載,有時問題反而就出在看似沒有壓力的情況下,過去這部分的確認方式,是對全容量做一萬次不同組合的比對,正寫入,反寫入,亂數寫入,蝶形寫入,全部跑下來又是幾萬次了,另外還有程式多開的部分,有人想過如果兩個程式,同時去對一個位置去操作時,會不會出現問題嗎?這問題是在現實生活中,只要軟體或遊戲多開時候,就容易會遇到的老問題,但是為什麼都沒有人進行過這種模擬?難道SSD只能利用在單一執行的限制中?那這需不需要驗證?起碼我是有驗的。


現在能明白我對產品的批評,不是什麼惡意針對了嗎?
至於現在SSD不貴這點.....那你要提供SSD做實驗,以便造福人群嗎?
說句不客氣一點的話,動嘴的永遠是最簡單的,問題是有對任何人提供過幫助嗎?
FW原始碼其實真的不需要,因為透過分析IO命令,同樣可以回推出FW的規劃方式,畢竟我只要一部份資訊,所以不必到多完整,那麼自然能用回推方式而評估出來,原廠到底是用哪幾種模組套件,去交互配合做到其結果,這就是靠模擬方式的優勢之處,正解析能運作,自然也能靠反解析得出運作方式。