一种磁盘数据读写方法及装置与流程

文档序号:14481263阅读:227来源:国知局

本发明涉及计算机技术领域,特别涉及一种磁盘数据读写方法及装置。



背景技术:

目前,如图1所示,磁盘分为两部分存储区域,分别为索引区和数据区,主备关键数据集中存储在索引区,对象数据集中存储在数据区,其中,关键数据包括:元数据和对象数据的索引,元数据包括:启动信息、元数据描述信息、块位图、坏块位和索引的分配信息。另外,关键数据存储在磁盘的索引区的对象块;对象数据存储在磁盘的数据区的对象块中的,存储关键数据的对象块有:

启动块,用于存储启动信息,包括元数据描述块的标识和占用存储空间的大小;

元数据描述块,用于存储元数据描述信息,包括块位图块、坏块位图块和索引分配信息块的标识和占用存储空间的大小;

块位图块,用于存储块位图,包括每一对象块的使用情况信息;

坏块位图块与块位图块对应;这里,若对象块中有一个扇区损坏,那么该对象块可以称为坏块;

索引分配信息块,用于存储索引的分配信息,包括:每一索引块的标识和占用存储空间的大小;

索引块,用于存储对象数据的索引,包括:对象数据占用对象块的标识和占用存储空间的大小。

当需要读取/写入对象数据时,对关键数据的操作都集中在索引区的对象块中,也就是,集中在索引区,这种情况下,容易引起索引热点数据访问,造成磁盘的损坏,进而降低磁盘的使用寿命和安全性。



技术实现要素:

本发明实施例公开了一种磁盘数据读写方法及装置,以增加磁盘的使用寿命和安全性。

为达到上述目的,本发明实施例公开了一种磁盘数据读取方法,所述磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;所述主元数据块位于所述磁盘的头部;所述备元数据块位于所述磁盘的尾部;所述至少一个对象块组位于所述主元数据块和所述备元数据块之间;所述方法包括:

接收针对目的对象数据的读取指令;

根据所述目的对象数据的标识、所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组;

从所述第一对象块组的所述第一数据块中读取所述目的对象数据。

可选的,所述索引块包括主索引块和备索引块;所述主索引块用于存储对象数据的索引,所述备索引块用于备份对象数据的索引;

对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间;

所述根据所述目的对象数据的标识、所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组的步骤,包括:

读取所述主元数据块中的元数据和/或所述备元数据块中备份的元数据,确定每一对象块组中主索引块和备索引块的位置;

读取所确定的位置处的主索引块中的索引或备索引块中备份的索引;

根据读取到的索引和所述目的对象数据的标识,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组。

可选的,所述磁盘还包括:至少一个保留块;所述方法还包括:

当读取所述主元数据块中的元数据失败、或读取所述备元数据块中备份的元数据失败、或读取每一对象块组中主索引块中的索引失败、或读取每一对象块组中备索引块中备份的索引失败时,将读取失败的对象块确定为疑似坏块,重新向所述疑似坏块中写入对象数据和/或从所述疑似坏块中读取对象数据;

若写入和/或读取对象数据成功,根据主、备冗余数据,修复所述疑似坏块中的数据;

若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据主、备冗余数据,覆盖所获取的保留块,并更新所述主元数据块中的元数据和所述备元数据块中备份的元数据。

可选的,所述根据所述目的对象数据的标识、所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组的步骤,包括:

计算所述目的对象数据的标识的第一索引校验值;

从预设索引数据库中获取所述第一索引校验值对应的第一数据块的标识和第一数据长度;所述预设索引数据库用于存储索引校验值、数据块的标识与数据长度三者间的对应关系;所述预设索引数据库中存储的索引校验值根据所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引确定;

根据所述第一数据块的标识,确定所述第一数据块;

所述从所述第一对象块组的所述第一数据块中读取所述目的对象数据的步骤,包括:

从所述第一对象块组的所述第一数据块中读取所述第一数据长度的所述目的对象数据。

为达到上述目的,本发明实施例还公开了一种磁盘数据写入方法,所述磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;所述主元数据块位于所述磁盘的头部;所述备元数据块位于所述磁盘的尾部;所述至少一个对象块组位于所述主元数据块和所述备元数据块之间;所述方法包括:

接收针对目的对象数据的写入指令;

从所述至少一个对象块组中确定空闲的第一数据块,并确定所述第一数据块对应的第一对象块组;

将所述目的对象数据写入所述第一对象块组的所述第一数据块,并根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中备份的元数据。

可选的,所述索引块包括主索引块和备索引块;所述主索引块用于存储对象数据的索引,所述备索引块用于备份对象数据的索引;

对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间;

所述根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中备份的元数据的步骤,包括:

将所述目的对象数据的标识作为索引写入所述第一对象块组中的主索引块,将所述目的对象数据的标识作为索引写入所述第一对象块组中的备索引块,更新所述主元数据块中的所述第一数据块对应的元数据,并将所述第一数据块对应的元数据备份至所述备元数据块中。

可选的,所述磁盘还包括:至少一个保留块;所述方法还包括:

当更新所述第一对象块组中主索引块中的索引失败、或更新所述第一对象块组中备索引块中备份的索引失败、或更新所述主元数据块中的元数据失败、或更新所述备元数据块中备份的元数据失败时,将更新失败的对象块确定为疑似坏块,重新向所述疑似坏块中写入对象数据和/或从所述疑似坏块中读取对象数据;

若写入和/或读取对象数据成功,根据主、备冗余数据,修复所述疑似坏块中的关键数据;

若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据主、备冗余数据,覆盖所获取的保留块,并更新所述主元数据块中的元数据和所述备元数据块中备份的元数据。

可选的,在所述根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中备份的元数据的步骤之后,所述方法还包括:

计算所述目的对象数据的标识的第一索引校验值;

将所述第一索引校验值、所述第一数据块的标识和所述目的对象数据的第一数据长度对应存储至预设索引数据库中;所述预设索引数据库用于存储索引校验值、数据块的标识与数据长度三者间的对应关系。

为达到上述目的,本发明实施例还公开了一种磁盘数据读取装置,所述磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;所述主元数据块位于所述磁盘的头部;所述备元数据块位于所述磁盘的尾部;所述至少一个对象块组位于所述主元数据块和所述备元数据块之间;所述装置包括:

指令接收单元,用于接收针对目的对象数据的读取指令;

信息确定单元,用于根据所述目的对象数据的标识、所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组;

数据读取单元,用于从所述第一对象块组的所述第一数据块中读取所述目的对象数据。

可选的,所述索引块包括主索引块和备索引块;所述主索引块用于存储对象数据的索引,所述备索引块用于备份对象数据的索引;

对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间;

所述信息确定单元,具体用于:

读取所述主元数据块中的元数据和/或所述备元数据块中备份的元数据,确定每一对象块组中主索引块和备索引块的位置;

读取所确定的位置处的主索引块中的索引或备索引块中备份的索引;

根据读取到的索引和所述目的对象数据的标识,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组。

可选的,所述磁盘还包括:至少一个保留块;所述装置还包括:

坏块确定单元,用于当读取所述主元数据块中的元数据失败、或读取所述备元数据块中备份的元数据失败、或读取每一对象块组中主索引块中的索引失败、或读取每一对象块组中备索引块中备份的索引失败时,将读取失败的对象块确定为疑似坏块,重新向所述疑似坏块中写入对象数据和/或从所述疑似坏块中读取对象数据;

数据修复单元,用于若写入和/或读取对象数据成功,根据主、备冗余数据,修复所述疑似坏块中的数据;

数据覆盖单元,用于若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据主、备冗余数据,覆盖所获取的保留块,并更新所述主元数据块中的元数据和所述备元数据块中备份的元数据。

可选的,所述信息确定单元,具体用于:

计算所述目的对象数据的标识的第一索引校验值;

从预设索引数据库中获取所述第一索引校验值对应的第一数据块的标识和第一数据长度;所述预设索引数据库用于存储索引校验值、数据块的标识与数据长度三者间的对应关系;所述预设索引数据库中存储的索引校验值根据所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引确定;

根据所述第一数据块的标识,确定所述第一数据块;

所述数据读取单元,具体用于:

从所述第一对象块组的所述第一数据块中读取所述第一数据长度的所述目的对象数据。

为达到上述目的,本发明实施例还公开了一种磁盘数据写入装置,所述磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;所述主元数据块位于所述磁盘的头部;所述备元数据块位于所述磁盘的尾部;所述至少一个对象块组位于所述主元数据块和所述备元数据块之间;所述装置包括:

指令接收单元,用于接收针对目的对象数据的写入指令;

信息确定单元,用于从所述至少一个对象块组中确定空闲的第一数据块,并确定所述第一数据块对应的第一对象块组;

数据写入单元,用于将所述目的对象数据写入所述第一对象块组的所述第一数据块,并根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中备份的元数据。

可选的,所述索引块包括主索引块和备索引块;所述主索引块用于存储对象数据的索引,所述备索引块用于备份对象数据的索引;

对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间;

所述数据写入单元,具体用于:

将所述目的对象数据的标识作为索引写入所述第一对象块组中主索引块,将所述目的对象数据的标识作为索引写入所述第一对象块组中备索引块,更新所述主元数据块中的所述第一数据块对应的元数据,并将所述第一数据块对应的元数据备份至所述备元数据块中。

可选的,所述磁盘还包括:至少一个保留块;所述装置还包括:

坏块确定单元,用于当更新所述第一对象块组中主索引块中的索引失败、或更新所述第一对象块组中备索引块中备份的索引失败、或更新所述主元数据块中的元数据失败、或更新所述备元数据块中备份的元数据失败时,将更新失败的对象块确定为疑似坏块,重新向所述疑似坏块中写入对象数据和/或从所述疑似坏块中读取对象数据;

数据修复单元,用于若写入和/或读取对象数据成功,根据主、备冗余数据,修复所述疑似坏块中的关键数据;

数据覆盖单元,用于若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据主、备冗余数据,覆盖所获取的保留块,并更新所述主元数据块中的元数据和所述备元数据块中备份的元数据。

可选的,所述装置还包括:

校验值计算单元,用于在根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中的备份元数据之后,计算所述目的对象数据的标识的第一索引校验值;

校验值存储单元,用于将所述第一索引校验值、所述第一数据块的标识和所述目的对象数据的第一数据长度对应存储至预设索引数据库中;所述预设索引数据库用于存储索引校验值、数据块的标识与数据长度三者间的对应关系。

本发明实施例提供了一种磁盘数据读写方法及装置,磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间;这样,在读写对象数据时,可以分别操作索引块中的索引、主元数据块中的元数据、以及备元数据块中的备份元数据。关键数据,也就是索引、元数据,分散在不同的区域中,避免了索引热点数据访问的几率,进而增加了磁盘的使用寿命和安全性。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为背景技术提供的一种磁盘结构示意图;

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

图3为本发明实施例使用的一种磁盘结构示意图;

图4为本发明实施例使用的另一种磁盘结构示意图;

图5为本发明实施例使用的一种对象块组结构示意图;

图6为本发明实施例提供的一种坏块检测流程示意图;

图7为本发明实施例提供的一种磁盘数据读取装置的结构示意图;

图8为本发明实施例提供的一种磁盘数据写入方法的一种流程示意图;

图9为本发明实施例提供的一种磁盘数据写入方法的另一种流程示意图;

图10为本发明实施例提供的一种磁盘格式化的流程示意图;

图11为本发明实施例提供的一种磁盘数据写入装置的一种结构示意图;

图12为本发明实施例提供的一种磁盘数据写入装置的另一种结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

下面通过具体实施例,对本发明进行详细说明。

参考图2,图2为本发明实施例提供的一种磁盘数据读取方法的流程示意图,如图3所示,该磁盘可以包括:存储元数据的主元数据块、备份元数据的备元数据块和至少一个对象块组,每一对象块组包括:存储对象数据的数据块和存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间。这里,一个数据块可以理解为一个对象块;磁盘的头部为磁盘中每次读取数据的起始位置,磁盘的尾部为磁盘中与磁盘头部对应的磁盘最后的位置。

参考图4,一般的,主、备元数据块可以包括:启动块、元数据描述块、块位图块、坏块位图块和索引分配信息块:其中,

启动块是磁盘特有的关键块,包含磁盘是否能作为文件系统来存储对象数据的所有关键信息,类似于标准文件系统的超级块。启动块包括主、备启动块两个区域,主启动块在磁盘的头部,从0开始向后偏移启动块大小,备启动块在磁盘最后的位置向前(也就是向磁盘的头部方向)偏移启动块大小,主、备启动块的内容完全一样,备启动块的内容为主启动块的内容的备份,且各占用一个对象块,启动块会存储元数据描述块的描述信息,包括元数据描述块的标识及元数据描述块占用存储空间的大小等信息。启动块中还可以包括该启动块中存储的所有描述信息的校验值,该校验值用于校验启动块中的信息是否准确;

元数据描述块,用于存储块位图块、坏块位图块、索引分配块等描述信息,也就是,存储每个关键信息的对象块的标识和每个关键信息的对象块占用存储空间的大小等信息。元数据描述块中还可以包括该元数据描述块存储的所有描述信息的校验值,该校验值用于校验元数据描述块中的信息是否准确;元数据描述块包括主、备元数据描述块,备元数据描述块的内容为主元数据描述块的内容的备份;

块位图块,用于存储对象块数据的使用情况,磁盘按固定的对象块大小进行分块,磁盘中所有的信息均存储于对象块中,块使用位图中的每一位代表一个对象块的使用情况,“1”表示已使用,“0”表示未使用;块位图块包括主、备块位图块,备块位图块的内容为主块位图块的内容的备份;

坏块位图块的大小同块位图块,和块位图块一一对应,每一位表示一个对象块,不同的是:坏块位图块中“1”表示该对象块为坏块,“0”表示为正常对象块。坏块位图块的内容只有检测到坏块之后才会更新,每个对象块中只要有一个扇区损坏,该对象块就标记为坏块;坏块位图块包括主、备坏块位图块,备坏块位图块的内容为主坏块位图块的内容的备份;

索引分配信息块,用于存储每个对象块组中索引占用的对象块信息,每个对象块组在索引分配信息块中都有相应的描述信息,该描述信息会描述主备索引占用的对象块。索引分配信息块中还可以包括其存储的所有描述信息的校验值,该校验值用于校验索引分配信息块中的信息是否准确;索引分配信息块包括主、备索引分配信息块,备索引分配信息块的内容为主索引分配信息块的内容的备份。

上述磁盘数据读取方法包括:

s201:接收针对目的对象数据的读取指令;

s202:根据所述目的对象数据的标识、主元数据块中的元数据、备元数据块中备份的元数据和每一对象块组中索引块中的索引,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组;

一般的,当主元数据块中的元数据完整准确时,读取主元数据块中的元数据,根据读取到的元数据确定每一对象块组中索引块的位置,从所确定的位置处读取索引块中的索引;当主元数据块中的元数据不完整和/或不准确时,读取备元数据块中备份的元数据,根据读取到的元数据确定每一对象块组中索引块的位置,从所确定的位置处读取索引块中的索引。

在本发明的一个实施例中,为了避免因为误操作导致对象块组中的索引出现错误,进而导致无法读取数据的问题,如图5所示,在每一对象块组中,将索引块分为主索引块和备索引块;其中,主索引块用于存储对象数据的索引,备索引块用于备份对象数据的索引,这样,当主索引块中的索引出现错误时,可以根据备索引块中的索引修复主索引块中的索引;另外,为了避免引起索引热点数据访问,进而降低磁盘的使用寿命和磁盘中对象数据的安全性的问题,并且便于数据的存储,对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间。

这种情况下,当读取磁盘的头部中主元数据块中的元数据成功时,可以根据读取到的主元数据块中的元数据(例如,主索引分配信息块中的信息),确定每一对象块组中主索引块和备索引块的位置,读取所确定的位置处的主索引块中的索引或备索引块中备份的索引;

当读取到磁盘的头部中主元数据块中的元数据失败时,读取磁盘的尾部中备元数据块中备份的元数据,根据读取到的备元数据块中备份的元数据(例如,备索引分配信息块备份中的信息),确定每一对象块组中主索引块和备索引块的位置,读取所确定的位置处的主索引块中的索引或备索引块中备份的索引。

此时,读取到索引可以为主索引块中的索引,也可以为备索引块中的索引。读取到索引后,根据读取到的索引和目的对象数据的标识,确定目的对象数据对应的第一数据块,并确定第一数据块所在的第一对象块组。具体地,当确定目的对象数据的标识后,若读取到的索引与目的对象数据的标识匹配,则确定该读取到的索引对应的数据块为目的对象数据对应的第一数据块。

另外,磁盘的每一对象块组中包括的数据块是预先设置好的,当确定了第一数据块,也就可以确定第一数据块对应的第一对象块组。例如:磁盘中包括两个对象块组,分别为对象块组1和对象块组2,对象块组1中包括数据块1-8,对象块组2中包括数据块9-16;若确定了第一数据块,该第一数据块的标识为4,则可以确定第一数据块对应的第一对象块组为对象块组1。

在本发明的一个实施例中,目的对象数据的标识的大小和组成都是未知的,若直接根据目的对象数据的标识读取目的对象数据,将会耗费很长的时间和资源。为了减少耗费的时间和资源,可以预先设置一个索引数据库,该索引数据库可以用于存储索引校验值、数据块的标识与数据长度三者间的对应关系;这里,索引校验值长度小于对象数据的标识的长度,索引校验值可以根据主元数据块中的元数据、备元数据块中备份的元数据和索引块中的索引确定,例如:主索引分配信息块或备索引分配信息块中的索引占用的对象块的信息,确定索引块的位置,将对象数据的标识作为索引,存储至该确定的位置,进而根据该确定的位置存储的索引计算出索引校验值;数据块的标识为存储该索引校验值对应对象数据的对象块的标识。

这种情况下,接收到针对目的对象数据的读取指令后,上述s202,可以包括:

s2021、计算所述目的对象数据的标识的第一索引校验值;

s2022、从预设索引数据库中获取所述第一索引校验值对应的第一数据块的标识和第一数据长度;

s2023、根据所述第一数据块的标识,确定第一数据块;

s2024、进而根据第一数据块,确定第一对象块组。

此时,确定了目的对象数据的存储位置和数据长度,可以准确的读取到目的对象数据,也就是,可以从第一对象块组的第一数据块中读取到第一数据长度的目的对象数据。

在本发明的一个实施例中,可以采用md5和crc32算法计算索引校验值,也就是,采用md5_crc32计算目的对象数据的标识的第一索引校验值,或采用hash算法计算目的对象数据的标识的第一索引校验值,以缩短目的对象数据的标识的长度。

例如,采用md5_crc32计算对象数据的标识的索引校验值,若目的对象数据的标识为key1,在读取该目的对象数据时,可以计算得到key1的md5_crc32值为aa,若预设索引数据库中存储有<aa,4,132>,此时可以获得第一数据块的标识为4,获得目的对象数据的长度为132kbytes,根据标识4可以确定第一数据块,结合预先设置的每一对象块组中包括的数据块,确定第一数据块对应的第一对象块组,进而从第一对象块组的第一数据块4中读取到132kbytes的数据,也就是,读取到数据长度为132kbytes的目的对象数据。

s203:从所述第一对象块组的所述第一数据块中读取所述目的对象数据。

在本发明的一个实施例中,从第一对象块组的第一数据块中读取目的对象数据,可以为:当读取到第一对象块组中索引块中的信息时,若确定读取到的信息中包含有与目的对象数据的标识匹配的索引,可以确定该索引对应的数据块为第一数据块,从第一对象块组的索引块寻至第一数据块,读取第一数据块中存储的目的对象数据。

这里,当磁盘中包括两个及两个以上的对象块组时,每一对象块组中,对象块组中的数据块与索引块间的物理距离小于磁盘中只有一个对象块组时数据块与索引块间的物理距离,可以有效地缩短了磁盘的寻道时间,如上述从第一对象块组的索引块寻至第一数据块的时间缩短了。特别地,对象块组个数越多,缩短磁盘的寻道时间的效果越明显。

在本发明的一个实施例中,为了避免因磁盘长时间使用而出现坏块,降低磁盘中对象数据的安全性的问题,磁盘中还可以包括:至少一个保留块;保留块是磁盘中保留未被使用的一些对象块,这些对象块可以在非启动块的关键数据块(也就是,存储非启动信息的关键数据的主、备元数据块或对象块组中的主、备索引块)损坏后进行替换。一般的,当无法读取非启动信息的关键数据时,也就是,读取主元数据块中的元数据失败、或读取备元数据块备份中的元数据失败、或读取主索引块中的索引失败、或读取备索引块备份中的索引失败时,开始坏块的检测和替换,将读取失败的对象块确定为疑似坏块,重新向该疑似坏块中写入对象数据和/或从该疑似坏块中读取对象数据;若写入和/或读取对象数据成功,根据主、备冗余数据,修复该疑似坏块中的关键数据;若写入和/或读取对象数据失败,获取一个保留块,并由获取的保留块替换该疑似坏块,并根据主、备冗余数据,覆盖所获取的保留块,并更新主元数据块中的元数据和备元数据块中备份的元数据。

例如,对象块组中一个主索引块确定为疑似坏块,重新向从该疑似坏块中写入和/或读取对象数据,若写入和/或读取对象数据成功,可以根据该对象块组中备索引块中的索引,修复该疑似坏块中的数据;若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据该对象块组中备索引块中的索引,覆盖所获取的保留块,另外,磁盘中主索引块发生了变化,还需要更新主元数据块中主索引分配信息块中的数据和备元数据块中备索引分配信息块中的数据。

下面结合图6,说明当无法读取非启动信息的关键数据时坏块的检测和替换过程:

s01:获取坏块检测任务;

s02:判断坏块检测任务的磁盘是否为可用磁盘;如果是,执行s03;如果不是,结束本次坏块检测任务;

s03:重新向疑似坏块中写入对象数据和/或从疑似坏块中读取对象数据;

s04:判断是否写入和/或读取对象数据成功;如果是,执行s05;如果不是,执行s06;

其中,若写入和/或读取对象数据成功,则可以说明该疑似坏块不是坏块,该疑似坏块中存在元数据错误,可以根据主、备冗余数据修复该疑似坏块中的元数据;若写入和/或读取对象数据不成功,则可以说明该疑似坏块中存在扇区损坏,该疑似坏块是坏块,需要替换该疑似坏块。

s05:根据主、备冗余数据,修复该疑似坏块中的元数据;

s06:获取一个保留块,并由所获取的保留块替换该疑似坏块;

其中,所获取的保留块为未被使用的保留块。

s07:根据主、备冗余数据,覆盖所获取的保留块,更新主、备元数据块中的元数据。

一般的,如果对象块组的索引块损坏,需要更新索引分配信息块中的数据;如果索引分配信息块、坏块位图块或块位图块损坏,需要更新元数据描述块中的数据;如果元数据描述块损坏,需要更新启动块信息中的数据。

应用上述实施例,磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间;这样,在读写对象数据时,可以分别操作索引块中的索引、主元数据块中的元数据、以及备元数据块中的备份元数据。关键数据,也就是索引、元数据,分散在不同的区域中,避免了索引热点数据访问的几率,进而增加了磁盘的使用寿命和安全性。

参考图7,图7为本发明实施例提供的一种磁盘数据读取装置的结构示意图,与图2相对应,所述磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;所述主元数据块位于所述磁盘的头部;所述备元数据块位于所述磁盘的尾部;所述至少一个对象块组位于所述主元数据块和所述备元数据块之间;所述装置包括:

指令接收单元100,用于接收针对目的对象数据的读取指令;

信息确定单元200,用于根据所述目的对象数据的标识、所述主元数据块中的元数据、所述备元数据块中备份的元数据和每一对象块组中索引块中的索引,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组;

数据读取单元300,用于从所述第一对象块组的所述第一数据块中读取所述目的对象数据。

在本发明的一个实施例中,所述索引块可以包括主索引块和备索引块;所述主索引块用于存储对象数据的索引,所述备索引块用于备份对象数据的索引;

对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间;

这种情况下,所述信息确定单元200,具体可以用于:

读取所述主元数据块中的元数据和/或所述备元数据块中备份的元数据,确定每一对象块组中主索引块和备索引块的位置;

读取所确定的位置处的主索引块中的索引或备索引块中备份的索引;

根据读取到的索引和所述目的对象数据的标识,确定所述目的对象数据对应的第一数据块,并确定所述第一数据块所在的第一对象块组。

在本发明的一个实施例中,所述磁盘还可以包括:至少一个保留块;

这种情况下,所述装置还可以包括:

坏块确定单元(图7中未示出),用于当读取所述主元数据块中的元数据失败、或读取所述备元数据块中备份的元数据失败、或读取每一对象块组中主索引块中的索引失败、或读取每一对象块组中备索引块中备份的索引失败时,将读取失败的对象块确定为疑似坏块,重新向所述疑似坏块中写入对象数据和/或从所述疑似坏块中读取对象数据;

数据修复单元(图7中未示出),用于若写入和/或读取对象数据成功,根据主、备冗余数据,修复所述疑似坏块中的数据;

数据覆盖单元(图7中未示出),用于若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据主、备冗余数据,覆盖所获取的保留块,并更新所述主元数据块中的元数据和所述备元数据块中备份的元数据。

在本发明的一个实施例中,所述信息确定单元200,具体可以用于:

计算所述目的对象数据的标识的第一索引校验值;

从预设索引数据库中获取所述第一索引校验值对应的第一数据块的标识和第一数据长度;所述预设索引数据库用于存储索引校验值、数据块的标识与数据长度三者间的对应关系;所述预设索引数据库中存储的索引校验值根据主元数据块中的元数据、备元数据块中备份的元数据和每一对象块组中索引块中的索引确定;

根据所述第一数据块的标识,确定所述第一数据块;

所述数据读取单元300,具体可以用于:

从所述第一对象块组的所述第一数据块中读取所述第一数据长度的所述目的对象数据。

应用上述实施例,磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间;这样,在读写对象数据时,可以分别操作索引块中的索引、主元数据块中的元数据、以及备元数据块中的备份元数据。关键数据,也就是索引、元数据,分散在不同的区域中,避免了索引热点数据访问的几率,进而增加了磁盘的使用寿命和安全性。

参考图8,图8为本发明实施例提供的一种磁盘数据写入方法的一种流程示意图,如图3所示,该磁盘可以包括:存储元数据的主元数据块、备份元数据的备元数据块和至少一个对象块组,每一对象块组包括:存储对象数据的数据块和存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间。这里,一个数据块可以理解为一个对象块。

这种情况下,上述磁盘数据写入方法包括:

s801:接收针对目的对象数据的写入指令;

s802:从所述至少一个对象块组中确定空闲的第一数据块,并确定所述第一数据块对应的第一对象块组;

一般的,可以根据存储的主、备元数据,例如块位图,将块位图中使用情况标记为“0”对象块确定为空闲的第一数据块。

为了写入对象数据成功,在确定出空闲的第一数据块后,可以通过坏块位图块判断该第一数据块是否被标记为坏块;若为否,继续确定第一数据块对应的第一对象块组;若为是,则再次重新确定空闲的第一数据块。

在本发明的一个实施例中,磁盘每一对象块组中包括的数据块是预先设置好的,当确定了第一数据块,也就可以确定第一数据块对应的第一对象块组。如:磁盘中包括两个对象块组,分别为对象块组1和对象块组2,对象块组1中包括数据块1-8,对象块组2中包括数据块9-16;若确定第一数据块的标识为4,则可以确定第一数据块所在的第一对象块组为对象块组1。

s803:将所述目的对象数据写入所述第一对象块组的所述第一数据块,并根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、主元数据块中的元数据、以及备元数据块中备份的元数据。

在本发明的一个实施例中,为了避免因为误操作导致对象块组中的索引出现错误,进而导致无法读取数据的问题,如图5所示,在每一对象块组中,将索引块分为主索引块和备索引块;其中,主索引块用于存储对象数据的索引,备索引块用于备份对象数据的索引,这样,当主索引块中的索引出现错误时,可以根据备索引块中的索引修复主索引块中的索引;另外,为了避免引起索引热点数据访问,进而降低磁盘的使用寿命和磁盘中对象数据的安全性的问题,并且便于数据的存储,对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间。

这种情况下,s803可以为:将目的对象数据写入第一对象块组的第一数据块,将目的对象数据的标识作为索引写入第一对象块组中主索引块,将目的对象数据的标识作为索引写入第一对象块组中备索引块,更新主元数据块中的第一数据块对应的元数据,并将第一数据块对应的元数据备份至备元数据块中。例如,在目的对象数据写入第一对象块组的第一数据块后,将该目的对象数据的标识作为索引,写入第一对象块组中主索引块和备索引块中,并更新主、备元数据块中块位图块中的块位图,将块位图中第一数据块的使用情况标记为“1”,以便于下次写入对象数据时快速地获取到空闲的数据块。

在本发明的一个实施例中,为了避免因磁盘长时间使用而出现坏块,降低磁盘中对象数据的安全性的问题,磁盘中还可以包括:至少一个保留块;保留块是磁盘中保留未被使用的一些对象块,这些对象块可以在非启动块的关键数据块(也就是,存储非启动信息的关键数据的主、备元数据块或对象块组的主、备索引块)损坏后进行替换。一般的,当无法更新非启动信息的关键数据时,也就是,更新第一对象块组中主索引块中的索引失败、或更新第一对象块组中备索引块中备份的索引失败、或更新主元数据块中的元数据失败、或更新备元数据块中备份的元数据失败时,开始坏块的检测和替换,将更新失败的对象块确定为疑似坏块,重新向该疑似坏块中写入对象数据和/或从该疑似坏块中读取对象数据;若写入和/或读取对象数据成功,根据主、备冗余数据,修复该疑似坏块中的关键数据;若写入和/或读取对象数据失败,获取一个保留块,并由获取的保留块替换该疑似坏块,并根据主、备冗余数据,覆盖所获取的保留块,并更新主元数据块中的元数据和备元数据块中的备份元数据。一般的,当无法更新非启动信息的关键数据时坏块的检测和替换过程可参考图6。

在本发明的一个实施例中,目的对象数据的标识的大小和组成都是未知的,若直接根据目的对象数据的标识,从索引块中存储的索引中确定目的对象数据的标识所在的数据块,将会耗费很长的时间和资源。为了减少读取对象数据时耗费的时间和资源,可以预先设置一个索引数据库,该索引数据库可以用于存储索引校验值、数据块的标识与数据长度三者间的对应关系;这里,索引校验值的长度小于对象数据的标识的长度,索引校验值可以根据主元数据块中的元数据、备元数据块中备份的元数据和索引块中的索引确定;数据块的标识为存储该索引校验值对应的对象数据的对象块的标识。这种情况下,参考图9,在图8的基础上,在根据目的对象数据的标识,更新第一对象块组中索引块中的索引、主元数据块中的元数据、以及备元数据块中备份的元数据之后,上述磁盘数据写入方法还可以包括:

s901:计算所述目的对象数据的标识的第一索引校验值;

这里,计算第一索引校验值目的在于,缩短目的对象数据的标识的长度。在本发明的一个实施例中,可以采用md5和crc32算法计算索引校验值,也就是,采用md5_crc32计算目的对象数据的标识的第一索引校验值;或采用hash算法计算目的对象数据的标识的第一索引校验值。

例如,采用md5和crc32值计算目的对象数据的标识的第一索引校验值,写入指令针对的目的对象数据为<key1,value1>,该目的对象数据的长度为132kbytes,目的对象数据的标识为key1,另外,第一数据块的标识为4,在将value1写入第一对象块组的第一数据块,并根据目的对象数据的标识,更新第一对象块组中索引块中的索引、主元数据块中的元数据、以及备元数据块中的备份元数据之后,计算key1的md5_crc32值,若为aa,则将<aa,4,132>存储至预设索引数据库,这样,在读取该目的对象数据<key1,value1>时,就可以快速地获得第一数据块的标识为4,以及该目的对象数据的数据长度为132kbytes。

s902:将所述第一索引校验值、所述第一数据块的标识和所述目的对象数据的第一数据长度对应存储至预设索引数据库中。

在本发明的一个实施例中,为了便于写入对象数据,在向磁盘中写入数据前,可以先对磁盘进行格式化,参考图10,格式化的过程可以包括:

s11:获取格式参数;

这里,格式参数可以包括:单个对象块大小、对象块组索引块个数,单个索引大小,保留块大小等。

另外,为了便于确定对象块所属对象块组,可以按照单个对象块大小,将磁盘划分为n个对象块,并从0开始编号。

s12:判断格式化任务的磁盘是否为可用磁盘;如果是,执行s13;如果不是,结束本次坏块检测任务;

s13:计算启动块信息并下盘;

这里,计算启动块信息并下盘可以为:获取磁盘大小,计算对象块组大小,计算元数据描述块的描述信息,并填充开始格式化的标记信息。

在本发明的一个实施例中,对象块组大小的计算过程可以为:

例如,每个对象块组的主索引块个数为m(单位:对象块个数),单个索引大小为s(单位:kb),保留块个数为r(单位:对象块个数),单个对象块大小为b(单位:kb),磁盘总大小为t(单位:kb),则可以得出:

每个索引块可以索引的数据块个数object_index_num为:

object_index_num=b/s;

每个对象块组包含对象块个数group_total_object为:

group_total_object=object_index_num*m+2*m;

大小为t的磁盘包含对象块组个数group_num为:

完整对象块组:

g=((t/b)-5*2-r)/group_total_object;

其中,5*2表示主、备元数据块占用的对象块的个数。

最后一个对象块组对象块个数:

last=(t/b)-5*2-r-g-g*group_total_object;

如果最后一个对象块组对象块个数大于主备索引需要空间,即last>2*m,则保留该未满对象块组。否则,不使用该空间,也就是,

s14:计算元数据描述块信息并下盘;

s15:初始化块位图块信息并下盘;

磁盘中未存储任何对象数据,块位图块中对象块的使用情况都标记为“0”。

s16:初始化坏块位图块信息并下盘;

s17:计算索引分配信息块信息并下盘;

s18:初始化所有对象块组;

初始化每个对象块组时,需要初始化主备索引块信息,包括清空索引块并写入校验值,防止数据出错。

s19:重新计算启动块信息并下盘。

这里,重新计算启动块信息可以包括:填充格式化完毕的标记信息。

应用上述实施例,磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间;这样,在读写对象数据时,可以分别操作索引块中的索引、主元数据块中的元数据、以及备元数据块中的备份元数据。关键数据,也就是索引、元数据,分散在不同的区域中,避免了索引热点数据访问的几率,进而增加了磁盘的使用寿命和安全性。

参考图11,图11为本发明实施例提供的一种磁盘数据写入装置的一种结构示意图,与图8相对应,所述磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;所述主元数据块位于所述磁盘的头部;所述备元数据块位于所述磁盘的尾部;所述至少一个对象块组位于所述主元数据块和所述备元数据块之间;所述装置包括:

指令接收单元400,用于接收针对目的对象数据的写入指令;

信息确定单元500,用于从所述至少一个对象块组中确定空闲的第一数据块,并确定所述第一数据块对应的第一对象块组;

数据写入单元600,用于将所述目的对象数据写入所述第一对象块组的所述第一数据块,并根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中备份的元数据。

在本发明的一个实施例中,所述索引块可以包括主索引块和备索引块;所述主索引块用于存储对象数据的索引,所述备索引块用于备份对象数据的索引;

对于每一对象块组,该对象块组中的主索引块位于该对象块组的头部,该对象块组中的备索引块位于该对象块组的尾部;该对象块组中的数据块位于该对象块组的主索引块和备索引块之间;

这种情况下,所述数据写入单元600,具体可以用于:

将所述目的对象数据的标识作为索引写入所述第一对象块组中的主索引块,将所述目的对象数据的标识作为索引写入所述第一对象块组中的备索引块,更新所述主元数据块中的所述第一数据块对应的元数据,并将所述第一数据块对应的元数据备份至所述备元数据块中。

在本发明的一个实施例中,所述磁盘还可以包括:至少一个保留块;所述装置还可以包括:

坏块确定单元(图11中未示出),用于当更新所述第一对象块组中主索引块中的索引失败、或更新所述第一对象块组中备索引块中备份的索引失败、或更新所述主元数据块中的元数据失败、或更新所述备元数据块中备份的元数据失败时,将更新失败的对象块确定为疑似坏块,重新向所述疑似坏块中写入对象数据和/或从所述疑似坏块中读取对象数据;

数据修复单元(图11中未示出),用于若写入和/或读取对象数据成功,根据主、备冗余数据,修复所述疑似坏块中的关键数据;

数据覆盖单元(图11中未示出),用于若写入和/或读取对象数据失败,获取一个保留块,并替换所述疑似坏块;根据主、备冗余数据,覆盖所获取的保留块,并更新所述主元数据块中的元数据和所述备元数据块中备份的元数据。

在本发明的一个实施例中,参考图12,在图11的基础上,所述装置还可以包括:

校验值计算单元700,用于在根据所述目的对象数据的标识,更新所述第一对象块组中索引块中的索引、所述主元数据块中的元数据、以及所述备元数据块中备份的元数据之后,计算所述目的对象数据的标识的第一索引校验值;

校验值存储单元800,用于将所述第一索引校验值、所述第一数据块的标识和所述目的对象数据的第一数据长度对应存储至预设索引数据库中;所述预设索引数据库用于存储索引校验值、数据块的标识与数据长度三者间的对应关系。

应用上述实施例,磁盘包括:存储元数据的主元数据块、备份元数据的备元数据块、和至少一个对象块组,每一对象块组包括:存储对象数据的数据块、存储对象数据的索引的索引块;主元数据块位于磁盘的头部;备元数据块位于磁盘的尾部;上述至少一个对象块组位于主元数据块和备元数据块之间;这样,在读写对象数据时,可以分别操作索引块中的索引、主元数据块中的元数据、以及备元数据块中的备份元数据。关键数据,也就是索引、元数据,分散在不同的区域中,避免了索引热点数据访问的几率,进而增加了磁盘的使用寿命和安全性。

对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:rom/ram、磁碟、光盘等。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

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