看了很多壞塊管理的文章,加上自己的理解,把整個壞塊管理做了個總結。
壞塊分類
1、出廠壞塊
又叫初始壞塊,廠商會給點最小有效塊值(NVB,mininum number of valid blocks)。
2、新增壞塊
使用過程中因為磨損造成的新增壞塊,或者使用壞塊。
3、假性壞塊
異常掉電等原因被主控誤判的假性壞塊。
壞塊判斷
1、對於出廠壞塊的判斷
掃描廠商指定地址所對應的byte是否有0xFF標志,若沒有0xFF則為壞塊。
2、對於新增壞塊的判斷
(1)當執行擦除指令時出錯;
(2)當執行寫命令時出錯;
(3)當執行讀取命令時出錯,而且bit的錯誤超過ECC的糾錯能力;
那么,該Block將被判斷為壞塊。
壞塊管理
1、建立和更新壞塊表(Bad Block Table)
對出廠壞塊和新增壞塊集中(或分別)管理。
出廠壞塊被標識在SA區中;在讀取閃存內所有的SA區域后,壞塊表就被建立;當壞塊表創建后,主控會把壞塊表保存在某個好的塊里,每次重啟后,主控會從那個塊里把表調用進緩存(SDRAM)里。
2、壞塊表內容
(1)用1bit標識:0表示好塊,1表示壞塊;
(2)用2bit標識:00表示好塊,01表示Program失敗的壞塊,10表示Read失敗的壞塊,11表示Erase失敗的壞塊。
3、壞塊不建議擦除
由於在使用中會產生壞塊,所以SSD的主控在每次寫入、擦除、讀取等操作后都要檢查塊的狀態;其中刪除操作前也需要檢查塊的狀態,因為壞塊信息被擦除之后無法恢復,所以不建議擦除壞塊,擦除前需確保不是壞塊。
4、壞塊管理策略
(1)壞塊跳過策略:遇到壞塊跳過,存放進好塊里。
(2)壞塊替換策略:替換之后,FTL會將壞塊地址重新映射到好塊地址。
基於NAND Flash來講,用SA區中的好塊替換壞塊。Spare Area(SA區)一般用來標記壞塊,和保存對main區數據的ECC校驗碼。是基於NAND Flash的概念。
基於SSD來講,用OP中的free block替換壞塊。Over Provisioning(OP,預留空間)不僅僅只是用來保證垃圾回收的正常完成,還存儲着SSD內部的系統數據(包括:出廠壞塊信息、SSD固件、Mapping Table等)。是基於SSD的概念。
OP大小為所有64bytes的總和。