VNR 闪存数据恢复工具:NAND 闪存中的 ECC

B站影视 2025-01-02 15:27 2

摘要:所有现代闪存设备都存在因 NAND 芯片质量差而导致的数据完整性问题。这个问题被称为“位错误”。当文件存储区域出现位错误时,文件就会损坏且无法读取。这些位错误很容易在多媒体文件上出现,如下图所示。

所有现代闪存设备都存在因 NAND 芯片质量差而导致的数据完整性问题。这个问题被称为“位错误”。当文件存储区域出现位错误时,文件就会损坏且无法读取。这些位错误很容易在多媒体文件上出现,如下图所示。

NAND 存储器中存在多种位错误来源(电子元件间干扰、电荷泄漏、读取干扰等),并且有多种减少位错误的方法(纠错码、功率操作、内置读取重试算法)。纠错码是保护数据并在发生错误时修复数据的最有效方法,因此所有闪存控制器都使用内置 ECC 编码器/解码器。在数据记录(编程)过程中,控制器生成特殊的校验和并将其存储在每个页内。当用户请求数据(页读取操作)时,控制器检查每个页的数据完整性,如果检测到错误则执行纠正。

BCH ECC 代码是闪存设备中最常用的代码之一。 BCH算法是可调的并且有一组参数。这些参数在控制器的固件中预先编程,并且因型号而异。当控制器损坏时,有关参数的信息会丢失,但 ECC 校验和仍然保留在 NAND 芯片的每个页内。 Visual Nand Reconstructor 有一个软件 BCH 解码器,可使用剩余的 ECC 校验和执行数据纠错。一旦提取出物理镜像(或者在删除 BCR 元素后出现坏列),就可以通过 ECC 算法进行纠错。有时数据应该在 ECC 之前进行非异或运算。

闪存的页通常由数据存储区、备用区和校验码区组成。几乎在每种情况下,这些区域都会重复多次,具体取决于页大小和页结构。对于 ECC,仅存在两个区域 - 有效负载和奇偶校验。奇偶校验是 ECC 区域本身,有效负载可能包含数据区域或带有备用区域的数据区域,具体取决于控制器型号。每个有效负载和奇偶校验形成一个代码字。一页可以包含多个代码字(1,4,8,16..)。

代码字的数量取决于页大小和有效负载+奇偶校验区域的数量。

VNR 具有内置的自动检测 ECC 机制(针对数据库中的控制器和代码字)。要启动 ECC 自动检测,只需按工具栏上的“查找代码字”按钮。

如果控制器品牌未知,请选择第一个选项。如果控制器供应商已知,则可以通过选择控制器供应商来缩小搜索范围。

按“查找”按钮开始分析,界面会显示各代码字的可能性。

代码名称(分别由控制器型号、页大小、ECC 大小、代码字数组成)结果(概率)。粗体值表示所有码字都匹配,否则仅测试第一个代码字。

通常选择ECC最重要的标准是该值是粗体且高于80%。
控制器型号不太重要,因为某些控制器可能使用相同的 ECC 代码。
页大小不必精确,但代码字的数量和大小应该匹配。 (例如上图中前三个粗体值属于相同的代码)。

为了检查代码是否有效,请在参数选项卡中打开 ECC 映射,向下滚动并确保大部分页为绿色。

许多 TLC NAND 芯片都有坏列,很重要的一点是,在 ECC 自动检测之前要使用 BCR 元素删除它们(并使用 BCR 作为物理镜像的来源进行进一步分析)。在删除坏列期间,应特别注意 ECC 结束的区域。有些控制器在ECC代码末尾留下很多位“1”,看起来像坏列,但实际上包含ECC代码的位很少。

例如:

上图中只有 1 位 ECC,如果将其作为坏列删除,可能会影响纠错效率。

大多数控制器从加扰(异或)数据生成 ECC(奇偶校验),而有些控制器则根据原始数据生成 ECC(奇偶校验)。因此有时需要检查 ECC 是在 XOR 之前还是之后起作用。此外,当奇偶校验被异或时,可能需要在异或之后使用ECC元素。

物理镜像校正是逻辑镜像重建中的强制性步骤。 VNR 有几个选项可以纠正转储:

打开 ECC(在参数选项卡中,在不进行物理转储修改的情况下打开 ECC。创建标记表时对于 SA 校正非常有用)正确转储(一次性纠正并删除转储文件中的位错误)重新读取转储(使用读取重试算法进行多遍校正和未校正页面重新读取)

当选择 ECC 元素时,所有这些选项都位于 BCH 工具栏上。

使用 ReRead 转储选项时,当前存储芯片必须连接到读卡器。

这里有几个选项:

起始地址最大通过次数重试读取(当芯片支持时自动分配Read Retry命令)

ElcomSoft 定期使用新的 ECC 代码更新数据库,但内存芯片和控制器的组合太多,供应商也经常更新代码配置,因此,VNR 具有“代码字分析”工具,允许暴力破解任何 BCH ECC 代码字的公式。后面的代码字可以根据页结构填充到整个页面。

“代码字分析”功能位于 ECC 工具栏上。

必须指定一组参数才能启动 ECC 暴力破解过程。

代码字分析选项有:

页大小 - 芯片/转储的页大小Payload - 有效负载区域(如果ECC区域的位置不是很清楚,可以设置浮动边界)Parity - 奇偶校验区域(如果ECC区域的位置不是很清楚,可以设置浮动边界)多项式:通过多项式 - 对 BCH ECC 的已知多项式进行暴力破解逐级 - 对 BCH ECC 的所有现有多项式进行暴力破解(过程较长,可能需要 1 - 24 小时)操作: 无操作 - ECC 没有任何转换反转 位旋转反转和旋转 - ECC 具有位旋转且反转地址转储 - VNR 在自动选择的块上测试每个组合固定 - VNR 在特定偏移处测试每个组合

代码字分析测试所有组合,以便找到正确的 ECC 代码。

例如:

页面大小 = 8640

页结构: DA(1024)+SA(8)+ECC(42)+7x[DA(1024)+SA(4)+ECC(42)]+EMPTY(76)

第一个代码字 = 有效负载(1032) + 奇偶校验(42)

当找到第一个代码字的 ECC 匹配设置时,其权重通常高于 20。要添加代码字,只需选择匹配的设置,然后按“添加”按钮。

添加第一个代码字后,需要根据页结构添加所有其他代码字。代码字分析器的主要功能是查找代码字的参数,而不是整个ECC结构。该芯片页大小为 8640 ,因此很容易注意到还有 7 个代码字需要添加。

要根据前一个代码字自动添加这 7 个缺失的代码字,请单击下面突出显示的按钮

如果备用区域大小因代码字而异,则需要根据页结构调整后续代码字。要编辑代码字,请选择它并单击“编辑”按钮。

第二个和其他代码字的有效负载区域小 4 个字节。调整完毕后,单击“确定”添加此代码字。

所有其他代码字都具有相同的结构,因此可以轻松地用当前代码字来填充。

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

大多数页的绿色地图意味着代码字可以正常工作。

如果大多数 ECC 映射元素都是红色,则意味着 ECC 不正确,必须重新检查代码结构。

来源:瑶哥科技

相关推荐