SSD断电保护机制
??????????由于意外停電、藍(lán)屏死機(jī)等原因?qū)е码娔X沒有正常完成關(guān)機(jī)就屬于斷電。異常斷電會(huì)增大固態(tài)硬盤發(fā)生故障的幾率,不僅僅是丟失尚未保存的文件,還有系統(tǒng)緩存內(nèi)尚未實(shí)際寫入到硬盤的數(shù)據(jù),以及短暫儲(chǔ)存在固態(tài)硬盤DRAM緩存當(dāng)中等待最終寫入NAND閃存的少量數(shù)據(jù)都可能會(huì)丟失。極端情況下固態(tài)硬盤上以前寫入的數(shù)據(jù)也會(huì)出錯(cuò),甚至整個(gè)固態(tài)硬盤會(huì)因此“變磚”——無(wú)法識(shí)別、無(wú)法使用、數(shù)據(jù)全毀。
?????????? 在SSD內(nèi)置電容中提供應(yīng)急保護(hù)電源設(shè)計(jì),確保在突然斷電的情況下數(shù)據(jù)也不會(huì)丟失。
固態(tài)硬盤異常斷電可能變磚是因?yàn)楣虘B(tài)硬盤在內(nèi)部DRAM緩存中存儲(chǔ)了FTL表等等維系固態(tài)硬盤正常工作所必須的元數(shù)據(jù),這些數(shù)據(jù)與用戶存儲(chǔ)讀寫的數(shù)據(jù)無(wú)關(guān),但卻是固態(tài)硬盤維護(hù)自身正常運(yùn)作所必需的。異常斷電會(huì)導(dǎo)致這些元數(shù)據(jù)丟失損壞。
FTL是由固態(tài)硬盤主控維護(hù)、存儲(chǔ)在固態(tài)硬盤DRAM緩存當(dāng)中一張?zhí)摂M關(guān)系對(duì)照表,其中記錄了邏輯LBA地址與實(shí)際閃存PBA地址的一一對(duì)應(yīng)關(guān)系。由于固態(tài)硬盤的工作機(jī)制與傳統(tǒng)機(jī)械硬盤截然不同,對(duì)于機(jī)械硬盤來說LBA地址會(huì)有一個(gè)固定的位置指向,而到了固態(tài)硬盤當(dāng)中,數(shù)據(jù)寫入之后實(shí)際存儲(chǔ)在閃存的哪個(gè)位置是由固態(tài)硬盤主控決定的。最“原始”的斷電保護(hù)機(jī)制就是在恢復(fù)通電后爭(zhēng)取修復(fù)受損的FTL表,修復(fù)過程可能需要一定時(shí)間,所以才會(huì)有變磚后“通電三十分鐘閑置”的救急方法。
通電閑置的救濟(jì)方法并非總能成功,所以減少變磚的最佳方法還是避免異常斷電對(duì)固態(tài)硬盤造成傷害,于是就有了各種固態(tài)硬盤斷電保護(hù)機(jī)制的出現(xiàn)。
斷電保護(hù)機(jī)制Power Failure Management(PFM):
異常斷電保護(hù)有硬件級(jí)和固件級(jí)兩類。當(dāng)前所有的固態(tài)硬盤在設(shè)計(jì)時(shí)其實(shí)都會(huì)有掉電保護(hù)機(jī)制,重點(diǎn)在于能否覆蓋所有可能發(fā)生的極端條件,以及保護(hù)機(jī)制自身是否會(huì)犯錯(cuò)。
硬件級(jí)斷電保護(hù)需要有獨(dú)立的硬件電路,包括應(yīng)急供電用的電容、用于發(fā)現(xiàn)斷電并觸發(fā)保護(hù)機(jī)制的電壓監(jiān)視芯片等。下圖是OCZ Vector 180的拆解,圖中紅色聚合物電容就是斷電保護(hù)電容,此外還會(huì)有相應(yīng)的升降壓電路。
除了使用聚合物電容之外還有一些固態(tài)硬盤會(huì)使用電解電容,比如Intel 730:
硬件級(jí)斷電保護(hù)機(jī)制通過電源穩(wěn)定偵測(cè)到斷電發(fā)生后改用備用電容供電并立刻著手固態(tài)硬盤緩存內(nèi)重要FTL數(shù)據(jù)的刷新寫入。
可以看到,整個(gè)硬件級(jí)斷電保護(hù)機(jī)制當(dāng)中,電容至關(guān)重要。
不管是聚合物電容還是電解電容,都是有使用壽命限制的,而且會(huì)隨著工作溫度的提升而加快失效,所以帶有硬件斷電保護(hù)電路的固態(tài)硬盤都會(huì)有一個(gè)安全使用年限,一旦電容失效,不但不能保護(hù)固態(tài)硬盤,反而會(huì)因?yàn)閿嚯姇r(shí)保護(hù)邏輯無(wú)法生效而導(dǎo)致數(shù)據(jù)丟失風(fēng)險(xiǎn)。
使用電容來實(shí)現(xiàn)掉電保護(hù)待考慮的問題:
(1)電容容量的大小
容量太小:電量不夠用于數(shù)據(jù)的保存,照樣會(huì)有異常掉電隱患。容量太大:一是,SSD需要電容充分放電后才能被識(shí)別,如果只是短暫突然的掉電,重新上電后電容仍然沒有放電完畢,SSD將不會(huì)被識(shí)別;二是,容量大的電容需要充電的時(shí)間長(zhǎng),充電時(shí)間若不夠,沒有足夠的電量保存數(shù)據(jù)。
(2)電容得老化問題
電容也是有使用期限的,很長(zhǎng)時(shí)間之后電容得老化可能導(dǎo)致電容電量只能有原來的30%。
(3)數(shù)據(jù)保護(hù)對(duì)象
不同的廠家對(duì)數(shù)據(jù)保護(hù)對(duì)象有不同,常見的保護(hù)對(duì)象分為以下三種:
- 保護(hù)SDRAM中所有數(shù)據(jù)(映射表+用戶數(shù)據(jù));再次上電后,相當(dāng)于斷電前的操作被中斷,重新上電后就可立馬進(jìn)入待命狀態(tài)。
- 只保護(hù)映射表;再次上電后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,再將保存的用戶數(shù)據(jù)提取出來,兩者結(jié)合更新映射信息,更新完之后才進(jìn)入待命狀態(tài)。
- 只保護(hù)用戶數(shù)據(jù);再次上電后,需要先把上次NAND Flash中保存的映射表提取到SDRAM中,只是丟掉了用戶斷電前正在操作的數(shù)據(jù),無(wú)法更新。
除了硬件級(jí)斷電保護(hù)之外,其實(shí)現(xiàn)在各家固態(tài)硬盤廠商也都開發(fā)了各自的固件級(jí)斷電保護(hù)策略,比如下圖中的東芝Q300Pro,PCB上并沒有碩大的聚合物電容或是電解電容,但一樣具備斷電保護(hù)能力。
斷電過程是瞬間的,但電壓并不會(huì)直接變零,而是有一個(gè)急劇的下降過程。在不添加保護(hù)電容的情況下,固態(tài)硬盤也可以通過定制版主控或獨(dú)立的電壓監(jiān)控芯片時(shí)刻監(jiān)視供電情況,一旦發(fā)生電壓下降會(huì)在毫秒級(jí)時(shí)間內(nèi)觸發(fā)斷電保護(hù)應(yīng)急機(jī)制:馬上停止用戶數(shù)據(jù)的接受和寫入,立刻將FTL映射表等對(duì)固態(tài)硬盤正常工作至關(guān)重要的元數(shù)據(jù)寫入到NAND閃存當(dāng)中。這樣在下次再通電的時(shí)候,固態(tài)硬盤就無(wú)需面對(duì)FTL損壞、Page寫入錯(cuò)亂等一團(tuán)糟的局面。
東芝Q300Pro使用無(wú)外置緩存設(shè)計(jì),所有FTL數(shù)據(jù)都是存儲(chǔ)在主控內(nèi)部小容量SRAM當(dāng)中,由于數(shù)據(jù)量小,所以在斷電發(fā)生時(shí)需要寫回閃存的壓力要小一些,同時(shí)Q300Pro還應(yīng)用了SLC Cache,寫入速度相比MLC或TLC閃存要快的多,所以在斷電瞬間也能完成硬件級(jí)斷電保護(hù)機(jī)制完成的工作。此外,東芝Q300Pro的FTL映射表在閃存當(dāng)中有一個(gè)完整的備份,更新映射表的操作采取兩張表交替進(jìn)行,異常掉電導(dǎo)致一張F(tuán)TL映射表?yè)p壞時(shí)可以用備份表恢復(fù)之前的狀態(tài)。
而另外一些有DRAM外置緩存的固態(tài)硬盤,同樣宣稱支持固件級(jí)的斷電保護(hù)機(jī)制,他們是如何做到的呢?還是以東芝的固態(tài)硬盤為例,Q300使用了以PHISON PS3110為基礎(chǔ)定制的主控。PS3110的斷電保護(hù)機(jī)制包括SmartFlush與GuaranteedFlush兩部分。SmartFlush主要是被動(dòng)防御,盡可能縮短數(shù)據(jù)在固態(tài)硬盤DRAM緩存當(dāng)中停留的時(shí)間,加快將他們寫入到閃存中安全的保存起來;GuaranteedFlush則是主動(dòng)保護(hù)FTL表等元數(shù)據(jù)的安全,定期保留多份FTL表的備份存儲(chǔ)到閃存當(dāng)中,以便在供電恢復(fù)后修復(fù)使用。
雖然Q300/Q300Pro這類固態(tài)硬盤沒有大顆電容那么養(yǎng)眼,但固件層面上做好了FTL防護(hù),保障異常斷電不變磚,一般普通消費(fèi)者并沒有必要去追求一些所謂的企業(yè)級(jí)字眼,畢竟實(shí)惠好用才是真理。
總結(jié)
- 上一篇: 002柿饼派GUI模组学习之Animat
- 下一篇: 简单理解sticky定位与fixed定位