一种坏道修复方法及装置制造方法

文档序号:6765130阅读:181来源:国知局
一种坏道修复方法及装置制造方法【专利摘要】本发明实施例公开了一种坏道修复方法及装置,涉及计算机领域,解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。具体方案为:SSD接收主机发送的第一写操作指令,根据第一写操作指令中包含的第一扇区的LBA读取第一扇区所在的物理页的数据;当读取物理页的数据失败时,在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据;根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据;根据物理页的地址,将存储空间中的数据写入SSD的闪存中,以完成对第一扇区的修复。本发明用于固态硬盘坏道修复的过程中。【专利说明】一种坏道修复方法及装置【
技术领域
】[0001]本发明涉及计算机领域,尤其涉及一种坏道修复方法及装置。【
背景技术
】[0002]硬盘是计算机的主要存储媒介,其中固态硬盘(SolidStateDisk,SSD)是硬盘中比较常用的一种,SSD是一种利用固态电子存储芯片阵列制成的硬盘,其主要利用Flash芯片作为存储介质来存储数据,目前比较常见的Flash芯片为NandFlash。在目前常见的NandFlash中,其每个片选信号(ChipEnable,CE)对应8192个块(Block),每个Block包含128个页(Page),其中Page是NandFlash进行数据读写操作的最小单元,每个Page大小一般为4K字节(Byte),而主机对硬盘进行数据读写操作的最小单元为I个扇区(Sector),每个Sector的大小一般情况下为512B,综上所述可以得到的是,主机进行读写操作的最小单元与NandFlash进行数据读写操作的最小单元不一致,在主机进行写操作时,若主机写ANandFlash的数据的小于一个Page时,通过采用预填充的方案才可以将数据成功写入NandFlash中。[0003]众所周知,硬盘是很容易发生故障的,其中无法纠正的ECC编码错误(UncorrectableErrorCorrectingCodeerror,UNC)是最常见的故障之一。目前常米用独立磁盘冗余阵列(redundantarrayofindependentdisks,RAID)机制来解决UNC问题,当硬盘中的某个盘发生UNC时,可以通过读取其他盘的信息对发生UNC的位置进行重新写入以实现修复的目的。但是在采用NandFlash为存储介质的硬盘中,由于主机进行数据读写操作的最小单兀为I个Sector(如,I个Sector为512B),而NandFlash的最小写入单元为I个Page(如,I个Page为4KB),所以需采用预填充的方案才可以成功的将数据重新写入发生UNC的位置进行修复。在整个Page发生UNC的情况下,当主机以Sector为单位进行修复时,硬盘接收主机针对某个Sector的写入指令时,需要将该Sector所在的Page读取到随机存取存储器(RandomAccessMemory,RAM)中,但是由于整个Page发生了UNC,读取会发生失败,这样硬盘会放弃本次写入操作,并向主机回复写入成功,此时主机会再次针对该Sector的进行读取操作,以确认主机对该Sector的修复操作是否成功。由于硬盘实际上并没有成功将数据写入该Sector,那么主机读取发生失败,会判断该Sector所在盘故障(实际该盘仍然可用),最终将该盘踢除,导致RAID降级,影响了系统的可靠性。【
发明内容】[0004]本发明的实施例提供一种坏道修复的方法及装置,解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。[0005]为达到上述目的,本发明的实施例采用如下技术方案:[0006]本发明的第一方面,提供一种坏道修复方法,包括:[0007]固态硬盘(SolidStateDisk,SSD)接收主机发送的第一写操作指令,其中,所述第一写操作指令包含有第一扇区的逻辑扇区地址(LogicalBlockAddressing,LBA)以及需要写入所述第一扇区的数据;[0008]根据所述第一扇区的LBA读取所述第一扇区所在的物理页的数据;[0009]当读取所述物理页的数据失败时,在缓存中分配与所述物理页大小相同的存储空间,并将所述存储空间的数据设置为预设数据;[0010]根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据;[0011]根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中,以完成对所述第一扇区的修复。[0012]结合第一方面,在一种可能的实现方式中,所述存储空间包含至少两个存储区间,其中每个存储区间对应所述物理页中的一个扇区;[0013]所述方法还包括:[0014]当读取所述物理页的数据失败时,设置所述存储空间中的每个存储区间的标识为第一标识,其中,所述第一标识用于表示存储区间中的数据为失效数据;[0015]在所述根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据之后,还包括:[0016]将所述与所述第一扇区对应存储区间的标识设置为第二标识;其中,所述第二标识用于表示所述存储区间中的数据为有效数据;[0017]将所述存储空间中的每个存储区间的标识写入所述SSD的冗余空间中。[0018]结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在所述根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中之后,还包括:[0019]接收所述主机发送的第二写操作指令,其中,所述第二写操作指令中包含有所述物理页中的第二扇区的LBA以及与需要写入所述第二扇区的数据;[0020]根据所述第二扇区的LBA将所述物理页的数据和所述物理页中的每个扇区的标识读取至缓存中;[0021]根据所述第二扇区的LBA,将所述第二扇区的预设数据更新为所述需要写入所述第二扇区的数据,并将所述第二扇区的标识设置为第二标识;[0022]将更新后的所述物理页的数据以及所述物理页中的每个扇区的标识写入所述SSD的闪存中,以完成对所述第二扇区的修复,其中,所述物理页中的每个扇区的标识被写入所述SSD的冗余空间中。[0023]结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:[0024]接收所述主机发送的读操作指令;其中,所述读取操作指令包含有待读取的扇区的LBA;[0025]根据所述待读取的扇区的LBA获取所述待读取的扇区的标识;[0026]当所述待读取的扇区的标识为第一标识时,向所述主机发送响应消息,其中,所述响应消息用于通知所述主机所述扇区的数据为失效数据。[0027]结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,还包括:[0028]当所述待读取的扇区的标识为第二标识时,读取所述扇区的数据,并将所述扇区的数据发送至所述主机。[0029]本发明的第二方面,提供一种坏道修复装置,包括:[0030]接收模块,用于接收主机发送的第一写操作指令,其中,所述第一写操作指令包含有第一扇区的逻辑扇区地址(LogicalBlockAddressing,LBA)以及需要写入所述第一扇区的数据;[0031]读取模块,用于根据所述接收模块得到的所述第一扇区的LBA读取所述第一扇区所在的物理页的数据;[0032]处理模块,用于当所述读取模块读取所述物理页的数据失败时,在缓存中分配与所述物理页大小相同的存储空间,并将所述存储空间的数据设置为预设数据;[0033]更新模块,用于根据所述接收模块得到的所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据;[0034]写入模块,用于根据所述物理页的地址,将所述存储空间中的数据写入固态硬盘(SolidStateDisk,SSD)的闪存中,以完成对所述第一扇区的修复。[0035]结合第二方面,在一种可能的实现方式中,所述存储空间包含至少两个存储区间,其中每个存储区间对应所述物理页中的一个扇区;[0036]所述装置还包括:[0037]设置模块,还用于当所述读取模块读取所述物理页的数据失败时,设置所述存储空间中的每个存储区间的标识为第一标识,其中,所述第一标识用于表示存储区间中的数据为失效数据;[0038]所述设置模块,还用于在所述更新模块根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据之后,将所述与所述第一扇区对应存储区间的标识设置为第二标识;其中,所述第二标识用于表示所述存储区间中的数据为有效数据;[0039]所述写入模块,还用于将所述存储空间中的每个存储区间的标识写入所述SSD的冗余空间中。[0040]结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,[0041]所述接收模块,还用于在所述写入模块根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中之后,接收所述主机发送的第二写操作指令,其中,所述第二写操作指令中包含有所述物理页中的第二扇区的LBA以及与需要写入所述第二扇区的数据;[0042]所述读取模块,还用于根据所述接收模块得到的所述第二扇区的LBA将所述物理页的数据和所述物理页中的每个扇区的标识读取至缓存中;[0043]所述处理模块,还用于根据所述接收模块得到的所述第二扇区的LBA,将所述第二扇区的预设数据更新为所述需要写入所述第二扇区的数据,并将所述第二扇区的标识设置为第二标识;[0044]所述写入模块,还用于将更新后的所述物理页的数据以及所述物理页中的每个扇区的标识写入所述SSD的闪存中,以完成对所述第二扇区的修复,其中,所述物理页中的每个扇区的标识被写入所述SSD的冗余空间中。[0045]结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,[0046]所述接收模块,还用于接收所述主机发送的读操作指令;其中,所述读取操作指令包含有待读取的扇区的LBA;[0047]所述装置还包括:[0048]获取模块,用于根据所述接收模块得到的所述待读取的扇区的LBA获取所述待读取的扇区的标识;[0049]发送模块,用于当所述获取模块得到的所述待读取的扇区的标识为第一标识时,向所述主机发送响应消息,其中,所述响应消息用于通知所述主机所述扇区的数据为失效数据。[0050]结合第二方面和上述可能的实现方式,在另一种可能的实现方式中,[0051]所述读取模块,还用于当所述获取模块得到的所述待读取的扇区的标识为第二标识时,读取所述扇区的数据,并将所述扇区的数据发送至所述主机。[0052]本发明实施例提供的坏道修复方法及装置,SSD根据接收到的主机发送的第一写操作指令中包含的第一扇区的LBA去读取第一扇区所在的物理页的数据时,若读取物理页的数据失败,则在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据,然后根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为述需要写入第一扇区的数据,最后根据物理页的地址,将存储空间中的数据写入SSD的闪存中。从而解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。【专利附图】【附图说明】[0053]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。[0054]图1为本发明实施例1提供的一种坏道修复方法流程图;[0055]图2为本发明实施例2提供的一种坏道修复方法流程图;[0056]图3为本发明实施例2提供的另一种坏道修复方法流程图;[0057]图4为本发明实施例3提供的一种坏道修复装置组成示意图;[0058]图5为本发明实施例3提供的另一种坏道修复装置组成示意图;[0059]图6为本发明实施例4提供的一种坏道修复装置组成示意图。【具体实施方式】[0060]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0061]现有技术中,当主机以Sector为单位进行修复时,若SSD接收到主机针对某个Sector的写入指令,贝U需要将该Sector所在的Page读取到RAM中,但是由于该Page发生了UNC,读取会发生失败,此时便不能成功修复该Sector,主机会将该盘踢除,导致RAID降级,最终影响了系统的可靠性。[0062]为了克服现有技术的缺陷,本发明实施例提供一种坏道修复方法及装置,具体的参见以下实施例1-实施例4。[0063]实施例1[0064]本发明实施例1提供一种坏道修复方法,如图1所示,该方法可以包括:[0065]101、SSD接收主机发送的第一写操作指令。[0066]其中,当SSD中整个物理页发生UNC,主机需要以单扇区为单位对发生UNC的物理页进行修复时,主机可以向该物理页中的某个扇区写入数据,具体的,主机可以向SSD发送第一写操作指令,此时SSD接收主机发送的第一写操作指令,其中该第一写操作指令包含第一扇区的逻辑扇区地址(LogicalBlockAddressing,LBA)以及与第一扇区的LBA对应的需要写入第一扇区的数据,该第一扇区为发生UNC的物理页包含的扇区中的任意一个。[0067]102、SSD根据第一扇区的LBA读取第一扇区所在的物理页的数据。[0068]其中,当SSD接收到主机发送的第一写操作指令之后,可以根据接收到的第一写操作指令中包含的第一扇区的LBA获取第一扇区所在的物理页的地址,并根据物理页的地址对该物理页的数据进行读取操作。[0069]103、当读取物理页的数据失败时,SSD在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据。[0070]其中,当SSD根据接收到的第一写操作指令包含的第一扇区的LBA对第一扇区所在的物理页的数据进行读取操作时,读取该物理页的数据失败,此时SSD可以直接在缓存中分配与该物理页大小相同的存储空间,并将存储空间的数据设置为预设数据。例如,预设数据为0,则SSD在缓存中将与物理页大小相同的存储空间的数据设置为O。[0071]需要说明的是,在本发明实施例中,预设数据是可以与普通数据区分开的特殊数据,本发明实施例在此对预设数据的具体数值不做限制。[0072]需要说明的是,在本发明实施例中,缓存可以是SSD中的随机存取存储器(RandomAccessMemory,RAM)或只读存储器(ReadOnlyMemory,ROM)等存储器,本发明实施例在此不做限制。[0073]104、SSD根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据。[0074]其中,当SSD在缓存中分配与物理页大小相同的存储空间,并将该存储空间的数据设置为预设数据之后,可以根据接收到的主机发送的第一写操作指令中包含的第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据。[0075]105,SSD根据物理页的地址,将存储空间中的数据写入SSD的闪存中,以完成对第一扇区的修复。[0076]其中,当SSD根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据之后,可以根据物理页的地址,将存储空间中的数据写入SSD的闪存中,覆盖该物理页中原有的数据,此时便完成了对第一扇区的修复。[0077]本发明实施例提供的坏道修复方法,SSD根据接收到的主机发送的第一写操作指令中包含的第一扇区的LBA读取第一扇区所在的物理页的数据,当读取物理页的数据失败时,在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据,然后根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为述需要写入第一扇区的数据,最后根据物理页的地址,将存储空间中的数据写入SSD的闪存中,通过将在缓存中分配的与物理页大小相同的存储空间的数据设置为预设数据,并将与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据,并将更新后的存储空间的数据写入SSD的闪存中替换发生UNC的物理页的原有数据,解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。[0078]实施例2[0079]本发明实施例2提供一种坏道修复方法,如图2所示,该方法可以包括:[0080]201、SSD接收主机发送的第一写操作指令。[0081]其中,当SSD中整个物理页发生UNC,主机需要以单扇区为单位对发生UNC的物理页进行修复时,主机可以向该物理页中的某个扇区写入数据,具体的,主机可以向SSD发送第一写操作指令,此时SSD便可以接收主机发送的第一写操作指令。其中,该第一写操作指令包含第一扇区的LBA以及与第一扇区的LBA对应的需要写入第一扇区的数据,该第一扇区为发生UNC的物理页包含的扇区中的任意一个。[0082]202、SSD根据第一扇区的LBA读取第一扇区所在的物理页的数据。[0083]其中,当SSD接收到主机发送的第一写操作指令之后,可以根据接收到的第一写操作指令中包含的第一扇区的LBA获取第一扇区所在的物理页的地址,并根据物理页的地址对该物理页的数据进行读取操作。[0084]203、当读取物理页的数据失败时,SSD在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据。[0085]其中,当SSD读取物理页的数据失败时,SSD在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据。其中,该存储空间中包含至少两个存储区间,每个存储区间对应物理页中的一个扇区,也就是说将存储空间的数据设置为预设数据具体的是将存储空间中包含的每个存储区间的数据设置为预设数据。[0086]需要说明的是,在本发明实施例中,预设数据是可以与普通数据区分开的特殊数据,本发明实施例在此对预设数据的具体数值不做限制。[0087]204、当读取物理页的数据失败时,SSD设置存储空间中的每个存储区间的标识为第一标识。[0088]其中,该存储空间包含至少两个存储区间,每个存储区间对应物理页中的一个扇区。为了可以区分存储空间中的每个存储区间的数据是否是有效的数据,在本发明实施例中,SSD为存储空间包含的每个存储区间设置了对应的标识。具体的,若SSD读取物理页的数据失败,SSD可以设置存储空间中的每个存储区间的标识为第一标识。其中,存储区间的标识用于表示对应存储区间的数据是否有效,第一标识用于表示对应存储区间的数据为失效数据。[0089]需要说明的是,在步骤202根据第一扇区的LBA对第一扇区所在的物理页的数据进行读取操作,若读取物理页的数据失败时,可以先执行步骤203,然后再执行步骤204;或者也可以先执行步骤204,然后再执行步骤203;或者还可以在读取物理页的数据失败之后,同时执行步骤203和步骤204。也就是说,本发明实施例中对步骤203和步骤204的执行的先后顺序不做限制,通常情况下,也可以同时执行。[0090]205、SSD根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据。[0091]其中,当SSD将在缓存中分配与物理页大小相同存储空间的数据设置为预设数据,并设置存储空间中的每个存储区间的标识为第一标识之后,可以根据接收到的第一写操作指令中包含的第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据,此时存储空间中与第一扇区对应存储区间的数据即为需要修复的物理页中的第一扇区的数据。[0092]206、SSD将与第一扇区对应存储区间的标识设置为第二标识。[0093]其中,由于存储空间中与第一扇区对应存储区间的数据已经为需写入第一扇区的数据,因此,此时SSD需要将存储空间中与第一扇区对应存储区间的有效标识由第一标识修改为第二标识,其中,该第二标识用于表示存储区间中的数据为有效数据。[0094]需要说明的是,步骤205和步骤206的执行没有先后顺序,通常情况下还可以同时执行,本发明实施例在此对步骤205和步骤206的执行的先后顺序不做限制。[0095]207,SSD根据物理页的地址,将存储空间中的数据写入SSD的闪存中,以完成对第一扇区的修复,并将存储空间中的每个存储区间的标识写入SSD的冗余空间中。[0096]其中,当SSD根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据,并将与第一扇区对应存储区间的标识设置为第二标识之后,SSD根据物理页的地址,将存储空间中的数据写入SSD的闪存中替换该物理页中原有的数据,以完成对第一扇区的修复,并且将存储空间中的每个存储区间的标识也写入SSD的冗余空间中。众所周知,在NandFlash中每个物理页都有一定的冗余空间,在本发明实施例中,可以将存储空间中的每个存储区间的标识写入物理页的冗余空间中,这样不会增加系统的表项,节省了RAN的空间,节约了成本。例如,SSD以NandFlash为存储介质,主机进行数据读写操作的最小单元为I个Sector,每个Sector的大小以512B,物理页对SSD以外体现的实际存放数据的空间大小为8个Sector(8*512B=4096B),但是对于SSD来说实际上一个物理页的大小比8个Sector的大小要大,例如物理页的大小有可能是如4120BM096B,此时便可以用冗余空间来存放存储空间中的每个存储区间的标识,也就是该物理页包含的每个扇区对应的标识。[0097]可以理解的是,由于存储空间包含的存储区间对应物理页中的扇区,那么当SSD根据物理页的地址,将存储空间中的数据写入SSD的闪存中,并将存储空间中的每个存储区间的标识写入SSD的冗余空间中之后,存储空间中的每个存储区间的标识也就是物理页中每个扇区的标识,也就是说。该标识表示物理页中每个扇区的数据是否为有效数据。[0098]当SSD根据物理页的地址,将存储空间中的数据写入SSD的闪存中,并将存储空间中的每个存储区间的标识写入SSD的冗余空间中之后,在一种应用场景中,若主机需要对发生UNC的物理页中的第二扇区的数据进行修复,此时具体的可以执行以下步骤208-步骤211。[0099]208、SSD接收主机发送的第二写操作指令。[0100]其中,当主机需要修复第二扇区的数据时,可以向SSD发送第二写操作指令,此时SSD便可以接收主机发送的第二写操作指令。其中,该第二写操作指令中包含有物理页中的第二扇区的LBA以及与第二扇区的LBA对应的需要写入第二扇区的数据,第二扇区为物理页包含的至少两个扇区中除第一扇区外的任意一个扇区。[0101]209、SSD根据第二扇区的LBA将物理页的数据和物理页中的每个扇区的标识读取至缓存中。[0102]其中,当SSD接收到主机发送的第二写操作指令之后,可以根据第二写操作指令包含的第二扇区的LBA将第二扇区所在的物理页的数据以及该物理页中的每个扇区的标识读取至缓存中。[0103]210、SSD根据第二扇区的LBA,将第二扇区的预设数据更新为需要写入所述第二扇区的数据,并将第二扇区的标识设置为第二标识。[0104]其中,当SSD根据第二扇区的LBA将物理页的数据和物理页中的每个扇区的标识读取至缓存中之后,可以根据第二写操作指令中包含的第二扇区的LBA,将第二扇区的预设数据更新为需要写入所述第二扇区的数据,覆盖第二扇区原有的数据,并且,需要将第二扇区对应的标识设置为第二标识,以指示第二扇区的数据为有效数据。[0105]211、SSD将更新后的物理页的数据以及物理页中的每个扇区的标识写入述SSD的闪存中,以完成对第二扇区的修复。[0106]其中,当SSD根据第二扇区的LBA,将第二扇区的预设数据更新为需要写入所述第二扇区的数据,并将第二扇区的标识设置为第二标识之后,便可以更新后的物理页的数据以及物理页中的每个扇区的标识写入述SSD的闪存中,此时便完成了物理页中第二扇区数据的修复,其中,物理页中的每个扇区的标识被写入SSD的冗余空间中。[0107]需要说明的是,通过重复执行步骤208-步骤211便可以将整个物理页中的所有扇区都修复完成。[0108]当SSD根据物理页的地址,将存储空间中的数据写入SSD的闪存中,并将存储空间中的每个存储区间的标识写入SSD的冗余空间中之后,在另一种应用场景中,如图3所示,若主机需要读取物理页中某个扇区的数据,此时具体的可以执行以下步骤212-步骤215。[0109]212、SSD接收主机发送的读操作指令。[0110]其中,当主机需要读取物理页中某个扇区的数据时,可以向SSD发送读操作指令,此时SSD便可以接收主机发送的读操作指令。其中该读取操作指令包含有待读取的扇区的LBA。[0111]213、SSD根据待读取的扇区的LBA获取待读取的扇区的标识。[0112]其中,当SSD接收到主机发送的读操作指令之后,便可以根据读操作指令包含的待读取的扇区的LBA获取待读取的扇区的标识。[0113]214、当待读取的扇区的标识为第一标识时,SSD向主机发送响应消息。[0114]其中,当SSD根据待读取的扇区的LBA获取到待读取的扇区的标识之后,需要对待读取的扇区的标识进行判断,当确定待读取的扇区的标识为第一标识时,则表明该待读取的扇区的数据为失效数据,此时SSD可以向主机发送响应消息。其中,该响应消息用于通知主机该待读取的扇区的数据为失效数据。[0115]可选的,当SSD接收到主机发送的读操作指令之后,可以根据读操作指令中包含的待读取的扇区的LBA直接读取对应的扇区的数据,并在读取到该待读取的扇区的数据之后,判断得到的待读取的扇区的数据是否为预设数据,并在确定得到的待读取的扇区的数据为预设数据时,向主机发送用于通知主机第二扇区的数据为失效数据的响应消息。[0116]215、当待读取的扇区的标识为第二标识时,SSD读取该扇区的数据,并将该扇区的数据发送至主机。[0117]其中,当SSD根据待读取的扇区的LBA获取到待读取的扇区的标识之后,确定待读取的扇区的标识为第二标识时,则表明该待读取的扇区中的数据为有效数据,此时SSD可以读取该扇区的数据,并将该扇区的数据发送至主机。[0118]可选的,当SSD接收到主机发送的读操作指令之后,也可以根据读操作指令中包含的待读取的扇区的LBA直接读取该待读取的扇区的数据,并在得到该待读取的扇区的数据之后,判断得到的该待读取的扇区的数据是否为预设数据,并在确定得到的该待读取的扇区的数据不是预设数据时,将读取到的待读取的扇区的数据发送至主机。[0119]需要说明的是,在本发明实施例中,缓存可以是SSD中的RAM或ROM等存储器,本发明实施例在此不做限制。[0120]为了便于本领域技术人员的理解,对本发明实施例中的实施过程进行举例说明。[0121]例如,SSD以NandFlash为存储介质,物理页的大小为4KByte,主机进行数据读写操作的最小单元为I个Sector,每个Sector的大小为512B,也就是说一个物理页包含8个Sector,预设数据为0,第一标识为1,第二标识为O。当整个物理页发生UNC时,此时主机需要对物理页中的Sectorf的数据进行修复,便可以向SSD发送写操作指令,该写操作指令中包含Sector2的LBA以及Sector2的LBA对应的需要写入Sector2的数据,当SSD接收到写操作指令之后,可以根据Sectorf的LBA获取Sectorf所在的物理页的地址,并根据该物理页的地址读取该物理页的数据(该物理页中包含8个Sector),当读取该物理页的数据失败时,SSD在缓存(如RAM)中分配与该物理页大小相同的存储空间(该存储空间中包含8个存储区间,每个存储区间的大小与Sector的大小相同),并将该存储空间包含的8个存储区间的数据设置为0,并将存储空间中的8个存储区间的标识设置为1,此时SSD可以将Sector2现有的数据用写操作指令中包含的Sector2的LBA对应的需要写入Sector2的数据覆盖,并将Sectorf对应存储区间的标识修改为0,最后根据物理页的地址,将存储空间中的数据写入SSD的闪存中,并将存储空间中的8个存储区间的标识写入SSD的冗余空间中。[0122]在将将存储空间中的数据写入SSD的闪存中,并将存储空间中的8个存储区间的标识写入SSD的冗余空间中之后,若SSD接收到主机发送的用于读取Sectorf的数据的读操作指令时,便可以根据读操作指令中的Sector2的LBA获取Sector2的标识,并在判断得到Sectorf的标识为第二标识,此时SSD便可以将Sectorf的数据读取出来,并发送至主机;若SSD接收到主机发送的用于读取除Sector2之外的其余的Sector的数据的读操作指令时,可以根据读操作指令中的Sector的LBA获取该Sector的标识,在判断得到该Sector的标识为第一标识时,向主机发送用于通知主机需要读取的Sector的数据为失效数据的响应消息。[0123]在将存储空间中的数据写入SSD的闪存中,并将存储空间中的8个存储区间的标识写入SSD的冗余空间中之后,若主机需要修复除Sector2之外的其余的Sector的数据时,可以向SSD发送该Sector的写操作指令,此时SSD便可以根据写操作指令包含的Sector的LBA获取物理页和物理页包含的8个Sector对应的有效标识,并将物理页的数据和8个Sector对应的有效标识读取至缓存(RAM)中,然后根据该Sector的写操作指令更新物理页包含的该Sector的数据,并将该Sector对应的有效标识设置为第二标识,最后将更新后的物理页的数据以及物理页中的每个扇区的标识写入SSD的闪存中,以完成对该Sector的修复,重复该过程,便可以将整个物理页中的所有扇区都修复完成。[0124]本发明实施例提供的坏道修复方法,SSD根据接收到的主机发送的第一写操作指令中包含的第一扇区的LBA读取第一扇区所在的物理页的数据,当读取物理页的数据失败时,在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据,然后根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为述需要写入第一扇区的数据,最后根据物理页的地址,将存储空间中的数据写入SSD的闪存中,通过将在缓存中分配的与物理页大小相同的存储空间的数据设置为预设数据,并将与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据,并将更新后的存储空间的数据写入SSD的闪存中替换发生UNC的物理页的原有数据,解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。[0125]并且,通过设置Page中每个Sector对应的有效标识,在未增加系统表项的情况下,实现了以Sector为单位逐步修复整个Page出现的UNC问题,并增加了系统的灵活性。[0126]实施例3[0127]本发明实施例3提供一种坏道修复装置,如图4所示,包括:接收模块31、读取模块32、处理模块33、更新模块34、写入模块35。[0128]接收模块31,用于接收主机发送的第一写操作指令,其中,所述第一写操作指令包含有第一扇区的逻辑扇区地址(LogicalBlockAddressing,LBA)以及需要写入所述第一扇区的数据。[0129]读取模块32,用于根据所述接收模块31得到的所述第一扇区的LBA读取所述第一扇区所在的物理页的数据。[0130]处理模块33,用于当所述读取模块32读取所述物理页的数据失败时,在缓存中分配与所述物理页大小相同的存储空间,并将所述存储空间的数据设置为预设数据。[0131]更新模块34,用于根据所述接收模块31得到的所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据。[0132]写入模块35,用于根据所述物理页的地址,将所述存储空间中的数据写入固态硬盘(SolidStateDisk,SSD)的闪存中,以完成对所述第一扇区的修复。[0133]进一步的,所述存储空间包含至少两个存储区间,其中每个存储区间对应所述物理页中的一个扇区。[0134]如图5所示,所述装置还可以包括:设置模块36。[0135]设置模块36,还用于当所述读取模块32读取所述物理页的数据失败时,设置所述存储空间中的每个存储区间的标识为第一标识,其中,所述第一标识用于表示存储区间中的数据为失效数据。[0136]所述设置模块36,还用于在所述更新模块34根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据之后,将所述与所述第一扇区对应存储区间的标识设置为第二标识;其中,所述第二标识用于表示所述存储区间中的数据为有效数据。[0137]所述写入模块35,还用于将所述存储空间中的每个存储区间的标识写入所述SSD的冗余空间中。[0138]进一步的,所述接收模块31,还用于在所述写入模块35根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中之后,接收所述主机发送的第二写操作指令,其中,所述第二写操作指令中包含有所述物理页中的第二扇区的LBA以及与需要写入所述第二扇区的数据。[0139]所述读取模块32,还用于根据所述接收模块31得到的所述第二扇区的LBA将所述物理页的数据和所述物理页中的每个扇区的标识读取至缓存中。[0140]所述处理模块33,还用于根据所述接收模块31得到的所述第二扇区的1^八,将所述第二扇区的预设数据更新为所述需要写入所述第二扇区的数据,并将所述第二扇区的标识设置为第二标识。[0141]所述写入模块35,还用于将更新后的所述物理页的数据以及所述物理页中的每个扇区的标识写入所述SSD的闪存中,以完成对所述第二扇区的修复,其中,所述物理页中的每个扇区的标识被写入所述SSD的冗余空间中。[0142]进一步的,所述接收模块31,还用于接收所述主机发送的读操作指令;其中,所述读取操作指令包含有待读取的扇区的LBA。[0143]所述装置还包括:获取模块37、发送模块38。[0144]获取模块37,用于根据所述接收模块31得到的所述待读取的扇区的LBA获取所述待读取的扇区的标识。[0145]发送模块38,用于当所述获取模块37得到的所述待读取的扇区的标识为第一标识时,向所述主机发送响应消息,其中,所述响应消息用于通知所述主机所述扇区的数据为失效数据。[0146]进一步的,所述读取模块32,还用于当所述获取模块37得到的所述待读取的扇区的标识为第二标识时,读取所述扇区的数据,并将所述扇区的数据发送至所述主机。[0147]需要说明的是,本发明实施例提供的坏道修改装置中功能模块的具体描述可以参考方法实施例中对应内容的具体描述,本发明实施例在此不再详细赘述。[0148]本发明实施例提供的坏道修复装置,根据接收到的主机发送的第一写操作指令中包含的第一扇区的LBA读取第一扇区所在的物理页的数据,当读取物理页的数据失败时,在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据,然后根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为述需要写入第一扇区的数据,最后根据物理页的地址,将存储空间中的数据写入SSD的闪存中,通过将在缓存中分配的与物理页大小相同的存储空间的数据设置为预设数据,并将与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据,并将更新后的存储空间的数据写入SSD的闪存中替换发生UNC的物理页的原有数据,解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。[0149]并且,通过设置Page中每个Sector对应的有效标识,在未增加系统表项的情况下,实现了以Sector为单位逐步修复整个Page出现的UNC问题,并增加了系统的灵活性。[0150]实施例4[0151]本发明实施例4提供一种坏道修复装置,如图6所示,包括:总线接口41、处理器42,其中,所述总线接口41用于与外部设备进行通信。[0152]所述总线接口41,用于接收主机发送的第一写操作指令,其中,所述第一写操作指令包含有第一扇区的LBA以及需要写入所述第一扇区的数据。[0153]所述处理器42,用于根据所述总线接口41得到的所述第一扇区的LBA读取所述第一扇区所在的物理页的数据.[0154]所述处理器42,还用于当读取所述物理页的数据失败时,在缓存中分配与所述物理页大小相同的存储空间,并将所述存储空间的数据设置为预设数据。[0155]所述处理器42,还用于根据所述总线接口41得到的所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据。[0156]所述处理器42,还用于根据所述物理页的地址,将所述存储空间中的数据写入SSD的闪存中,以完成对所述第一扇区的修复。[0157]在本发明实施例中,进一步可选的,所述存储空间包含至少两个存储区间,其中每个存储区间对应所述物理页中的一个扇区。[0158]所述处理器42,还用于当读取所述物理页的数据失败时,设置所述存储空间中的每个存储区间的标识为第一标识,其中,所述第一标识用于表示存储区间中的数据为失效数据。[0159]所述处理器42,还用于在所述根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据之后,将所述与所述第一扇区对应存储区间的标识设置为第二标识;其中,所述第二标识用于表示所述存储区间中的数据为有效数据。[0160]所述处理器42,还用于将所述存储空间中的每个存储区间的标识写入所述SSD的冗余空间中。[0161]在本发明实施例中,进一步可选的,所述总线接口41,还用于在所述根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中之后,接收所述主机发送的第二写操作指令,其中,所述第二写操作指令中包含有所述物理页中的第二扇区的LBA以及与需要写入所述第二扇区的数据。[0162]所述处理器42,还用于根据所述总线接口41得到的所述第二扇区的LBA将所述物理页的数据和所述物理页中的每个扇区的标识读取至缓存中。[0163]所述处理器42,还用于根据所述总线接口41得到的所述第二扇区的LBA,将所述第二扇区的预设数据更新为所述需要写入所述第二扇区的数据,并将所述第二扇区的标识设置为第二标识.[0164]所述处理器42,还用于将更新后的所述物理页的数据以及所述物理页中的每个扇区的标识写入所述SSD的闪存中,以完成对所述第二扇区的修复,其中,所述物理页中的每个扇区的标识被写入所述SSD的冗余空间中。[0165]在本发明实施例中,进一步可选的,所述总线接口41,还用于接收所述主机发送的读操作指令;其中,所述读取操作指令包含有待读取的扇区的LBA。[0166]所述处理器42,还用于根据所述总线接口41得到的所述待读取的扇区的LBA获取所述待读取的扇区的标识.[0167]所述处理器42,还用于当所述待读取的扇区的标识为第一标识时,向所述主机发送响应消息,其中,所述响应消息用于通知所述主机所述扇区的数据为失效数据。[0168]在本发明实施例中,进一步可选的,所述处理器42,还用于当所述待读取的扇区的标识为第二标识时,读取所述扇区的数据,并将所述扇区的数据发送至所述主机。[0169]需要说明的是,本发明实施例提供的坏道修复装置中功能模块的具体描述可以参考方法实施例中对应内容的具体描述,本发明实施例在此不再详细赘述。[0170]本发明实施例提供的坏道修复装置,根据接收到的主机发送的第一写操作指令中包含的第一扇区的LBA读取第一扇区所在的物理页的数据,当读取物理页的数据失败时,在缓存中分配与物理页大小相同的存储空间,并将存储空间的数据设置为预设数据,然后根据第一扇区的LBA,将存储空间中与第一扇区对应存储区间的预设数据更新为述需要写入第一扇区的数据,最后根据物理页的地址,将存储空间中的数据写入SSD的闪存中,通过将在缓存中分配的与物理页大小相同的存储空间的数据设置为预设数据,并将与第一扇区对应存储区间的预设数据更新为需要写入第一扇区的数据,并将更新后的存储空间的数据写入SSD的闪存中替换发生UNC的物理页的原有数据,解决了整个Page发生了UNC时,以Sector为单位进行修复时修复不成功的问题。[0171]并且,通过设置Page中每个Sector对应的有效标识,在未增加系统表项的情况下,实现了以Sector为单位逐步修复整个Page出现的UNC问题,并增加了系统的灵活性。[0172]通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0173]在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。[0174]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。[0175]另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。[0176]所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。[0177]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【
技术领域
】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。【权利要求】1.一种坏道修复方法,其特征在于,包括:固态硬盘(SolidStateDisk,SSD)接收主机发送的第一写操作指令,其中,所述第一写操作指令包含有第一扇区的逻辑扇区地址(LogicalBlockAddressing,LBA)以及需要写入所述第一扇区的数据;根据所述第一扇区的LBA读取所述第一扇区所在的物理页的数据;当读取所述物理页的数据失败时,在缓存中分配与所述物理页大小相同的存储空间,并将所述存储空间的数据设置为预设数据;根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据;根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中,以完成对所述第一扇区的修复。2.根据权利要求1所述的坏道修复方法,其特征在于,所述存储空间包含至少两个存储区间,其中每个存储区间对应所述物理页中的一个扇区;所述方法还包括:当读取所述物理页的数据失败时,设置所述存储空间中的每个存储区间的标识为第一标识,其中,所述第一标识用于表示存储区间中的数据为失效数据;在所述根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据之后,还包括:将所述与所述第一扇区对应存储区间的标识设置为第二标识;其中,所述第二标识用于表示所述存储区间中的数据为有效数据;将所述存储空间中的每个存储区间的标识写入所述SSD的冗余空间中。3.根据权利要求2所述的坏道修复方法,其特征在于,在所述根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中之后,还包括:接收所述主机发送的第二写操作指令,其中,所述第二写操作指令中包含有所述物理页中的第二扇区的LBA以及与需要写入所述第二扇区的数据;根据所述第二扇区的LBA将所述物理页的数据和所述物理页中的每个扇区的标识读取至缓存中;根据所述第二扇区的LBA,将所述第二扇区的预设数据更新为所述需要写入所述第二扇区的数据,并将所述第二扇区的标识设置为第二标识;将更新后的所述物理页的数据以及所述物理页中的每个扇区的标识写入所述SSD的闪存中,以完成对所述第二扇区的修复,其中,所述物理页中的每个扇区的标识被写入所述SSD的冗余空间中。4.根据权利要求2所述的坏道修复方法,其特征在于,还包括:接收所述主机发送的读操作指令;其中,所述读取操作指令包含有待读取的扇区的LBA;根据所述待读取的扇区的LBA获取所述待读取的扇区的标识;当所述待读取的扇区的标识为第一标识时,向所述主机发送响应消息,其中,所述响应消息用于通知所述主机所述扇区的数据为失效数据。5.根据权利要求4所述的坏道修复方法,其特征在于,还包括:当所述待读取的扇区的标识为第二标识时,读取所述扇区的数据,并将所述扇区的数据发送至所述主机。6.一种坏道修复装置,其特征在于,包括:接收模块,用于接收主机发送的第一写操作指令,其中,所述第一写操作指令包含有第一扇区的逻辑扇区地址(LogicalBlockAddressing,LBA)以及需要写入所述第一扇区的数据;读取模块,用于根据所述接收模块得到的所述第一扇区的LBA读取所述第一扇区所在的物理页的数据;处理模块,用于当所述读取模块读取所述物理页的数据失败时,在缓存中分配与所述物理页大小相同的存储空间,并将所述存储空间的数据设置为预设数据;更新模块,用于根据所述接收模块得到的所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据;写入模块,用于根据所述物理页的地址,将所述存储空间中的数据写入固态硬盘(SolidStateDisk,SSD)的闪存中,以完成对所述第一扇区的修复。7.根据权利要求6所述的坏道修复装置,其特征在于,所述存储空间包含至少两个存储区间,其中每个存储区间对应所述物理页中的一个扇区;所述装置还包括:设置模块,用于当所述读取模块读取所述物理页的数据失败时,设置所述存储空间中的每个存储区间的标识为第一标识,其中,所述第一标识用于表示存储区间中的数据为失效数据;所述设置模块,还用于在所述更新模块根据所述第一扇区的LBA,将所述存储空间中与所述第一扇区对应存储区间的预设数据更新为所述需要写入所述第一扇区的数据之后,将所述与所述第一扇区对应存储区间的标识设置为第二标识;其中,所述第二标识用于表示所述存储区间中的数据为有效数据;所述写入模块,还用于将所述存储空间中的每个存储区间的标识写入所述SSD的冗余空间中。8.根据权利要求7所述的坏道修复装置,其特征在于,所述接收模块,还用于在所述写入模块根据所述物理页的地址,将所述存储空间中的数据写入所述SSD的闪存中之后,接收所述主机发送的第二写操作指令,其中,所述第二写操作指令中包含有所述物理页中的第二扇区的LBA以及与需要写入所述第二扇区的数据;所述读取模块,还用于根据所述接收模块得到的所述第二扇区的LBA将所述物理页的数据和所述物理页中的每个扇区的标识读取至缓存中;所述处理模块,还用于根据所述接收模块得到的所述第二扇区的LBA,将所述第二扇区的预设数据更新为所述需要写入所述第二扇区的数据,并将所述第二扇区的标识设置为第二标识;所述写入模块,还用于将更新后的所述物理页的数据以及所述物理页中的每个扇区的标识写入所述SSD的闪存中,以完成对所述第二扇区的修复,其中,所述物理页中的每个扇区的标识被写入所述SSD的冗余空间中。9.根据权利要求7所述的坏道修复装置,其特征在于:所述接收模块,还用于接收所述主机发送的读操作指令;其中,所述读取操作指令包含有待读取的扇区的LBA;所述装置还包括:获取模块,用于根据所述接收模块得到的所述待读取的扇区的LBA获取所述待读取的扇区的标识;发送模块,用于当所述获取模块得到的所述待读取的扇区的标识为第一标识时,向所述主机发送响应消息,其中,所述响应消息用于通知所述主机所述扇区的数据为失效数据。10.根据权利要求9所述的坏道修复装置,其特征在于:所述读取模块,还用于当所述获取模块得到的所述待读取的扇区的标识为第二标识时,读取所述扇区的数据,并将所述扇区的数据发送至所述主机。【文档编号】G11C29/44GK103544995SQ201310378406【公开日】2014年1月29日申请日期:2013年8月27日优先权日:2013年8月27日【发明者】周猛,黎燕,周建华申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1