點(diǎn)擊這里聯(lián)系客服銷售客服
銷售客服
點(diǎn)擊這里聯(lián)系客服售前客服
售前客服
點(diǎn)擊這里聯(lián)系客服售后維護(hù)
售后維護(hù)
首頁(yè) > 文章詳細(xì)

VNR 閃存數(shù)據(jù)恢復(fù)工具:NAND 閃存中的 ECC

發(fā)布日期:2025-01-04 17:50:37 【關(guān)閉】
摘要:VNR 閃存數(shù)據(jù)恢復(fù)工具:NAND 閃存中的 ECC

所有現(xiàn)代閃存設(shè)備都存在因 NAND 芯片質(zhì)量差而導(dǎo)致的數(shù)據(jù)完整性問(wèn)題。這個(gè)問(wèn)題被稱為“位錯(cuò)誤”。當(dāng)文件存儲(chǔ)區(qū)域出現(xiàn)位錯(cuò)誤時(shí),文件就會(huì)損壞且無(wú)法讀取。這些位錯(cuò)誤很容易在多媒體文件上出現(xiàn),如下圖所示。

NAND 存儲(chǔ)器中存在多種位錯(cuò)誤來(lái)源(電子元件間干擾、電荷泄漏、讀取干擾等),并且有多種減少位錯(cuò)誤的方法(糾錯(cuò)碼、功率操作、內(nèi)置讀取重試算法)。糾錯(cuò)碼是保護(hù)數(shù)據(jù)并在發(fā)生錯(cuò)誤時(shí)修復(fù)數(shù)據(jù)的最有效方法,因此所有閃存控制器都使用內(nèi)置 ECC 編碼器/解碼器。在數(shù)據(jù)記錄(編程)過(guò)程中,控制器生成特殊的校驗(yàn)和并將其存儲(chǔ)在每個(gè)頁(yè)內(nèi)。當(dāng)用戶請(qǐng)求數(shù)據(jù)(頁(yè)讀取操作)時(shí),控制器檢查每個(gè)頁(yè)的數(shù)據(jù)完整性,如果檢測(cè)到錯(cuò)誤則執(zhí)行糾正。

BCH ECC 代碼是閃存設(shè)備中最常用的代碼之一。 BCH算法是可調(diào)的并且有一組參數(shù)。這些參數(shù)在控制器的固件中預(yù)先編程,并且因型號(hào)而異。當(dāng)控制器損壞時(shí),有關(guān)參數(shù)的信息會(huì)丟失,但 ECC 校驗(yàn)和仍然保留在 NAND 芯片的每個(gè)頁(yè)內(nèi)。 Visual Nand Reconstructor 有一個(gè)軟件 BCH 解碼器,可使用剩余的 ECC 校驗(yàn)和執(zhí)行數(shù)據(jù)糾錯(cuò)。一旦提取出物理鏡像(或者在刪除 BCR 元素后出現(xiàn)壞列),就可以通過(guò) ECC 算法進(jìn)行糾錯(cuò)。有時(shí)數(shù)據(jù)應(yīng)該在 ECC 之前進(jìn)行非異或運(yùn)算。

ECC 結(jié)構(gòu)、有效負(fù)載和奇偶校驗(yàn)區(qū)域

閃存的頁(yè)通常由數(shù)據(jù)存儲(chǔ)區(qū)、備用區(qū)和校驗(yàn)碼區(qū)組成。幾乎在每種情況下,這些區(qū)域都會(huì)重復(fù)多次,具體取決于頁(yè)大小和頁(yè)結(jié)構(gòu)。對(duì)于 ECC,僅存在兩個(gè)區(qū)域 - 有效負(fù)載和奇偶校驗(yàn)。奇偶校驗(yàn)是 ECC 區(qū)域本身,有效負(fù)載可能包含數(shù)據(jù)區(qū)域或帶有備用區(qū)域的數(shù)據(jù)區(qū)域,具體取決于控制器型號(hào)。每個(gè)有效負(fù)載和奇偶校驗(yàn)形成一個(gè)代碼字。一頁(yè)可以包含多個(gè)代碼字(1,4,8,16..)。

代碼字的數(shù)量取決于頁(yè)大小和有效負(fù)載+奇偶校驗(yàn)區(qū)域的數(shù)量。

VNR - 自動(dòng)檢測(cè) ECC

VNR 具有內(nèi)置的自動(dòng)檢測(cè) ECC 機(jī)制(針對(duì)數(shù)據(jù)庫(kù)中的控制器和代碼字)。要啟動(dòng) ECC 自動(dòng)檢測(cè),只需按工具欄上的“查找代碼字”按鈕。

如果控制器品牌未知,請(qǐng)選擇第一個(gè)選項(xiàng)。如果控制器供應(yīng)商已知,則可以通過(guò)選擇控制器供應(yīng)商來(lái)縮小搜索范圍。

按“查找”按鈕開始分析,界面會(huì)顯示各代碼字的可能性。

代碼字會(huì)按概率自動(dòng)排序,這里有一些需要注意的事項(xiàng):
  1. 代碼名稱(分別由控制器型號(hào)、頁(yè)大小、ECC 大小、代碼字?jǐn)?shù)組成)
  2. 結(jié)果(概率)。粗體值表示所有碼字都匹配,否則僅測(cè)試第一個(gè)代碼字。

通常選擇ECC最重要的標(biāo)準(zhǔn)是該值是粗體且高于80%。
控制器型號(hào)不太重要,因?yàn)槟承┛刂破骺赡苁褂孟嗤?ECC 代碼。
頁(yè)大小不必精確,但代碼字的數(shù)量和大小應(yīng)該匹配。 (例如上圖中前三個(gè)粗體值屬于相同的代碼)。

為了檢查代碼是否有效,請(qǐng)?jiān)趨?shù)選項(xiàng)卡中打開 ECC 映射,向下滾動(dòng)并確保大部分頁(yè)為綠色。

ECC 和壞列

許多 TLC NAND 芯片都有壞列,很重要的一點(diǎn)是,在 ECC 自動(dòng)檢測(cè)之前要使用 BCR 元素刪除它們(并使用 BCR 作為物理鏡像的來(lái)源進(jìn)行進(jìn)一步分析)。在刪除壞列期間,應(yīng)特別注意 ECC 結(jié)束的區(qū)域。有些控制器在ECC代碼末尾留下很多位“1”,看起來(lái)像壞列,但實(shí)際上包含ECC代碼的位很少。

例如:

上圖中只有 1 位 ECC,如果將其作為壞列刪除,可能會(huì)影響糾錯(cuò)效率。

異或之前/之后的 ECC

大多數(shù)控制器從加擾(異或)數(shù)據(jù)生成 ECC(奇偶校驗(yàn)),而有些控制器則根據(jù)原始數(shù)據(jù)生成 ECC(奇偶校驗(yàn))。因此有時(shí)需要檢查 ECC 是在 XOR 之前還是之后起作用。此外,當(dāng)奇偶校驗(yàn)被異或時(shí),可能需要在異或之后使用ECC元素。

物理鏡像校正

物理鏡像校正是邏輯鏡像重建中的強(qiáng)制性步驟。 VNR 有幾個(gè)選項(xiàng)可以糾正轉(zhuǎn)儲(chǔ):

  1. 打開 ECC(在參數(shù)選項(xiàng)卡中,在不進(jìn)行物理轉(zhuǎn)儲(chǔ)修改的情況下打開 ECC。創(chuàng)建標(biāo)記表時(shí)對(duì)于 SA 校正非常有用)
  2. 正確轉(zhuǎn)儲(chǔ)(一次性糾正并刪除轉(zhuǎn)儲(chǔ)文件中的位錯(cuò)誤)
  3. 重新讀取轉(zhuǎn)儲(chǔ)(使用讀取重試算法進(jìn)行多遍校正和未校正頁(yè)面重新讀取)

當(dāng)選擇 ECC 元素時(shí),所有這些選項(xiàng)都位于 BCH 工具欄上。


使用 ReRead 轉(zhuǎn)儲(chǔ)選項(xiàng)時(shí),當(dāng)前存儲(chǔ)芯片必須連接到讀卡器。

這里有幾個(gè)選項(xiàng):

  1. 起始地址
  2. 最大通過(guò)次數(shù)
  3. 重試讀取(當(dāng)芯片支持時(shí)自動(dòng)分配Read Retry命令)

不支持的 ECC - 如何創(chuàng)建新代碼

ElcomSoft 定期使用新的 ECC 代碼更新數(shù)據(jù)庫(kù),但內(nèi)存芯片和控制器的組合太多,供應(yīng)商也經(jīng)常更新代碼配置,因此,VNR 具有“代碼字分析”工具,允許暴力破解任何 BCH ECC 代碼字的公式。后面的代碼字可以根據(jù)頁(yè)結(jié)構(gòu)填充到整個(gè)頁(yè)面。

“代碼字分析”功能位于 ECC 工具欄上。

必須指定一組參數(shù)才能啟動(dòng) ECC 暴力破解過(guò)程。

代碼字分析選項(xiàng)有:

  1. 頁(yè)大小 - 芯片/轉(zhuǎn)儲(chǔ)的頁(yè)大小
  2. Payload - 有效負(fù)載區(qū)域(如果ECC區(qū)域的位置不是很清楚,可以設(shè)置浮動(dòng)邊界)
  3. Parity - 奇偶校驗(yàn)區(qū)域(如果ECC區(qū)域的位置不是很清楚,可以設(shè)置浮動(dòng)邊界)
  4. 多項(xiàng)式:
    1. 通過(guò)多項(xiàng)式 - 對(duì) BCH ECC 的已知多項(xiàng)式進(jìn)行暴力破解
    2. 逐級(jí) - 對(duì) BCH ECC 的所有現(xiàn)有多項(xiàng)式進(jìn)行暴力破解(過(guò)程較長(zhǎng),可能需要 1 - 24 小時(shí))
  5. 操作:
    1. 無(wú)操作 - ECC 沒(méi)有任何轉(zhuǎn)換
    2. 反轉(zhuǎn)
    3. 位旋轉(zhuǎn)
    4. 反轉(zhuǎn)和旋轉(zhuǎn) - ECC 具有位旋轉(zhuǎn)且反轉(zhuǎn)
  6. 地址
    1. 轉(zhuǎn)儲(chǔ) - VNR 在自動(dòng)選擇的塊上測(cè)試每個(gè)組合
    2. 固定 - VNR 在特定偏移處測(cè)試每個(gè)組合

代碼字分析測(cè)試所有組合,以便找到正確的 ECC 代碼。

例如:

頁(yè)面大小 = 8640

頁(yè)結(jié)構(gòu): DA(1024)+SA(8)+ECC(42)+7x[DA(1024)+SA(4)+ECC(42)]+EMPTY(76)

第一個(gè)代碼字 = 有效負(fù)載(1032) + 奇偶校驗(yàn)(42)

當(dāng)找到第一個(gè)代碼字的 ECC 匹配設(shè)置時(shí),其權(quán)重通常高于 20。要添加代碼字,只需選擇匹配的設(shè)置,然后按“添加”按鈕。

添加第一個(gè)代碼字后,需要根據(jù)頁(yè)結(jié)構(gòu)添加所有其他代碼字。代碼字分析器的主要功能是查找代碼字的參數(shù),而不是整個(gè)ECC結(jié)構(gòu)。該芯片頁(yè)大小為 8640 ,因此很容易注意到還有 7 個(gè)代碼字需要添加。

要根據(jù)前一個(gè)代碼字自動(dòng)添加這 7 個(gè)缺失的代碼字,請(qǐng)單擊下面突出顯示的按鈕

如果備用區(qū)域大小因代碼字而異,則需要根據(jù)頁(yè)結(jié)構(gòu)調(diào)整后續(xù)代碼字。要編輯代碼字,請(qǐng)選擇它并單擊“編輯”按鈕。


第二個(gè)和其他代碼字的有效負(fù)載區(qū)域小 4 個(gè)字節(jié)。調(diào)整完畢后,單擊“確定”添加此代碼字。

所有其他代碼字都具有相同的結(jié)構(gòu),因此可以輕松地用當(dāng)前代碼字來(lái)填充。


添加所有代碼字后,就可以檢查 ECC 映射了。

大多數(shù)頁(yè)的綠色地圖意味著代碼字可以正常工作。

如果大多數(shù) ECC 映射元素都是紅色,則意味著 ECC 不正確,必須重新檢查代碼結(jié)構(gòu)。