数据块的多副本存储方法、存储设备、数据读取方法与流程

文档序号:11176979阅读:1542来源:国知局
数据块的多副本存储方法、存储设备、数据读取方法与流程

本申请涉及数据存储技术领域,尤其涉及一种数据块的多副本存储方法、存储设备、数据读取方法。



背景技术:

数据安全是计算机以及网络等学科的重要研究课题之一,它不仅关系到个人、企业,更重要的是它可能直接影响国家安全,因此对于重要的数据,需要进行备份等操作,避免由于底层存储异常导致数据丢失,例如避免由于raid(redundantarraysofindependentdisks,独立磁盘冗余阵列)故障丢失数据。

针对上述场景需求,现有技术中有多种解决方案,例如,数据备份、数据镜像、双活、以及远程复制等。但是存在的问题是,目前重要数据和非重要数据一般位于同一个lun(logicalunitnumber,逻辑单元)上,很难进行分离,因此只能针对整个lun进行备份等操作,那么很多非重要数据也会被顺带一起备份等操作,就会导致存储空间的严重浪费。

为解决上述备份等操作中存储空间浪费的问题,现有技术中提出一种针对文件级别的数据的处理方案,即使用特定软件针对部分重要的文件进行备份等操作。这种方法可以在很大程度上节省存储空间,但是存在的问题是如果文件损坏,需要通过对应的软件来进行修复,必须等待文件从备份数据中修复之后,才能恢复业务,该修复过程需要一定的时间,对于业务的连续性造成一定的影响。



技术实现要素:

有鉴于此,本申请提供一种数据块的多副本存储方法、存储设备、数据读取方法,在确保数据高可靠性的前提下,解决了现有技术中数据备份等操作导致的存储资源浪费以及文件修复造成的业务连续性受损的技术问题。

具体地,本申请是通过如下技术方案实现的:

第一方面,本申请实施例提供了一种数据块的多副本存储方法,应用于存储设备,所述方法包括如下步骤:

接收用于对数据块执行写操作的scsi写命令;

从所述scsi写命令中获取指定字段,所述指定字段用于指示所述数据块的副本的数量;

根据所述指定字段指示的数量写入所述数据块的副本。

可选地,所述根据所述指定字段指示的数量写入所述数据块的副本包括如下步骤:

确定所述数据块写入的raid;

从除所述raid之外的raid中选择与所述数量相同的raid,将所述副本分别写入至选择的各个raid。

可选地,所述方法还包括如下步骤:

在所述数据块对应的元数据中设置副本标识,并利用所述元数据记录所述副本的位置。

可选地,所述指定字段指示的数据块的副本数量是由与所述存储设备连接的外部服务器依据用户发送的拷贝命令设置,所述拷贝命令中包含数据块的副本数量。

可选地,所述指定字段指示的数据块的副本数量是由与所述存储设备连接的外部服务器依据从本地数据输入端口获取的副本数量设置。

第二方面,本申请实施例提供了一种存储设备,所述设备包括:

命令接收单元,用于接收用于对数据块执行写操作的scsi写命令;

字段获取单元,用于从所述scsi写命令中获取指定字段,所述指定字段用于指示所述数据块的副本的数量;

数据写入单元,用于根据所述指定字段指示的数量写入所述数据块的副本。

可选地,所述数据写入单元包括:

数据块raid确定子单元,用于确定所述数据块写入的raid;

写入子单元,用于从除所述raid之外的raid中选择与所述数量相同的raid,并将所述副本分别写入至选择的各个raid。

可选地,所述存储设备还包括元数据记录标识单元,所述元数据记录标识单元用于在所述数据块对应的元数据中设置副本标识,并利用所述元数据记录所述副本的位置。

第三方面,本申请实施例提供了一种数据读取方法,所述方法包括如下步骤:

接收数据块读取指令;

根据所述数据块读取指令确定所要读取的数据块的位置;

从所述数据块的位置开始读取所述数据块;若读取失败,则判断所述数据块是否具有副本标识;其中,所述副本标识用于指示所述数据块具有副本;

若所述数据块具有所述副本标识,则查找所述数据块的副本的位置,并根据所述副本的位置读取所述数据块的副本。

第四方面,本申请实施例提供了一种存储设备,所述存储设备包括:

指令接收单元,用于接收数据块读取指令;

位置确定单元,用于根据所述数据块读取指令确定所要读取的数据块的位置;

数据读取单元,用于从所述数据块的位置开始读取所述数据块;

若读取失败,所述数据读取单元还用于则判断所述数据块是否具有副本标识;若所述数据块具有所述副本标识,则查找所述数据块的副本的位置,并根据所述副本的位置读取所述数据块的副本;其中,所述副本标识用于指示所述数据块具有副本。

由上述技术方案可知,本申请实施例在存储数据时,存储设备从接收的scsi写命令中获取指定字段,并根据指定字段指示的副本的数量写入数据块的副本。本申请能够以数据块为单位形成多副本,保证了重要数据的高可靠性,同时避免了对整个lun进行备份、镜像等操作,极大地节省了存储设备的存储空间。

本发明申请实施例在读取数据块时,存储设备根据数据块读取指令从数据块的位置开始读取数据块。若读取失败,则判断该数据块是否具有副本,若该数据块具有副本,则从副本的位置处读取该数据块的副本。本申请在数据块读取失败时,能够直接利用存储设备自动检测副本并读取副本,整个数据读取过程的最长时间是毫秒量级的,完全避免了现有技术中利用修复软件修复文件等操作造成的业务连续性受损的缺陷,大大提高了副本读取的流畅性,提高了用户体验度。

附图说明

图1是本申请一示例性实施例示出的一种数据块的多副本存储方法流程框图;

图2是本申请一示例性实施例示出的另一种数据块的多副本存储方法流程框图;

图3是本申请一示例性实施例示出的一种数据读取方法流程框图;

图4是本申请一示例性实施例示出的另一种数据读取方法流程框图;

图5是本申请一示例性实施例示出的一种存储设备框图;

图6是本申请一示例性实施例示出的另一种存储设备框图;

图7~图11是本申请实施例中scsi写命令中指定地段位置示意图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中可能使用到的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

为方便理解,本申请先对下文中可能用到的名词进行说明。

raid:redundantarraysofindependentdisks,独立磁盘冗余阵列,其是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系统效能。

scsi:smallcomputersysteminterface,是一种主机和存储设备之间传送命令、状态和块数据等通信操作的规范的集合。

sbc:scsiblockcommands,scsi块设备指令集。

metadata:元数据,一种记录管理相关信息的数据,也可以理解为是一种用来描述数据的数据,元数据存储在存储设备上,例如,lun的元数据存储在raid上。

为解决现有技术中由备份、镜像等操作造成的存储资源浪费的技术问题,本申请实施例提供了一种数据块的多副本存储方法,应用于存储设备,如图1所示,该方法包括如下步骤:

s11、接收用于对数据块执行写操作的scsi写命令;

该步骤s11中,执行一次scsi写命令可以形成一个数据块;

s12、从scsi写命令中获取指定字段,指定字段用于指示数据块的副本的数量;

具体地,可以利用该指定字段对应的字节的预定位来指示副本的数量,其中预定位中设置为二进制数据,利用设置的二进制数据指示副本的数量。例如利用该指定字段对应的字节的第5、6位来定义需要写入的副本的数量,如果该字节的第5、6位设置为01表示该数据块需要写入的副本的数量为1个,如果该字节的第5、6位设置为10表示该数据块需要写入的副本的数量为2个,如果该字节的第5、6位设置为11表示该数据块需要写入的副本的数量为3个。当然该指定字段对应的字节的第5、6位还可以设置为00,表示该数据块不需要写入副本。副本的具体份数可以根据在不同的应用场景中数据块的重要程度进行灵活设置,保证了重要数据的高可靠性,同时有效降低了存储资源的浪费。另外,本申请不限于用两位作为预定位来指示副本的数量,可以用3位或4位等作为预定位来指示副本的数量,例如可以用该指定字段对应的字节的第4、5、6位作为预定位,来定义需要写入的副本的数量。

s13、根据指定字段指示的数量写入数据块的副本。

本领域技术人员应当知道的是,本申请在写入1个或多个副本的同时、之前或之后也写入了数据块本身。

上述数据块的多副本存储方法,只是对现有scsi协议中的write指令进行了一点改进,即在scsi写指令的预留字段中设置了副本的数量,在执行scsi写指令时就可以在存储设备中形成数据块的多个副本,操作简单便捷,有效保证了数据块的安全性,同时由于本申请是以数据块为单位形成的副本,因此有效节省了存储设备的存储空间,避免了存储资源的浪费。

需要说明的是,上述步骤s12中,指定字段是预先指定的scsi写命令中任意未定义的字段,在一种实施例中,上述指定字段可以是scsi写命令中的保留字段,即图7~图11中示出的reserved字段。利用保留字段reserved指定副本的数量不会对原scsi写命令产生任何影响。sbc协议中的每个写指令,即每个scsi写命令都会有几个未使用的保留字段,如图7~图11所示,每个scsi写命令中保留地段的位置不同,存储设备解析scsi协议时,会根据不同的写指令在对应的位置查找保留字段,继而解析各个scsi写指令的相关保留字段中的预留位,确定副本的数量。

通过执行步骤s13形成了数据块的1个或多个副本。应当说明的是,每个副本分别位于一个raid中,即不同的副本位于不同raid中,这样在其中一个raid故障或损坏时不至于影响其他raid中存储的副本的安全,即实现了在其中一个存储有副本的raid出现故障时,可以从其他存储有副本的raid中读取副本。同样的,用于存储数据块的raid与存储各个副本的raid均不相同,这样在存储数据块的raid故障或损坏时不至于影响存储在其他raid中的副本安全,即实现了存储数据块的raid故障时,可以从其他存储有副本的raid中读取副本。上述在不同的raid中存储数据块和副本的方法有效地提高了存储有重要数据的数据块的安全性。实现上述写入操作具体地包括如下步骤:

s131、确定数据块写入的raid;

s132、从除raid之外的raid中选择与副本的数量相同的raid,将副本分别写入至选择的各个raid。

需要说明的是,本申请中各个副本还可以位于不同的磁盘柜中或的不同的存储设备上。

执行上述步骤s11~s13后在存储设备中形成的数据块的1个或多个副本,但是只存储下来,而不能读取出来是毫无意义的,为实现对存储的副本的读取,上述方法还需包括如下步骤:

s14、在lun的元数据中,具体地在数据块对应的元数据中设置副本标识,并利用元数据记录副本的位置。

该步骤s14中,设置副本标识用于指示哪些数据块具有副本,在读取数据块失败时,首先判断该数据块是否具有副本标识,即首先判断该数据块是否具有副本。在确定具有副本之后,在记录各个数据块的副本的位置的元数据中查找该数据块的副本的位置,例如,查找副本所在raid的uuid(用于标识副本所在raid)和副本在该raid中的偏移(用于标识副本在该raid中的位置),根据这2个信息就可以确定副本的位置。之后根据副本的位置就可从存储设备中读取副本。

在数据块对应的元数据中记录副本标识以及副本的位置后,在后面读取副本的过程,存储设备可以自动完成,读取副本的时间是毫秒量级的,完全避免了由于现有技术中文件修复等操作造成的业务中断。

需要说明的是,上述执行数据块写操作的scsi写命令由与存储设备连接的外部服务器生成和发送。scsi写命令中的指定字段中的副本数量是由外部服务器依据用户发送的拷贝命令设置。在一种实施例中,该外部服务器通过下面的步骤设置指定字段中的副本数量:

s31、外部服务器接收拷贝命令;

其中该拷贝命令是文件系统中自定义的一个特殊的拷贝命令,用户或应用层通过该拷贝命令可以设置需要写入的副本的数量,例如该拷贝命令是copy2,那么表示目标文件中所有数据块需要生成的副本的数量均是2份。

s32、对拷贝命令进行解析得到副本的数量,并根据副本的数量设置指定字段。具体地,在调用底层封装scsi协议的模块时,即scsi指令封装层封装scsi指令时,会把生成目标文件的所有scsi写指令中的指定字段均填入解析得到的副本的数量。

本领域技术人员应当清楚的是,从文件系统的角度上,文件是最小的存储单位,文件所包含的任意一个数据块异常时,该文件都不能正常读取。因此即使该文件中只有一个数据块的重要,为保证该重要的数据块能够正常读取,该文件的其他数据块也必须能够正常读取,那么该文件的所有数据块均需要存储副本。上述第一服务器将预定拷贝命令中携带的副本的数量,填入了生成该目标文件的所有scsi写命令的指定字段,那么该目标文件的所有数据块具有相同数量的副本,充分保证了目标文件的安全,从而保证了目标文件中重要数据块的安全。

需要说明的是,在另一个实施例中上述执行数据块写操作的scsi写命令中指定字段指示的数据块的副本数量还可以由与存储设备连接的外部服务器依据从本地数据输入端口获取的副本数量设置。具体步骤如下:

s41、外部务器获取预定标识位信息;

该预定标识位信息可以是在目标文件打开的时候自定义的,该预定标识位会传递到scsi指令封装层,即底层封装scsi协议的模块,表示生成该目标文件所需要执行的所有scsi写命令的指定字段均需要填入副本数量。

s42、从数据输入端口获取副本数量,并根据副本的数量设置生成该目标文件所需要执行的所有scsi写命令中的指定字段。此步骤中,应用层在数据输入端口设置需要写入的副本的数量。

在上述实施例中也将生成目标文件的所有scsi写命令的指定字段填入了相同的数量,即生成的目标文件的所有数据块都具有相同数量的副本。上述步骤s31中拷贝命令中携带的副本的数量以及步骤s41中通过数据输入端口获取的副本的数量都是应用层根据实际的需要灵活设置的。如图2所示,获取副本的数量之后,scsi指令封装层根据上述数量在每个scsi写指令的指定字段填入相应的副本数量,至此完成了scsi写指令的改进。

上述利用外部服务器设置指定字段的实施例只是利用文件系统封装scsi指令的一种情景,当然还可以利用其它手段封装scsi指令,例如直接针对块设备进行读写的应用,这些应用就可以直接封装scsi指令,并下发给存储设备。

需要说明的是,如图2所示,为判断是否成功地写入了数据块和/或其副本,在写入数据块和/或其副本完成之后需要返回写入成功得标识,具体包括两种情景,第一种情景是,在数据块不需要存储副本时,写入数据块完成之后,即可返回一个写入成功的标识。第二种情景是,在数据块需要存储副本时,需要在数据块以及所有副本都写入成功之后,才能够返回写入成功的标识。

如图2所示,应用层设定的需要写入的副本的数量也可能是0,那么就不需要写入副本,那么scsi写指令正常写入数据块后返回写入成功的标识即可。

如图2所示,在写入的副本的数量不为0时,写入副本的raid一定是可用的raid,即该raid的剩余空间能够容纳副本。

在存储设备上写入副本的具体操作中,以定长的数据块作为副本的最小存储单位,例如该定长的数据块为4kb。

综上所述,上述多副本存储方法的实施例能够以数据块为单位对重要数据生成多副本,确保了重要数据的安全,同时节省了宝贵的存储资源。同时由于存储设备中存储了副本标识以及副本的位置,使得与该方法对应的存储设备可以自动完成副本的读取,提高了数据块读取故障的情境中,相关读取业务的连续性,提高了用户体验度。

与前述多副本存储方法的实施例相对应,本申请还提供了一种存储设备的实施例。如图5所示,该设备包括:

命令接收单元,用于接收用于对数据块执行写操作的scsi写命令;

字段获取单元,用于从scsi写命令中获取指定字段,指定字段用于指示数据块的副本的数量;

数据写入单元,用于根据指定字段指示的数量写入数据块的副本。

需要说明的是,数据写入单元包括:

数据块raid确定子单元,用于确定数据块写入的raid;

写入子单元,用于从除raid之外的raid中选择与数量相同的raid,并将副本分别写入至选择的各个raid。

需要说明的是,存储设备还包括元数据记录标识单元,元数据记录标识单元用于在数据块对应的元数据中设置副本标识,并利用元数据记录副本的位置。

上述存储设备中各个单元或子单元的功能和作用的实现过程具体详见上述多副本存储方法中对应步骤的实现过程,在此不再赘述。

上述实施例提供了多副本存储方法,实现了对副本的存储,下面实施例对应于上述的存储的副本,提供了一种数据读取方法,如图3所示,该方法包括如下步骤:

s21、接收数据块读取指令;

此步骤中的数据块读取指令是由前端应用下发给存储设备的,用于读取数据块;

s22、根据数据块读取指令确定所要读取的数据块的位置;

s23、从数据块的位置开始读取数据块;若读取失败,则判断数据块是否具有副本标识;其中,副本标识用于指示数据块具有副本;

若数据块具有副本标识,则根据副本标识查找数据块的副本的位置,并根据副本的位置读取数据块的副本;

此步骤s23中,具体地在元数据中查找副本标识以及副本的位置。

需要说明的是,步骤s22中,根据数据块读取指令确定所要读取的数据块的位置具体包括两种情景,第一种情景是,数据块的位置直接携带于数据块读取指令中,通过解析该数据块读取指令就能直接确定数据块的位置。第二种情景是,数据块的位置并未携带于数据块读取指令中,数据块去读取指令中只携带有该数据块的一个标识,需要进一步的根据该标识确定该数据块的位置。

需要说明的是,步骤s23中,根据副本的位置读取数据块的副本包括两种情景,第一种情景是,副本读取成功,此时返回读取的副本即可;第二种情景是,所有副本读取均失败,此时该数据块的读取彻底失败,需要返回数据读取失败的信息。

需要说明的是,上述步骤s23中详细说明了数据块读取失败时读取副本的步骤,但是在实际读取过程中存在数据块读取成功得情景,如图4所示,若数据块读取成功,则只需要返回从数据块中读取到的数据,不需要进一步判断该数据块是否具有副本标识。

上述步骤s23中详细说明了数据块读取失败,并且该数据块具有副本时的处理步骤,但是在实际的读取过程中存在该数据块不具有副本的情景,如图4所示,此时该数据块的数据读取彻底失败,需要返回数据读取失败的信息。

上述实施例提供的多数据读取方法实现了存储设备自动跳转到副本位置处读取副本的功能,整个读取数据的时间是毫秒量级的,不会对客户读取数据的连续性造成影响,提高了用户体验度,同时保证了数据的高可靠性。

与前述数据读取方法的实施例相对应,本申请还提供了另一种存储设备的实施例。如图6所示,该设备包括:

指令接收单元,用于接收数据块读取指令;

位置确定单元,用于根据数据块读取指令确定所要读取的数据块的位置;

数据读取单元,用于从数据块的位置开始读取数据块;

若读取失败,数据读取单元还用于判断数据块是否具有副本标识;若数据块具有副本标识,则查找数据块的副本的位置,并根据副本的位置读取数据块的副本;其中,副本标识用于指示数据块具有副本。

上述存储设备中各个单元的功能和作用的实现过程具体详见上述数据读取方法中对应步骤的实现过程,在此不再赘述。

以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

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