基于用閃存為儲存的固態(tài)硬盤(Solid State Drive,SSD),與基于用磁性盤片為儲存的傳統(tǒng)硬盤(Hard Disk Drive,HDD)相比較,固態(tài)硬盤具有:(1)無噪音(2)耐震動(3)數(shù)據(jù)讀寫速度快(4)低耗電等等的優(yōu)勢。又隨著各家閃存制造商陸續(xù)推出更多更便宜且高容量的閃存內(nèi)存,在未來傳統(tǒng)硬盤被固態(tài)硬盤所取代將是趨勢。
然因閃存內(nèi)存不像磁性盤片具有可重復(fù)覆寫的好處,因此固態(tài)硬盤裝置內(nèi)都需要執(zhí)行一個所謂的FTL(Flash Translation Layer)程序,以維持隨時都有閑置的區(qū)塊(free blocks)可以儲存新寫入的數(shù)據(jù)。而在一個閑置區(qū)塊被用于儲存客戶端的寫入數(shù)據(jù)時,又必須檢查閑置區(qū)塊數(shù)量是否足夠。如果不足,則又需要進(jìn)行所謂的垃圾回收(Garbage Collection,GC)讓閑置區(qū)塊個數(shù),得以足夠以應(yīng)付未來從客戶端寫入的新數(shù)據(jù)。
我們知道,較早期的計算機(jī)文件系統(tǒng)(File System)對于被刪除的文件之處理,僅僅在文件配制表(File Allocation Table)上,將被刪除文件所使用的叢集(cluster),標(biāo)示成「未使用狀態(tài)」,這些叢集所相對應(yīng)的邏輯區(qū)塊地址(Logic Block Address,LBA)上所儲存之?dāng)?shù)據(jù)并未被移除,這樣的操作方式對可重復(fù)覆寫的傳統(tǒng)硬盤而言是合理適當(dāng)?shù)?,但對不可重?fù)覆寫固態(tài)硬盤而言卻是不適當(dāng)?shù)?,而且會需要垃圾回收之處理。因此在較新ATAPI(ATA Packet Interface)命令規(guī)范標(biāo)準(zhǔn),或是NVMe(NVM express)規(guī)范標(biāo)準(zhǔn)里,都加入了數(shù)據(jù)集管理(Dataset Management)命令,讓較先進(jìn)的計算機(jī)文件系統(tǒng),可以對固態(tài)硬盤下達(dá)「將某些邏輯區(qū)塊地址上的數(shù)據(jù)丟棄」,以減少固態(tài)硬盤垃圾回收的處理。不但如此,數(shù)據(jù)集管理命令也降低了固態(tài)硬盤的寫入放大值(Write Amplification Index),使得固態(tài)硬盤的使用壽命得以延長。
然則,數(shù)據(jù)集管理命令為固態(tài)硬盤帶來了好處,但也帶來了不易被察覺的嚴(yán)重問題-邏輯物理塊映射表不正確!底下讓我們來描述邏輯物理塊映射表不正確的問題,是如何發(fā)生及問題發(fā)生時的癥狀。
為了簡化問題的描述,我們假設(shè)
1 一個物理塊區(qū)塊擁有4個頁面
2 邏輯區(qū)塊地址(LBA)和物理區(qū)塊地址(PBA)的映射表,內(nèi)容為一個數(shù)對,分別代表物理區(qū)塊碼(block number)與頁碼(page number),數(shù)對(0,0)則代表無數(shù)據(jù)
3 固態(tài)硬盤有16個邏輯區(qū)塊地址
因?yàn)殚W存內(nèi)存不具有「重復(fù)覆寫」的特性,一個邏輯區(qū)塊地址的數(shù)據(jù),存放在閃存內(nèi)存的哪個位置是不固定的,因此固態(tài)硬盤里,皆存在著邏輯物理映射表(L2P Table)。這個映像表的功能,是讓FTL程序查出某個邏輯區(qū)塊地址之?dāng)?shù)據(jù)被儲存在閃存的哪個位置(包含閃存物理區(qū)塊碼(block number)、頁碼(page number)、偏移量(offset)等)。這一個映像表需要儲存一份在閃存內(nèi)存里,讓固態(tài)硬盤在斷電后再次供電運(yùn)作時,才能得知最新數(shù)據(jù)在哪里。對讀寫速度要求高的固態(tài)硬盤,會配置足夠的動態(tài)隨機(jī)存取內(nèi)存(Dynamic Random Access Memory,DRAM)存放這個映像表,讓FTL程序可以更快速查詢或更新映射表。因此固態(tài)硬盤在開始供電當(dāng)下,會將儲存在閃存內(nèi)存里的邏輯物理映射表讀到DRAM,如 Fig. 1 所示。(圖中,頁面標(biāo)示為FFFFFFFF代表此頁面處于抹除狀態(tài);頁面標(biāo)示為XXXXXXXX代表此頁面曾經(jīng)被寫入數(shù)據(jù)但事后被其他實(shí)體地址數(shù)據(jù)所取代或被數(shù)據(jù)集管理指令所丟棄而成為無效數(shù)據(jù))
接下來,客戶端刪除文件,下達(dá)了數(shù)據(jù)集管理指令給固態(tài)硬盤,指示將 LBA1~2的數(shù)據(jù)刪除,并且又下了寫LBA13的指令。一般做法,固態(tài)硬盤將會執(zhí)行下列步驟(Fig. 2、Fig. 3 圖示說明):
1. 將LBA1、2 在映射表 (DRAM) 里更新為 (0,0)
2. 要求一個閑置的物理塊區(qū)塊,假設(shè)取物理區(qū)塊4, 將LBA13的數(shù)據(jù)寫入物理塊區(qū)4,更新LBA13的邏輯物理塊映像表格。
3. 發(fā)現(xiàn)閑置的物理塊區(qū)塊個數(shù)不足(少于3),啟動垃圾回收,將物理區(qū)塊3上的有效數(shù)據(jù)(LBA3 數(shù)據(jù))寫至物理區(qū)塊4,更新LBA3的邏輯物理塊映像表格,并將物理區(qū)塊3 回收為閑置塊(Free Block)。
如果在固態(tài)硬盤執(zhí)行垃圾回收之后,計算機(jī)系統(tǒng)出現(xiàn)不穩(wěn)狀況突然間失去電源供應(yīng),固態(tài)硬盤將在下次電源恢復(fù)時,執(zhí)行下列步驟(Fig. 4、Fig. 5 圖式說明):
1. 將儲存在閃存內(nèi)存里的邏輯物理塊映射表讀到DRAM。
2. 讀取區(qū)塊4每一頁面內(nèi)容,并根據(jù)頁面內(nèi)容所紀(jì)錄對應(yīng)的邏輯區(qū)塊地址,更改DRAM上的邏輯物理塊映射表。
比較 Fig. 5 與Fig. 3 映射表(DRAM) 的內(nèi)容會發(fā)現(xiàn),邏輯區(qū)塊地址1、2上的物理塊對應(yīng)地址有差異。也就是邏輯物理塊映射表的正確性以經(jīng)有錯誤了(Fig. 5標(biāo)示為紅色部分)!
Fig. 5 的邏輯物理塊映射表顯示,邏輯區(qū)塊地址1、2數(shù)據(jù)存在于物理塊區(qū)塊3。實(shí)際上物理區(qū)塊3已經(jīng)是一個閑置區(qū)塊,不存在任何數(shù)據(jù)。這樣子的錯誤映像對FTL程序而言是一種嚴(yán)重的錯誤。事后,如果固態(tài)硬盤繼續(xù)使用下去,當(dāng)別的邏輯區(qū)塊數(shù)據(jù)寫入物理區(qū)塊3之后,讀取邏輯區(qū)塊地址1、2會讀到別的邏輯區(qū)塊地址之?dāng)?shù)據(jù)。隨著時間的經(jīng)過,不同時間讀又會有不同數(shù)據(jù)寫入物理區(qū)塊3,讀取邏輯區(qū)塊地址1、2數(shù)據(jù)還會隨著時間的不同而改變?;蛟S讀者會問,既然邏輯區(qū)塊地址1、2的數(shù)據(jù)已經(jīng)被客戶端下達(dá)數(shù)據(jù)集管理指令刪除了,讀到甚么數(shù)據(jù)并不重要。但讀者要知道,一個儲存裝置必須要有數(shù)據(jù)完整(data integrity)的特性,讀取的數(shù)據(jù)如果會隨著時間的變動而變動,該裝置就稱不上擁有數(shù)據(jù)完整的特性。讀者也許還會續(xù)問,既然邏輯區(qū)塊地址1、2的數(shù)據(jù)已經(jīng)被客戶端下達(dá)數(shù)據(jù)集管理指令給刪除了,客戶端就不會再去讀取這些地址的數(shù)據(jù)了。要知道,客戶端系統(tǒng)不勝枚舉,客戶端的程序不會再去讀取這些地址的數(shù)據(jù)是無法保證的。例如儲存裝置被用于組成獨(dú)立硬盤冗余陣列(Redundant Array of Independent Disks, RAID),其中一個硬盤發(fā)生了我們所描述的問題,這些被數(shù)據(jù)集管理指令刪除的數(shù)據(jù)就會被讀取.
邏輯物理塊映射表與數(shù)據(jù)的一致性一直都是固態(tài)硬盤設(shè)計上存在的問題。市場上充斥著成千成百的固態(tài)硬盤產(chǎn)品,對那些不曾思考過這個問題的設(shè)計商,質(zhì)量堪憂。一般的固態(tài)硬盤買家多以訪問速度快慢做為購買的考慮因素。但聰明的讀者在選購固態(tài)硬盤時應(yīng)該花點(diǎn)時間了解該產(chǎn)品的設(shè)計商,是否如大心電子,有固態(tài)硬盤領(lǐng)先的技術(shù)質(zhì)量。
-
閃存
+關(guān)注
關(guān)注
16文章
1790瀏覽量
114971 -
固態(tài)硬盤
+關(guān)注
關(guān)注
12文章
1465瀏覽量
57406
原文標(biāo)題:一種引發(fā)固態(tài)硬盤映射表不正確的情境
文章出處:【微信號:SSDFans,微信公眾號:SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論