掌桥专利:专业的专利平台
掌桥专利
首页

一种固态存储设备坏块表的生成与维护方法

文献发布时间:2023-06-19 13:46:35


一种固态存储设备坏块表的生成与维护方法

技术领域

本发明涉及存储器技术领域,具体是一种固态存储设备坏块表的生成与维护方法。

背景方法

固态存储设备(SSD)具有容量大、速度块、体积小、抗干扰能力强等优点,可以为服务器主机等提供廉价高效的大规模存储解决方案,因此受到广泛应用。其内部使用的存储介质——闪存(NAND Flash)颗粒是一种非易失性存储器。

一块SSD上的NAND Flash颗粒按照组织结构一般可划分为Channel、CE(Target)、LUN、Block、WordLine、Page、DataFrame等层次,其中Block(块)是擦除的最小单位,对已写入数据的块进行回收重复利用时,必须先擦除再写,而不能覆盖写。块写入/擦除操作(P/E)循环的次数会影响NAND Flash颗粒的寿命,随着P/E次数的增多,块的性能或稳定性会逐渐变差,成为坏块或弱块。如果SSD固件像访问普通块一样对坏块进行读写,存储数据的正确性就无法得到保障,因此需要建立坏块表对NAND Flash颗粒中的块进行鉴别。

SSD坏块分为原厂坏块和使用过程中新增的坏块,前者在NAND Flash颗粒出厂时就已被做了特殊标记,可通过特定手段直接识别出来。但对于后者,由于是逐渐磨损产生的,其与普通块之间并没有非常清晰的界限,因此无法保证SSD固件能准确识别出来,有时需要专业人员现场鉴定出错后才能确认。对于这种情况,维护坏块表是比较麻烦的,因为它一般是存放于SSD的内存中,直接修改不方便。

发明内容

针对现有技术的缺陷,本发明提供一种固态存储设备坏块表的生成与维护方法,可通过该方法直观、方便地手动新增坏块条目进行维护。

为了解决所述技术问题,本发明采用的技术方案是:一种固态存储设备坏块表的生成与维护方法,包括以下步骤:

S01)、执行SSD全盘坏块扫描命令,调用固件中的坏块扫描子程序,扫描出的坏块信息以链表形式记录在SSD内存指定区域建立的临时坏块表中,同时将扫描出的坏块信息输出到与之连接的上位机日志文件中;

S02)、将SSD内存中建立的临时坏块表根据存储组织结构转换成掩码位图格式文件,用内存转储命令导出到上位机;

此处“临时坏块表”即指步骤S01)中的坏块扫描程序创建的以链表形式保存的坏块信息,该方式不利于快速判定某给定块是否为坏块(需要遍历比对)且占用较多空间,因此需要对临时坏块表的格式进行转化。

“存储组织结构”即指SSD中Channel、CE、LUN的数量,后文中有提到。

此处的“掩码位图格式”即用1个Bit位0或1代表某个Block是否为坏块的格式,其克服了临时坏块表不方便检索和体积大的问题。

“内存转储命令”是将给定起始地址和范围的SSD内存原始数据通过Ymodem或其他通信协议导出到外部(上位机),并保存成文件的串口调试命令。上位机串口工具通常只支持以字符形式进行I/O交互,若要直接传输二进制数据(掩码位图格式的坏块表)需要用到内存转储命令。

S03)、利用脚本解析串口解析上位机日志文本中的坏块记录项,提取包括块物理地址、坏块总数在内的信息,以同样格式生成二进制掩码位图格式文件;

S04)、将以上两步生成的掩码位图格式文件进行对比,检验是否匹配,若不一致则重复步骤S01)至步骤S03),若匹配则将文本格式坏块表在上位机上保存;

S05)、当有新增坏块的需求时,修改以上位机日志文本格式保存的坏块表,将新增坏块条目以字符串形式添加到其中并更新坏块总数,再利用脚本解析文本文件,按照位映射规则重新生成图格式的Bin坏块表;

S06)、将更新后的Bin格式坏块表重新写入到SSD内存中。

进一步的,步骤S01中,扫描出的坏块信息通过串口以文本形式打印到上位机日志文本中。

进一步的,扫描过程中得到的坏块信息以Block编号为索引的有序链表形式保存在临时坏块表中,并通过调试串口将包括坏块物理地址的数据以文本的形式实时打印输出到上位机终端的日志文件中,每条记录保持统一格式,格式为:Index: A, Channel: B,CE:B, LUN: D, Block: E, xxx,含义为Block E下的LUN D下的CE B下的Channel A对应的坏块信息,xxx为具体的坏块信息,是一串二进制序列,0表示非坏块,1表示坏块。

进一步的,步骤S02中,转换后的掩码位图格式文件结合存储组织结构按照SuperBlock序号递增的方式依次排列,然后在掩码序列前插入文件头结构段用于区分坏块表类型。

文件头结构段应包括坏块表文件标识符、SSD存储组织结构、闪存颗粒类型及所含的SuperBlock总数。

进一步的,步骤S03中,解析上位机日志文本的基本过程为:读取扫描程序运行期间的串口日志,从中提取SSD存储组织结构、Block总数及坏块总数,根据以上信息新建与日志文本同名的Bin格式坏块表,写入头结构并初始化全部Block标记位为假,后用正则表达式逐条解析坏块记录条目文本,提取出坏块所属的Channel、CE、LUN及Block序号,然后根据存储组织结构计算出此坏块的标记位在掩码位图中的偏移位置,并利用OR位运算将偏移位置处的坏块标记位标为真;

脚本处理完所有坏块记录项后,判断已解析的条目数是否与日志中给出的坏块总数相等,以检验记录文本是否完整,若一致则保存Bin文件,否则报告错误并废弃解析结果。

进一步的,偏移可按以下公式求出:

字节偏移:Byte_Ofs = 16 × BLK + 8 × LUN + CE,位偏移:Bit_Ofs = CHAN,

其中,LUN、CE、CHAN取值范围分别为0~1、0~7、0~7,BLK则为Block的序号,LUN、CE分别为LUN、CE的序号, CHAN为Channel的序号。

进一步的,步骤S04中,通过检验两者哈希值是否匹配来判断步骤S02)和步骤S03)生成的掩码位图格式文件是否匹配。

本发明的有益效果:

通过以文本形式记录坏块条目并配合脚本解析生成Bin文件的方式,可更容易地实现坏块表的离线维护,当SSD实际使用过程中发现不稳定、性能变弱的Flash存储块但固件未能将其识别为坏块时,如果经人工分析能确定其为坏块,可通过该方法直观、方便地手动新增坏块条目进行维护。此外,导出坏块表到上位机的过程中,通过对比直接输出的Bin文件和根据记录文本解析生成的Bin文件,可确保扫描结果的正确性和稳定性,避免缺失遗漏。

附图说明

图1为本方法的流程图;

图2为SSD的存储组织结构为8Channel×8CE×2LUN时,用本方法生成的位图格式坏块表中坏块标志位排列示意图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步的说明。

实施例1

本实施例公开一种固态存储设备坏块表的生成与维护方法,如图1所示,包括以下步骤:

S01)、通过SSD板卡的调试串口向SSD发送坏块扫描命令,运行固件中的坏块扫描程序实例。根据挂载的NAND Flash颗粒的型号,确定扫描边界(颗粒含有的Block总数,及SSD的Channel、CE数),选择对应的坏块判别算法(尝试擦除、无数据写并检查颗粒响应状态或读取特定页上的坏块标记),申请并初始化一块内存用于存放坏块标记信息。

S02)、扫描过程中得到的坏块信息以Block编号为索引的有序链表形式保存在申请的临时内存空间中,并通过调试串口将坏块的块物理地址(PBA)等数据以文本的形式实时输出打印到上位机终端的日志文件中,每条记录保持统一格式,比如“Index: A,Channel: B, CE:B, LUN: D, Block: E, xxx”,含义为Block E下的LUN D下的CE B下的Channel A对应的坏块信息,xxx为具体的坏块信息,是一串二进制序列,0表示非坏块,1表示坏块,每行为一条记录。注意保证日志文件内容的完整性(抓取扫描程序运行开始到结束期间的全部串口输出)。

S03)、颗粒扫描完成后,SSD固件程序遍历内存中建立的坏块记录链表,将这种用于临时保存信息的数据结构转换成易于查询的掩码位图格式,每个比特位代表某一Block是否为坏块(假表示非坏块,真为坏块),并结合存储组织结构(Channel、CE、LUN的数量)按照SuperBlock(整个SSD中各LUN下序号相同的Block组成的集合)序号递增的方式依次排列(图2给出了SSD含有8个Channel,每Channel下有8个CE,每CE下有2个LUN时的坏块标志位排列示例)。然后在掩码序列前插入文件头结构段用于区分坏块表类型(文件头结构段应包括坏块表文件标识符(比如ASCII码"BBT")、SSD存储组织结构、闪存颗粒类型及所含的SuperBlock总数等信息)。

S04)、调用固件的内存转储命令,通过Ymodem方式将SSD内存中的上述格式坏块表传输到上位机,并保存成Bin文件到本地。

S05)、在上位机上运行坏块表文本解释脚本,读取扫描程序运行期间的串口日志,从中提取SSD存储组织结构、Block总数及坏块总数,根据以上信息新建与日志文本同名的Bin格式坏块表,写入头结构并初始化全部Block标记位为假(非坏块)。之后用正则表达式逐条解析坏块记录条目文本,提取出坏块所属的Channel、CE、LUN及Block序号,然后根据存储组织结构计算出此坏块的标记位在掩码位图中的偏移位置,并利用OR位运算将偏移位置处的坏块标记位标为真。以图2的格式为例,偏移可按以下公式求出:

字节偏移:Byte_Ofs = 16 × BLK + 8 × LUN + CE,位偏移:Bit_Ofs = CHAN

其中,LUN、CE、CHAN取值范围分别为0~1、0~7、0~7,BLK则为Block的序号。

脚本处理完所有坏块记录项后,判断已解析的条目数是否与日志中给出的坏块总数相等,以检验记录文本是否完整。若一致则保存Bin文件,否则报告错误并废弃解析结果。

S06)、使用文件对比工具比较Ymodem方式直接导出的和脚本解析生成的坏块表Bin文件,检验两者哈希值是否匹配,不一致需要重新扫描坏块后再次确认,若匹配则将文本格式坏块表在上位机上保存。

S07)、当SSD使用中发现新坏块或弱块但固件无法识别时,将新增坏块条目追加到文本格式保存的坏块表中并更新坏块总计数值,重做步骤S05)生成新的Bin格式坏块表,配合固件通过Ymodem方式重新写入到SSD内存对应地址中,并同步替换掉在Flash颗粒中存储的旧坏块表副本。

以上描述的仅是本发明的基本原理和优选实施例,本领域技术人员根据本发明做出的改进和替换,属于本发明的保护范围。

技术分类

06120113806089