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