数据读取方法及设备与流程

文档序号:12462660阅读:212来源:国知局
数据读取方法及设备与流程

本发明实施例涉及存储技术领域,尤其涉及一种数据读取方法及设备。



背景技术:

随着计算机技术以及网络技术的高速发展,计算机自带的存储器逐渐难以满足存储需求,于是发展出相对独立的存储设备。该存储设备具有自己的接口和协议,通过同轴电缆、网线、光纤等方式与计算机主机连接。

现有技术中,该存储设备可以通过逻辑单元号(logical unit number,LUN)对计算机主机提供磁盘空间。具体地,将存储设备的磁盘空间划分为多个区块,每个区块对应一个LUN。当存储设备接收到计算机主机的读取指令时,若某个LUN对应的区块存在磁盘坏道或者数据损坏时,就无法从该LUN的对应存储位置读取到正确的数据。此时,如果该LUN存在镜像LUN,则查看该LUN与镜像LUN对应的数据是否满足数据一致性的状态,若一致,则从该镜像LUN对应的存储空间中读取数据,向计算机主机返回读取的数据,并将该数据写入该LUN对应的存储空间中,若不一致,则向计算机主机返回介质错误(Medium error)信息。

然而,现有技术中,只有在该LUN与镜像LUN对应的数据满足数据一致性状态时,才可以从镜像LUN中读取数据。对于该LUN对应的存储空间中有部分损坏数据时,即使镜像LUN对应的存储空间中存储有该部分损坏数据对应的正确数据时,但由于该镜像LUN与该LUN不满足数据一致性状态,因此不能从该镜像LUN中获取正确的数据,导致无法充分利用存储系统的冗余数据。



技术实现要素:

本发明实施例提供一种数据读取方法及设备,以提高存储系统的冗余数据的利用率。

第一方面,本发明实施例提供一种数据读取方法,包括:

获取主机的读取指令,所述读取指令中包括源逻辑单元号LUN的标识以及待读取数据的第一起始地址以及第一数据长度,所述源LUN对应有冗余视图,所述冗余视图包括至少一个第一记录项,每个所述第一记录项中存储有对所述源LUN中的至少部分数据进行冗余存储的目标LUN的标识;

在确定所述源LUN对应的存储空间中的数据无法读取时,根据所述第一起始地址、第一数据长度以及所述冗余视图,确定所述待读取的数据对应的目标LUN的标识;可选地,第一记录项中还存储有第二冗余数据的第二起始地址和第二数据长度;在确定第一起始地址和第一数据长度对应的地址空间与第二起始地址和第二数据长度对应的地址空间存在交集时,可以确定对应的第一记录项中的目标LUN的标识为待读取的数据对应的目标LUN的标识;

根据所述待读取数据对应的目标LUN的标识,读取第一冗余数据,并将所述第一冗余数据返回至所述主机。

通过源LUN对应有冗余视图,冗余视图包括至少一个第一记录项,每个第一记录项中存储有对源LUN中的至少部分数据进行冗余存储的目标LUN的标识,使得在源LUN对应的存储空间中的数据无法读取时,不需要判断该源LUN中的数据是否与目标LUN中的数据满足数据一致性,只要获取该待读取数据对应的冗余视图中的第一记录项,确定待读取数据对应的目标LUN的标识;根据待读取数据对应的目标LUN的标识,读取第一冗余数据,提高了存储系统中冗余数据的利用率。

在一种可能的设计中,所述源LUN对应的存储空间被划分为多个数据块,其中,每个所述数据块各自对应有冗余视图;

所述根据所述第一起始地址、第一数据长度以及所述冗余视图,确定所述待读取的数据对应的目标LUN的标识,包括:

根据所述第一起始地址、第一数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述待读取的数据对应的至少一个第一目标数据块;

根据各所述第一目标数据块对应的冗余视图中的第一记录项,确定所述待读取数据对应的目标LUN的标识。

在一种可能的设计中,所述第一记录项中还存储有第二冗余数据的第二起始地址和第二数据长度,所述第二起始地址和所述第二数据长度形成的第二地址空间为数据块的地址空间的子集;

所述根据各所述第一目标数据块对应的冗余视图中的第一记录项,确定所述待读取数据对应的目标LUN的标识,包括:

根据所述第一起始地址和所述第一数据长度,确定第一地址空间;

根据所述第一地址空间、各所述第一目标数据块对应的冗余视图中的第一记录项对应的第二地址空间,确定与所述第一地址空间存在交集的第二地址空间对应的目标记录项,且所述第一地址空间是多个所述第二地址空间形成的地址空间的子集;

根据各所述目标记录项,确定所述待读取数据对应的目标LUN的标识。

通过将源LUN对应的存储空间划分为多个数据块,每个数据块对应有各自的冗余视图。这样,只要找到对应待读取的数据对应的目标数据块,就可以只在该目标数据块中对第一记录项进行遍历,减少了遍历时间,提高了读取数据的效率。

在一种可能的设计中,所述第一记录项中还存储有各目标LUN的优先级;

所述根据所述第一地址空间、各所述第一目标数据块的冗余视图中的第一记录项对应的第二地址空间,确定与所述第一地址空间存在交集的第二地址空间对应的目标记录项,包括:

根据所述第一地址空间以及每个数据块的地址空间,确定所述待读取数据针对每个第一目标数据块的第三地址空间;

针对任一第一目标数据块,根据所述冗余视图中的各第一记录项中的目标LUN的优先级从高到低的顺序,遍历所述冗余视图中的每个第一记录项,得到与所述第三地址空间存在交集的第二地址空间对应的目标记录项,且所述第三地址空间是至少一个所述第二地址空间形成的地址空间的子集,针对同一冗余数据,所述目标记录项中的目标LUN的优先级高于其它第一记录项中的目标LUN的优先级。

下面将详细说明在冗余视图中插入记录项的过程,本领域技术人员可以理解,在冗余视图中插入记录项的过程,可以不依赖于上述的可能的设计单独实现,也可以在上述可能的设计的基础上实现。

在一种可能的设计中,所述方法还包括:

获取所述源LUN的标识、待插入冗余视图的第二记录项,所述第二记录项中包括第三冗余数据的第三起始地址和第三数据长度、所述第三冗余数据对应的目标LUN的标识以及所述目标LUN的优先级;

根据所述第三起始地址、第三数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述第三冗余数据对应的至少一个第二目标数据块;

根据各所述第二目标数据块对应的冗余视图中每个第一记录项中存储的目标LUN的优先级以及所述第二记录项中存储的目标LUN的优先级,对各所述第二目标数据块对应的冗余视图进行插入记录项的处理。

在一种可能的设计中,所述根据各所述第二目标数据块对应的冗余视图中每个第一记录项中存储的目标LUN的优先级以及所述第二记录项中存储的目标LUN的优先级,对各所述第二目标数据块对应的冗余视图进行插入记录项的处理,包括:

根据所述第三起始地址、所述第三数据长度以及每个数据块的地址空间,确定所述第三冗余数据针对每个第二目标数据块的第三记录项,所述第三记录项中包括第四起始地址、第四数据长度、所述第三冗余数据对应的目标LUN的标识以及所述目标LUN的优先级;

针对任一第二目标数据块,根据所述第二目标数据块对应的冗余视图中的各第一记录项的优先级从高到低的顺序,遍历所述冗余视图中的每个第一记录项,直至所述第三记录项中的目标LUN的优先级高于第一记录项中的目标LUN的优先级为止,将所述第三记录项插入到该第一记录项之前。

下面将详细说明在冗余视图中删除记录项的过程,本领域技术人员可以理解,在冗余视图中删除记录项的过程,可以不依赖于上述的可能的设计单独实现,也可以在上述可能的设计的基础上实现。

在一种可能的设计中,所述方法还包括:

获取所述源LUN对应的存储空间的新写入数据的写入信息,所述写入信息包括所述源LUN的标识、所述新写入数据的第四起始地址和第四数据长度;

根据所述新写入数据的第四起始地址、第四数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述新写入数据对应的至少一个第三目标数据块;

根据各所述第三目标数据块对应的冗余视图中每个第四记录项中的第五起始地址和第五数据长度、所述第四起始地址和所述第四数据长度,对各所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在一种可能的设计中,所述根据各所述第三目标数据块对应的冗余视图中每个第四记录项中的第五起始地址和第五数据长度、所述第四起始地址和所述第四数据长度,对各所述第三目标数据块对应的冗余视图进行删除记录项的处理,包括:

根据所述第四起始地址、所述第四数据长度以及每个数据块的地址空间,确定所述新写入数据针对每个第三目标数据块的第六起始地址和第六数据长度以及第四地址空间;

遍历所述冗余视图中的每个第四记录项,若所述第四记录项对应的第五地址空间与所述第四地址空间存在交集,则根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在一种可能的设计中,所述根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理,包括:

根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度建立第一分解空间R1和第二分解空间R2;

其中,所述R1的起始地址和数据长度如下:

R1_lba=D5;R1_len=D6-D5;

其中,所述R2的起始地址和数据长度如下:

R2_lba=D6+L6;R2_len=D5+L5-D6-L6,其中,所述R1_lba为所述第一分解空间的起始地址,所述R1_len为所述第一分解空间的数据长度,所述R2_lba为所述第二分解空间的起始地址,所述R2_len为所述第二分解空间的数据长度,所述D5为第五起始地址、所述D6为第六起始地址、所述L5为第五数据长度、所述L6为第六数据长度;

根据所述R1的数据长度和所述R2的数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在一种可能的设计中,所述根据所述R1的数据长度和所述R2的数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理,包括:

若所述R1的数据长度大于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项和第六记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

若所述R1的数据长度大于0,所述R2的数据长度小于等于0,则删除所述第四记录项,并插入第六记录项,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

若所述R1的数据长度小于等于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5。

第二方面,本发明实施例提供一种存储设备,包括:

接收模块,用于获取主机的读取指令,所述读取指令中包括源逻辑单元号LUN的标识以及待读取数据的第一起始地址以及第一数据长度,所述源LUN对应有冗余视图,所述冗余视图包括至少一个第一记录项,每个所述第一记录项中存储有对所述源LUN中的至少部分数据进行冗余存储的目标LUN的标识;

处理模块,用于在确定所述源LUN对应的存储空间中的数据无法读取时,根据所述第一起始地址、第一数据长度以及所述冗余视图,确定所述待读取的数据对应的目标LUN的标识,根据所述待读取数据对应的目标LUN的标识,读取第一冗余数据;

发送模块,用于将所述第一冗余数据返回至所述主机。

在一种可能的设计中,所述源LUN对应的存储空间被划分为多个数据块,其中,每个所述数据块各自对应有冗余视图;所述处理模块具体用于:

根据所述第一起始地址、第一数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述待读取的数据对应的至少一个第一目标数据块;

根据各所述第一目标数据块对应的冗余视图中的第一记录项,确定所述待读取数据对应的目标LUN的标识。

在一种可能的设计中,所述第一记录项中还存储有第二冗余数据的第二起始地址和第二数据长度,所述第二起始地址和所述第二数据长度形成的第二地址空间为数据块的地址空间的子集;

所述处理模块具体用于:

根据所述第一起始地址和所述第一数据长度,确定第一地址空间;

根据所述第一地址空间、各所述第一目标数据块对应的冗余视图中的第一记录项对应的第二地址空间,确定与所述第一地址空间存在交集的第二地址空间对应的目标记录项,且所述第一地址空间是多个所述第二地址空间形成的地址空间的子集;

根据各所述目标记录项,确定所述待读取数据对应的目标LUN的标识。

在一种可能的设计中,所述第一记录项中还存储有各目标LUN的优先级;

所述处理模块具体用于:

根据所述第一地址空间以及每个数据块的地址空间,确定所述待读取数据针对每个第一目标数据块的第三地址空间;

针对任一第一目标数据块,根据所述冗余视图中的各第一记录项中的目标LUN的优先级从高到低的顺序,遍历所述冗余视图中的每个第一记录项,得到与所述第三地址空间存在交集的第二地址空间对应的目标记录项,且所述第三地址空间是至少一个所述第二地址空间形成的地址空间的子集,针对同一冗余数据,所述目标记录项中的目标LUN的优先级高于其它第一记录项中的目标LUN的优先级。

在一种可能的设计中,所述处理模块还用于:

获取所述源LUN的标识、待插入冗余视图的第二记录项,所述第二记录项中包括第三冗余数据的第三起始地址和第三数据长度、所述第三冗余数据对应的目标LUN的标识以及所述目标LUN的优先级;

根据所述第三起始地址、第三数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述第三冗余数据对应的至少一个第二目标数据块;

根据各所述第二目标数据块对应的冗余视图中每个第一记录项中存储的目标LUN的优先级以及所述第二记录项中存储的目标LUN的优先级,对各所述第二目标数据块对应的冗余视图进行插入记录项的处理。

在一种可能的设计中,所述处理模块具体用于:

根据所述第三起始地址、所述第三数据长度以及每个数据块的地址空间,确定所述第三冗余数据针对每个第二目标数据块的第三记录项,所述第三记录项中包括第四起始地址、第四数据长度、所述第三冗余数据对应的目标LUN的标识以及所述目标LUN的优先级;

针对任一第二目标数据块,根据所述第二目标数据块对应的冗余视图中的各第一记录项的优先级从高到低的顺序,遍历所述冗余视图中的每个第一记录项,直至所述第三记录项中的目标LUN的优先级高于第一记录项中的目标LUN的优先级为止,将所述第三记录项插入到该第一记录项之前。

在一种可能的设计中,所述处理模块还用于:

获取所述源LUN对应的存储空间的新写入数据的写入信息,所述写入信息包括所述源LUN的标识、所述新写入数据的第四起始地址和第四数据长度;

根据所述新写入数据的第四起始地址、第四数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述新写入数据对应的至少一个第三目标数据块;

根据各所述第三目标数据块对应的冗余视图中每个第四记录项中的第五起始地址和第五数据长度、所述第四起始地址和所述第四数据长度,对各所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在一种可能的设计中,所述处理模块具体用于:

根据所述第四起始地址、所述第四数据长度以及每个数据块的地址空间,确定所述新写入数据针对每个第三目标数据块的第六起始地址和第六数据长度以及第四地址空间;

遍历所述冗余视图中的每个第四记录项,若所述第四记录项对应的第五地址空间与所述第四地址空间存在交集,则根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在一种可能的设计中,所述处理模块具体用于:

根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度建立第一分解空间R1和第二分解空间R2;

其中,所述R1的起始地址和数据长度如下:

R1_lba=D5;R1_len=D6-D5;

其中,所述R2的起始地址和数据长度如下:

R2_lba=D6+L6;R2_len=D5+L5-D6-L6,其中,所述R1_lba为所述第一分解空间的起始地址,所述R1_len为所述第一分解空间的数据长度,所述R2_lba为所述第二分解空间的起始地址,所述R2_len为所述第二分解空间的数据长度,所述D5为第五起始地址、所述D6为第六起始地址、所述L5为第五数据长度、所述L6为第六数据长度;

根据所述R1的数据长度和所述R2的数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在一种可能的设计中,所述处理模块具体用于:

若所述R1的数据长度大于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项和第六记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

若所述R1的数据长度大于0,所述R2的数据长度小于等于0,则删除所述第四记录项,并插入第六记录项,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

若所述R1的数据长度小于等于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5。

第三方面,本发明实施例里还提供一种存储设备,所述存储设备包括至少一个处理器和存储器;所述存储器存储计算机执行指令;所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述存储设备如上第一方面以及第一方面的各种可能的设计的数据读取方法。

第四方面,本发明实施例里还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当存储设备的至少一个处理器执行该计算机执行指令时,存储设备执行上述各种可能设计提供的数据读取方法。

第五方面,本发明实施例里还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中。存储设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得存储设备实施前述方法实施例中的各种可能设计提供的数据读取方法。

本实施例提供的数据读取方法及装置,通过源LUN对应有冗余视图,冗余视图包括至少一个第一记录项,每个第一记录项中存储有对源LUN中的至少部分数据进行冗余存储的目标LUN的标识,使得在源LUN对应的存储空间中的数据无法读取时,不需要判断该源LUN中的数据是否与目标LUN中的数据满足数据一致性,只要获取该待读取数据对应的冗余视图中的第一记录项,确定待读取数据对应的目标LUN的标识;根据待读取数据对应的目标LUN的标识,读取第一冗余数据,提高了存储系统中冗余数据的利用率。

附图说明

图1为本发明实施例提供的存储设备的结构示意图一;

图2为本发明实施例提供的数据读取方法的流程示意图一;

图3为本发明实施例提供的数据块与冗余视图的对应关系图;

图4为本发明实施例提供的数据读取方法的流程示意图二;

图5为本发明实施例提供的插入冗余视图记录项的流程示意图;

图6为本发明实施例提供的删除冗余视图记录项的流程示意图一;

图7为本发明实施例提供的删除冗余视图记录项的流程示意图二;

图8为本发明实施例提供的存储设备的结构示意图二;

图9为本发明实施例提供的存储设备的结构示意图三。

具体实施方式

图1为本发明实施例提供的存储设备的结构示意图一。本实施例提供的存储设备与计算机主机相对独立,具有自己的接口和协议,通过同轴电缆、网线、光纤等方式与计算机主机连接。该存储设备可以通过逻辑单元号(logical unit number,LUN)对计算机主机提供磁盘空间。如图1所示,本实施例的存储设备包括软件和硬件。

存储设备的软件包含操作系统和软件模块。其中,操作系统提供软件运行的基本操作系统。软件模块可以实现数据的读取以及修复等功能。

存储设备的硬件包括多个硬盘、接口卡、中央处理器(Central ProcessingUnit,CPU)以及内存。其中,多个硬盘可以提供LUN对应的硬盘存储空间。接口卡,用于连接计算机主机或者其它存储设备,其它存储设备上存储有远程复制等冗余数据。CPU和内存可以提供操作系统和软件模块所需的基本硬件平台。

图1示出了本实施例存储设备的一种可能的结构,对于其它的存储设备,只要具备硬盘、CPU等部件,都属于本发明的保护范畴。对于其它的结构,本实施例此处不再赘述。

基于现有技术中无法充分利用存储系统的冗余数据的技术问题,本实施例将源LUN对应的存储空间划分为多个数据块,将每个数据块的冗余数据的存储信息通过冗余视图的方式组织起来,在源LUN的部分数据块损坏的时候,通过冗余视图找到目标LUN,从目标LUN上读取数据并自动修复,不需要保证数据一致性状态,提高了存储系统的利用率。下面采用详细的实施例,对本发明实施例提供的数据读取方法进行详细说明。

图2为本发明实施例提供的数据读取方法的流程示意图一。本实施例的执行主体为上述的存储设备。如图1所示,该方法包括:

S101、获取主机的读取指令,所述读取指令中包括源逻辑单元号LUN的标识以及待读取数据的第一起始地址以及第一数据长度;

其中,所述源LUN对应有冗余视图,所述冗余视图包括至少一个第一记录项,每个所述第一记录项中存储有对所述源LUN中的至少部分数据进行冗余存储的目标LUN的标识。

在主机读取存储设备中存储的数据时,存储设备接收主机的读取指令,该读取指令中包括源LUN的标识以及待读取数据的第一起始地址和第一数据长度。源LUN的标识例如可以为LUN的编号,例如LUN_0、LUN_1、LUN_N。

在本实施例中,源LUN对应有冗余视图。冗余视图包括至少一个第一记录项,每个第一记录项中存储有对源LUN中的至少部分数据进行冗余存储的目标LUN的标识。其中,目标LUN对应的存储空间中存储的数据可以为镜像、克隆、双活、拷贝、快照、同步远程复制、异步远程复制等冗余数据。

本领域技术人员可以理解,目标LUN中可以对源LUN中的全部数据进行存储,也可以对源LUN中的部分数据进行存储,目标LUN可以为一个或多个,例如镜像对应一个目标LUN,同步远程复制对应一个目标LUN等,本实施例对目标LUN的数量以及冗余数据的类型不做特别限制。

S102、在确定所述源LUN对应的存储空间中的数据无法读取时,根据所述第一起始地址、第一数据长度以及所述冗余视图,确定所述待读取的数据对应的目标LUN的标识。

当源LUN对应的存储空间出现磁盘坏道或者数据错误的情况下,则存储设备无法从该存储空间中读取正确的数据给主机。此时,根据第一起始地址、第一数据长度,在冗余视图中确定该待读取的数据对应的第一记录项,根据该待读取的数据对应的第一记录项,获取待读取的数据对应的目标LUN的标识。

在一个具体的例子中,第一记录项中存储有目标LUN的标识、第二冗余数据的第二起始地址和第二数据长度。

若待读取数据的第一起始地址、第一数据长度对应的地址空间与第二冗余数据对应的第二起始地址和第二数据长度对应的地址空间存在交集,则该第一记录项为目标记录项,该目标记录项中的目标LUN的标识为待读取的数据对应的目标LUN的标识。

在具体实现过程中,若一个目标记录项对应的冗余数据不是待读取数据的全部,而是待读取数据的一部分,则可以遍历第一记录项,直至得到待读取的数据对应的多个目标记录项,该多个目标记录项对应的冗余数据可以拼成完整的待读取数据,则该多个目标记录项中的目标LUN的标识,均为待读取的数据对应的目标LUN的标识。

S103、根据所述待读取数据对应的目标LUN的标识,读取第一冗余数据,并将所述第一冗余数据返回至所述主机。

具体地,待读取数据对应的目标LUN为至少一个,根据待读取数据对应的目标LUN的标识,从每个目标LUN对应的存储空间中,读取冗余数据,从而完成该待读取数据对应的第一冗余数据的读取。

在现有技术中,地址一般通过十六进制来表示,例如0x1000,数据长度通过扇区sectors来表示。在本实施例中,为了便于说明,以十进制为例来说明,十六进制与此类似。例如,待读取的数据的起始地址为50,数据长度为250,则终止地址为300。待读取的数据对应的目标LUN的标识为LUN_1、LUN_3以及LUN_4,与该待读取的数据存在交集的部分分别为[50,70]、[70,230]、[230,230];最终从LUN_1对应的地址空间中读取[50,70]的数据,从LUN_3对应的地址空间中读取[70,200]的数据,从LUN_4中读取[200,300]的数据。其中,在[50,70]中,50代表起始地址,70代表终止地址,其它类似。本领域技术人员可以理解,多个目标记录项也可以对应一个目标LUN的标识。

在读取到该第一冗余数据后,向主机返回该第一冗余数据,并将该第一冗余数据写入对应的源LUN中,以完成对该源LUN的修复。

本实施例提供的数据读取方法,通过源LUN对应有冗余视图,冗余视图包括至少一个第一记录项,每个第一记录项中存储有对源LUN中的至少部分数据进行冗余存储的目标LUN的标识,使得在源LUN对应的存储空间中的数据无法读取时,不需要判断该源LUN中的数据是否与目标LUN中的数据满足数据一致性,只要获取该待读取数据对应的冗余视图中的第一记录项,确定待读取数据对应的目标LUN的标识;根据待读取数据对应的目标LUN的标识,读取第一冗余数据,提高了存储系统中冗余数据的利用率。

下面采用详细的实施例,对本发明实施例提供的数据读取方法的具体实现过程进行详细说明。

在本实施例中,为了提高存储设备遍历第一记录项,获取目标记录项的效率,本实施例还可以将源LUN对应的存储空间划分为多个数据块,每个数据块对应有各自的冗余视图。这样,只要找到对应待读取的数据对应的目标数据块,就可以只在该目标数据块中对第一记录项进行遍历,减少了遍历时间。对应的,图1中的S102可通过如下的S1021和S1022来实现。

S1021、根据所述第一起始地址、第一数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述待读取的数据对应的至少一个第一目标数据块;

根据该待读取数据的第一起始地址和第一数据长度,确定该待读取数据对应的第一地址空间。然后根据源LUN的标识对应的各数据块的地址空间,得到该待读取的数据对应的至少一个第一目标数据块。其中,源LUN的标识对应有存储空间被划分的多个数据块各自的地址空间。

本领域技术人员可以理解,当该待读取的数据长度较短,且刚好在一个数据块中时,则只有一个第一目标数据块,当该待读取的数据较长,或刚好跨越两个或多个数据块时,则有多个第一目标数据块。

例如,第一地址空间为[50,300],每个数据块的数据长度为200,数据块的起始地址若从0开始,则多个数据块各自的地址空间为[0,200]、[201,400]、[401,600]等,则第一地址空间对应地址空间为[0,200]、[200,400]的两个连续的数据块。

S1022、根据各所述第一目标数据块对应的冗余视图中的第一记录项,确定所述待读取数据对应的目标LUN的标识。

由上可知,在第一记录项中存储有对数据块中的数据进行冗余存储的存储空间对应的目标LUN的标识。

若该数据块中的数据均被一个目标LUN对应的存储空间连续存储,则冗余视图中可以仅有一个第一记录项。若该数据块中的数据被分散存储,则冗余视图中包括多个第一记录项。

具体地,可以根据第一起始地址和第一数据长度,确定第一地址空间;根据第一地址空间、各第一目标数据块对应的冗余视图中的第一记录项对应的第二地址空间,确定与第一地址空间存在交集的第二地址空间对应的目标记录项;根据各目标记录项,确定待读取数据对应的目标LUN的标识。

由于各第一目标记录项中的目标LUN对应的存储空间中的冗余数据是待读取数据的一部分或全部,即待读取数据被冗余存储在一个或多个目标LUN中。因此,确定与该第一地址空间存在交集的第二地址空间对应的目标记录项,就可以得到该待读取数据的冗余数据所在的存储空间对应的所有目标LUN的标识。

例如,第一地址空间为[50,300],跨越两个连续的数据块。与该第一地址空间存在交集的第二地址空间为[30,70],[60,200]、[200,310],分别对应的目标LUN的标识为LUN_1、LUN_3、LUN_4。由此可知,第一地址空间为上述的三个第二地址空间形成的连续的地址空间的子集,则说明可以得到完整的待读取的数据。

在具体实现过程中,在上述实施例的基础上,第一记录项中还存储有各目标LUN的优先级。图3为本发明实施例提供的数据块与冗余视图的对应关系图。如图3所示,将单个LUN对应的存储空间划分为多个16MB的数据块,每个数据块下对应该数据块的冗余视图的多个记录项。在本实施例中,为了便于区分,将该记录项称为第一记录项。下面对记录项内的内容进行详细说明。

LBA(logical block address):冗余数据的起始地址;

LEN(length):冗余数据的数据长度;

目标LUN ID:本记录项对应的目标LUN的标识;

PRI(priority):本记录项的恢复优先级,可通过数字或字母等来表示,例如优先级为A,优先级为B等。

其中,起始地址和数据长度形成了冗余数据的地址空间。在本实施例中,每条记录项不同,具体可以为相同的优先级,但是地址空间不同,或者地址空间有交集,但是目标LUN的优先级不同。但是每条记录项对应的地址空间都是该数据块的起始地址和数据长度形成的地址空间的子集或全集。

优先级原则上根据目标LUN和源LUN的关系来确定。在本实施例中,目标LUN包括镜像、克隆、双活、拷贝、快照、同步远程复制、异步远程复制等。恢复优先级从高到低为镜像>克隆>双活>拷贝>快照>同步远程复制>异步远程复制。本实施例此处仅仅是对优先级的一种示例,在具体实现过程中,可以根据目标LUN与源LUN的关系以及目标LUN的性能等综合考虑来设置优先级,对于优先级的具体实现方式,本实施例此处不再赘述。

因此,可以在考虑优先级的基础上,采用最优的恢复路径来恢复数据和读取数据。

在具体实现过程中,根据上述的第一地址空间以及每个数据块对应的地址空间,确定待读取数据针对每个第一目标数据块的第三地址空间。继续以上述的实施例为例来进行说明。

第一地址空间为[50,300],每个数据块的数据长度为200,则第一地址空间对应地址空间为[0,200]、[200,400]的两个连续的数据块。由此可知,待读取数据针对两个第一目标数据块的第三地址空间分别为[50,200]、[200,300]。然后,针对每个第一目标数据块,来获取目标记录项。在此以第三地址空间[50,200]为例来进行详细说明。在本实施例中,冗余视图中的各第一记录项按照目标LUN的优先级从高到低的顺序排列。即优先级高的目标LUN对应的第一记录项排列靠前,优先级低的目标LUN对应的第一记录项排列靠后。因此根据冗余视图中的各第一记录项中的目标LUN的优先级从高到低的顺序,遍历冗余视图中的每个第一记录项,得到与第三地址空间存在交集的第二地址空间对应的目标记录项,且第三地址空间是至少一个第二地址空间形成的地址空间的子集,针对同一冗余数据,目标记录项中的目标LUN的优先级高于其它第一记录项中的目标LUN的优先级。下面以图4所示的实施例进行详细说明。

图4为本发明实施例提供的数据读取方法的流程示意图二。如图4所示,该方法包括:

S201、获取冗余视图中的第一个第一记录项;

S202、判断第三地址空间的剩余地址空间与第一记录项对应的第二地址空间是否有交集,若是,执行步骤203,若否,执行步骤206;

S203、判断第三地址空间是否是多个第二地址空间形成的地址空间的子集,若是,执行步骤204,若否,执行步骤206;

S204、读取冗余数据正常;

S205、将冗余数据返回给主机,并对源LUN进行修复;

S206、获取冗余视图中的下一个第一记录项;

S207、判断该下一个第一记录项是否为空;若否,执行步骤202,若是,执行步骤208;

S208、向主机返回介质错误。

具体地,获取冗余视图中的第一个第一记录项,即优先级最高的记录项。若该第一记录项对应的第二地址空间为[20,40],与第三地址空间的剩余地址空间[50,200]没有交集,则获取下一个第一记录项,即优先级为次高级的记录项;若该第一记录项对应的第二地址空间为[30,100],与第三地址空间的剩余地址空间[50,200]存在交集[50,100],但该第三地址空间[50,200]不是第二地址空间[30,100]的子集,则获取下一个第一记录项;若下一个第一记录项对应的第二地址空间为[80,200],与第三地址空间的剩余地址空间[101,200]存在交集[101,200],且第三地址空间[50,200]是至少一个第二地址空间形成的地址空间[30,100]的子集,则读取冗余数据,即从第二地址空间中依次读取交集部分的冗余数据。然后将冗余数据返回给主机,若遍历所有的第一记录项之后,也未达到第三地址空间是至少一个第二地址空间形成的地址空间的子集,则向主机返回介质错误,无法读取数据。

本领域技术人员可以理解,通过上述根据优先级获取的冗余数据,为获取冗余数据的最优路径,即通过最短的时间可以获取待读取数据对应的完整的冗余数据。

在上述实施例的基础上,之所以能够根据冗余视图,从目标LUN中获取冗余数据,是因为将源LUN对应的存储空间的数据同步到了目标LUN对应的存储空间。在此过程中,将该冗余数据对应的记录项插入到冗余视图中。

下面采用具体的实施例,来说明冗余数据对应的记录项插入到冗余视图中的具体实现过程。

图5为本发明实施例提供的插入冗余视图记录项的流程示意图。如图5所示,该方法包括:

S301、获取所述源LUN的标识、待插入冗余视图的第二记录项。

在将源LUN对应的存储空间中的数据同步到目标LUN对应的存储空间中时,获取源LUN的标识和待插入冗余视图的第二记录项。其中,第二记录项中包括第三冗余数据的第三起始地址和第三数据长度、第三冗余数据对应的目标LUN的标识以及目标LUN的优先级。

S302、根据所述第三起始地址、第三数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述第三冗余数据对应的至少一个第二目标数据块;

步骤302中的确定至少一个第二目标数据块的实现方式与步骤102中的确定至少一个第一目标数据块的实现方式类似,本实施例此处不再赘述。

S303、根据各所述第二目标数据块对应的冗余视图中每个第一记录项中存储的目标LUN的优先级以及所述第二记录项中存储的目标LUN的优先级,对各所述第二目标数据块对应的冗余视图进行插入记录项的处理。

具体地,根据第三起始地址、第三数据长度以及每个数据块的地址空间,确定第三冗余数据针对每个第二目标数据块的第三记录项,第三记录项中包括第四起始地址、第四数据长度、第三冗余数据对应的目标LUN的标识以及目标LUN的优先级,针对任一第二目标数据块,根据冗余视图中的各第一记录项的优先级从高到低的顺序,遍历冗余视图中的每个第一记录项,直至第三记录项中的目标LUN的优先级高于第一记录项中的目标LUN的优先级为止,将第三记录项插入到该第一记录项之前。

在具体实现过程中,当第二记录项中的第三起始地址和第三数据长度对应的地址空间跨越多个数据块时,需要将第二记录项拆分成多个第三记录项。当第二记录项中的第三起始地址和第三数据长度对应的地址空间仅对应一个数据块时,则第二记录项与第三记录项等同。

在将第二记录项拆分成多个第三记录项时,即将第二记录项中的第三起始地址和第三数据长度形成的地址空间,根据数据块的地址空间,拆分成多个地址空间,从而形成多个第三记录项。在每个第三记录项中,目标LUN的标识以及目标LUN的优先级与被拆分中第二记录项相同。

针对第二目标数据块,根据该第二目标数据块对应的冗余视图中的各第一记录项的优先级从高到低的顺序,遍历冗余视图中的每个第一记录项。例如,第三记录项中的目标LUN的优先级为3级,冗余视图中的各第一记录项的优先级从高到低为1级、2级、3级、4级、5级,在遍历到优先级为4级的第一记录项时,将该第三记录项插入到该第一记录项之前。

本领域技术人员可以理解,若存在优先级为3级的第一记录项,则判断第三记录项与该第一记录项是否有交集,如果存在交集,则可以进行合并处理。例如,优先级为3级的第一记录项对应的地址空间为[50,100],第三记录项对应的地址空间为[80,120],则进行合并处理,将上述的两项合并成[50,120],即插入的记录项的数据起始地址为50,数据长度为70。

主机对源LUN新写入数据完成,此时还没有完成将源LUN本次更新的数据同步到目标LUN上(在对源LUN新写入数据之前,源LUN和目标LUN在上一个周期是已经同步的,因此,存在一个历史冗余记录项记录目标LUN是源LUN的冗余数据的),因为新写入了数据,源LUN数据已经变化但还没有同步到目标LUN上,因此目标LUN上此位置的数据不再是冗余数据,而是错误的数据,因此在源LUN中写入数据时,需要删除冗余视图中的记录项。

下面对删除冗余视图中的记录项的具体过程进行详细说明。

图6为本发明实施例提供的删除冗余视图记录项的流程示意图一。如图6所示,该方法包括:

S401、获取所述源LUN对应的存储空间的新写入数据的写入信息;

在源LUN对应的存储空间新写入数据时,获取写入信息。其中,写入信息包括源LUN的标识、新写入数据的第四起始地址和第四数据长度。

S402、根据所述新写入数据的第四起始地址、第四数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述新写入数据对应的至少一个第三目标数据块。

步骤402中的确定至少一个第三目标数据块的实现方式与步骤102中的确定至少一个第一目标数据块的实现方式类似,本实施例此处不再赘述。

然后,根据各第三目标数据块对应的冗余视图中每个第四记录项中的第五起始地址和第五数据长度、第四起始地址和第四数据长度,对各第三目标数据块对应的冗余视图进行删除记录项的处理。具体可参见步骤403与步骤404。

S403、根据所述第四起始地址、所述第四数据长度以及每个数据块的地址空间,确定所述新写入数据针对每个第三目标数据块的第六起始地址和第六数据长度以及第四地址空间。

本实施例的确定第四地址空间的实现方式,与第三地址空间的实现方式类似,本实施例此处不再赘述。

S404、遍历所述冗余视图中的每个第四记录项,若所述第四记录项对应的第五地址空间与所述第四地址空间存在交集,则根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

在具体实现过程中,若第四记录项中的第五起始地址和第五数据长度形成的第五地址空间存在交集,则说明第四记录项对应的部分数据为更新前的该地址空间的冗余数据,并不是新写入数据对应的冗余数据,所以需要删除。

步骤404的具体实现过程,可参见图7所示。图7为本发明实施例提供的删除冗余视图记录项的流程示意图二。如图7所示,该方法包括:

S501、获取冗余视图中的第一个第四记录项;

S502、判断第四地址空间与第四记录项对应的第五地址空间是否存在交集;若是,执行S502,若否;执行S507;

S503、根据第五起始地址、第五数据长度、第六起始地址和第六数据长度建立第一分解空间R1和第二分解空间R2;

其中,R1的起始地址和数据长度如下:

R1_lba=D5;R1_len=D6-D5;

其中,R2的起始地址和数据长度如下:

R2_lba=D6+L6;R2_len=D5+L5-D6-L6,所述R1_lba为所述第一分解空间的起始地址,所述R1_len为所述第一分解空间的数据长度,所述R2_lba为所述第二分解空间的起始地址,所述R2_len为所述第二分解空间的数据长度,所述D5为第五起始地址、所述D6为第六起始地址、所述L5为第五数据长度、所述L6为第六数据长度;

S504、若所述R1的数据长度大于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项和第六记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

S505、若所述R1的数据长度大于0,所述R2的数据长度小于等于0,则删除所述第四记录项,并插入第六记录项,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

S506、若所述R1的数据长度小于等于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5;

S507、获取冗余视图中的下一个第四记录项;

S508、判断该下一个第四记录项是否为空,若是,执行S509,若否,执行S502;

S509、返回参数错误。

本领域技术人员可以理解,S504与S506为则其一的关系,即三种情况不能同时存在,只能存在三者其一。针对三种情况分别举例进行说明。

本实施例的遍历过程为遍历冗余视图中的每个记录项,直至所有记录项遍历完成。

针对S504,新写入数据针对该数据块的起始地址D6=50,数据长度L6=100,第四地址空间[50,150];第四记录项的起始地址D5=20,数据长度L5=150,第五地址空间[20,170],则删除第四记录项,插入第五记录项,第五记录项的起始地址为20,数据长度为30,插入第六记录项,第六记录项的起始地址为150,数据长度为20。

针对S505,新写入数据针对该数据块的起始地址D6=50,数据长度L6=100,第四地址空间[50,150];第四记录项的起始地址D5=70,数据长度L5=130,第五地址空间[70,200],则删除第四记录项,插入第六记录项,第六记录项的起始地址为150,数据长度为50。

针对S506,新写入数据针对该数据块的起始地址D6=50,数据长度L6=100,第四地址空间[50,150];第四记录项的起始地址D5=20,数据长度L5=60,第五地址空间[20,80],则删除第四记录项,插入第五记录项,第五记录项的起始地址为20,数据长度为30。

综上,本发明实施例提供的数据读取方法,可以避免因为硬盘有坏道或部分错误数据,而返回上层错误导致业务中断的问题,通过冗余视图方式将存储系统中某个LUN的分散在各个地方的冗余数据块组织起来,可以通过小范围读取数据完成坏道数据或错误数据的自动修复,提高源LUN的数据可靠性。

上述针对存储设备所实现的功能,对本发明实施例提供的方案进行了介绍。可以理解的是,存储设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。结合本发明中所公开的实施例描述的各示例的单元及算法步骤,本发明实施例能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同的方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的技术方案的范围。

本发明实施例可以根据上述方法示例对存储设备进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

图8为本发明实施例提供的存储设备的结构示意图二。如图8所示,该存储设备10包括:接收模块11、处理模块12以及发送模块13。其中

接收模块11,用于获取主机的读取指令,所述读取指令中包括源逻辑单元号LUN的标识以及待读取数据的第一起始地址以及第一数据长度,所述源LUN对应有冗余视图,所述冗余视图包括至少一个第一记录项,每个所述第一记录项中存储有对所述源LUN中的至少部分数据进行冗余存储的目标LUN的标识;

处理模块12,用于在确定所述源LUN对应的存储空间中的数据无法读取时,根据所述第一起始地址、第一数据长度以及所述冗余视图,确定所述待读取的数据对应的目标LUN的标识,根据所述待读取数据对应的目标LUN的标识,读取第一冗余数据;

发送模块13,用于将所述第一冗余数据返回至所述主机。

可选地,所述源LUN对应的存储空间被划分为多个数据块,其中,每个所述数据块各自对应有冗余视图;所述处理模块12具体用于:

根据所述第一起始地址、第一数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述待读取的数据对应的至少一个第一目标数据块;

根据各所述第一目标数据块对应的冗余视图中的第一记录项,确定所述待读取数据对应的目标LUN的标识。

可选地,所述第一记录项中还存储有第二冗余数据的第二起始地址和第二数据长度,所述第二起始地址和所述第二数据长度形成的第二地址空间为数据块的地址空间的子集;

所述处理模块12具体用于:

根据所述第一起始地址和所述第一数据长度,确定第一地址空间;

根据所述第一地址空间、各所述第一目标数据块对应的冗余视图中的第一记录项对应的第二地址空间,确定与所述第一地址空间存在交集的第二地址空间对应的目标记录项,且所述第一地址空间是多个所述第二地址空间形成的地址空间的子集;

根据各所述目标记录项,确定所述待读取数据对应的目标LUN的标识。

可选地,所述第一记录项中还存储有各目标LUN的优先级;

所述处理模块12具体用于:

根据所述第一地址空间以及每个数据块的地址空间,确定所述待读取数据针对每个第一目标数据块的第三地址空间;

针对任一第一目标数据块,根据所述冗余视图中的各第一记录项中的目标LUN的优先级从高到低的顺序,遍历所述冗余视图中的每个第一记录项,得到与所述第三地址空间存在交集的第二地址空间对应的目标记录项,且所述第三地址空间是至少一个所述第二地址空间形成的地址空间的子集,针对同一冗余数据,所述目标记录项中的目标LUN的优先级高于其它第一记录项中的目标LUN的优先级。

可选地,所述处理模块12还用于:

获取所述源LUN的标识、待插入冗余视图的第二记录项,所述第二记录项中包括第三冗余数据的第三起始地址和第三数据长度、所述第三冗余数据对应的目标LUN的标识以及所述目标LUN的优先级;

根据所述第三起始地址、第三数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述第三冗余数据对应的至少一个第二目标数据块;

根据各所述第二目标数据块对应的冗余视图中每个第一记录项中存储的目标LUN的优先级以及所述第二记录项中存储的目标LUN的优先级,对各所述第二目标数据块对应的冗余视图进行插入记录项的处理。

可选地,所述处理模块12具体用于:

根据所述第三起始地址、所述第三数据长度以及每个数据块的地址空间,确定所述第三冗余数据针对每个第二目标数据块的第三记录项,所述第三记录项中包括第四起始地址、第四数据长度、所述第三冗余数据对应的目标LUN的标识以及所述目标LUN的优先级;

针对任一第二目标数据块,根据所述第二目标数据块对应的冗余视图中的各第一记录项的优先级从高到低的顺序,遍历所述冗余视图中的每个第一记录项,直至所述第三记录项中的目标LUN的优先级高于第一记录项中的目标LUN的优先级为止,将所述第三记录项插入到该第一记录项之前。

可选地,所述处理模块12还用于:

获取所述源LUN对应的存储空间的新写入数据的写入信息,所述写入信息包括所述源LUN的标识、所述新写入数据的第四起始地址和第四数据长度;

根据所述新写入数据的第四起始地址、第四数据长度以及所述源LUN的标识对应的各数据块的地址空间,确定所述新写入数据对应的至少一个第三目标数据块;

根据各所述第三目标数据块对应的冗余视图中每个第四记录项中的第五起始地址和第五数据长度、所述第四起始地址和所述第四数据长度,对各所述第三目标数据块对应的冗余视图进行删除记录项的处理。

可选地,所述处理模块12具体用于:

根据所述第四起始地址、所述第四数据长度以及每个数据块的地址空间,确定所述新写入数据针对每个第三目标数据块的第六起始地址和第六数据长度以及第四地址空间;

遍历所述冗余视图中的每个第四记录项,若所述第四记录项对应的第五地址空间与所述第四地址空间存在交集,则根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

可选地,所述处理模块12具体用于:

根据所述第五起始地址、第五数据长度、第六起始地址和第六数据长度建立第一分解空间R1和第二分解空间R2;

其中,所述R1的起始地址和数据长度如下:

R1_lba=D5;R1_len=D6-D5;

其中,所述R2的起始地址和数据长度如下:

R2_lba=D6+L6;R2_len=D5+L5-D6-L6,所述D5为第五起始地址、所述D6为第六起始地址、所述L5为第五数据长度、所述L6为第六数据长度;

根据所述R1的数据长度和所述R2的数据长度,对所述第三目标数据块对应的冗余视图进行删除记录项的处理。

可选地,所述处理模块12具体用于:

若所述R1的数据长度大于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项和第六记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

若所述R1的数据长度大于0,所述R2的数据长度小于等于0,则删除所述第四记录项,并插入第六记录项,所述第六记录项中的起始地址为D6+L6,数据长度为D5+L5-D6-L6;

若所述R1的数据长度小于等于0,所述R2的数据长度大于0,则删除所述第四记录项,并插入第五记录项,所述第五记录项中的起始地址为D5,数据长度为D6-D5。

本实施例提供的存储设备,可用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,本实施例此处不再赘述。

前述的存储设备的具体实现中,接收模块和发送模块可以被实现为通信接口,处理模块可以被实现为处理器,数据和程序代码可存储在存储器中,由处理器根据相应的程序指令控制执行。

图9为本发明实施例提供的存储设备的结构示意图三,如图9所示,该存储设备20包括至少一个处理器21、存储器22和通信接口23。所述至少一个处理器21、所述存储器22和所述通信接口23均通过总线24连接;所述存储器22存储计算机执行指令;所述至少一个处理器21执行所述存储器22存储的计算机执行指令,使得所述存储设备20通过所述通信接口43获取主机的读取指令,根据该读取指令执行上述的方法实施例,并向主机返回正确数据的过程。

在上述存储设备的具体实现中,应理解,处理器21可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application Specific Integrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。

存储器22可以是以下的任一种或任一种组合:固态硬盘(Solid StateDrives,简称SSD)、机械硬盘、磁盘、磁盘整列等存储介质。

通信接口23可以是接口卡等与主机建立连接的接口。

总线24可以包括地址总线、数据总线、控制总线等,为便于表示,图9中用一条粗线表示该总线。该总线可以是以下的任一种或任一种组合:工业标准体系结构(Industry Standard Architecture,简称ISA)总线、外设组件互连标准(Peripheral Component Interconnect,简称PCI)总线、扩展工业标准结构(Extended Industry Standard Architecture,简称EISA)总线等有线数据传输的器件。

此外,本发明实施例里还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当存储设备的至少一个处理器执行该计算机执行指令时,存储设备执行上述各种可能设计提供的数据读取方法。

本发明实施例里还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中。存储设备的至少一个处理器可以从计算机可读存储介质读取该计算机执行指令,至少一个处理器执行该计算机执行指令使得存储设备实施前述方法实施例中的各种可能设计提供的数据读取方法。

本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1