一种存储系统中垃圾回收的方法及装置与流程

文档序号:13482846阅读:217来源:国知局

本申请实施例涉及通信技术领域,具体的,涉及存储系统中垃圾回收的方法及装置。



背景技术:

垃圾回收(garbagecollection,gc)技术是一种存储系统回收存储空间的技术,下面结合一个应用场景简要的介绍一下垃圾回收技术的原理。

首先,存储系统的控制器扫描容器映射找出哪些容器对应的存储空间可以被释放,生成虚拟逻辑单元号(virtuallun,vlun)重映射;其次,控制器需要在虚拟逻辑单元号重映射中挑选出与主机a1相关的重映射b1,并将该重映射b1发送给主机a1,以使主机a1基于重映射b1更新预先存储的虚拟逻辑单元号映射;再次,在主机a1更新完成以后,主机a1会向控制器发送更新完成的通知。此后,控制器会依次向多台主机(a2,a3,…)发送重映射(b2,b3,…)。需要注意的是,控制器在一台主机更新完成后,才会向下一台主机发送重映射。

在上述垃圾回收中,控制器依次与多台主机交互以更新虚拟逻辑单元号映射,从而导致回收效率低下。



技术实现要素:

本申请实施例提供一种存储系统中垃圾回收的方法及装置,以提高垃圾回收技术的回收效率。

本申请实施例是这样实现的:

第一方面,本申请实施例提供了一种存储系统中垃圾回收的方法,存储系统包括控制器和第一容器单元号,该方法包括:

控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中;

控制器根据容器映射生成虚拟重映射,容器映射用于指示第一容器单元号的存储地址指向第一虚拟逻辑单元号的存储地址,虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第一容器单元号的存储地址,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址;

控制器将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问;

控制器释放第一容器单元号对应的存储空间。

在第一方面中,控制器根据容器映射生成虚拟重映射以后,控制器将虚拟重映射存储到目标存储空间中,该目标存储空间的虚拟重映射可以被至少两个主机访问虚拟重映射,至少两台主机可以并发的从控制器的目标存储空间获取相关的虚拟重映射。至少两台主机可独立地根据虚拟重映射更新各自的虚拟映射,从而实现至少两台主机的更新。然后,控制器便可释放第一容器单元号对应的存储空间。因此,控制器将虚拟重映射存储到目标存储空间中以后,至少两台主机不需要依次处理虚拟重映射,而是独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收效率。

在一种可能的实现方式中,在控制器释放第一容器单元号对应的存储空间之前,方法还包括:

控制器根据容器映射和指纹映射生成指纹重映射,指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址;

控制器将指纹重映射存储到目标存储空间中。

在一种可能的实现方式中,方法还包括:

控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。

在一种可能的实现方式中,方法还包括:

控制器生成第一指纹更新信息,第一指纹更新信息用于指示指纹映射是否被控制器更新成功;

控制器将第一指纹更新信息存储至目标存储空间内。

其中,由于控制器预先存储有第一容器单元号对应的容器映射和指纹映射,所以控制器可以根据容器映射和指纹映射生成指纹重映射。在控制器生成指纹重映射以后,便可将指纹重映射存储到目标存储空间中。在控制器检测到目标存储空间中具有指纹重映射时,控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。然后,控制器会将用于指示指纹映射是否被控制器更新成功的第一指纹更新信息存储至目标存储空间内。因此,控制器将指纹重映射存储到目标存储空间中以后,控制器可以并行的处理目标存储空间中的指纹重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收技术的回收效率。

在一种可能的实现方式中,目标存储空间的指纹重映射用于被至少一个指纹服务器访问。

在一种可能的实现方式中,方法还包括:

控制器接收至少一个指纹服务器发送的第二指纹更新信息,第二指纹更新信息用于指示指纹映射是否被至少一个指纹服务器更新成功;

控制器将第二指纹更新信息存储至目标存储空间内。

其中,由于控制器预先存储有第一容器单元号对应的容器映射和指纹映射,所以控制器可以根据容器映射和指纹映射生成指纹重映射。在控制器生成指纹重映射以后,便可将指纹重映射存储到目标存储空间中。指纹服务器在获取到目标存储空间的指纹重映射以后,指纹服务器便需要删除预先存储的第一指纹映射,并增加第二指纹映射。在指纹服务器根据指纹重映射更新指纹映射以后,指纹服务器会向控制器发送用于指示指纹映射是否被指纹服务器更新成功的第二指纹更新信息。然后,控制器会将第二指纹更新信息存储至目标存储空间内。因此,控制器将指纹重映射存储到目标存储空间中以后,至少一个指纹服务器可以并行的处理目标存储空间中的指纹重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收技术的回收效率。

在一种可能的实现方式中,容器映射还包括第一容器单元号的存储地址对应的第一初始版本号,指纹映射还包括第一容器单元号的存储地址对应的第二初始版本号,第一初始版本号与第二初始版本号相同;

方法还包括:

控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,目标版本号大于第一初始版本号;

在控制器接收到主机发送的增加一次对第一容器单元号的存储地址的有效数据块的引用请求时,控制器确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号;

在第二初始版本号与目标版本号不同时,所述控制器内的指纹服务器删除所述第一容器单元号对应的所述指纹映射,或者所述控制器拒绝主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求。

其中,在控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射以后,控制器不需要生成用于指示指纹映射是否被成功更新的指纹更新信息,也不需要在目标存储空间内存储该指纹更新信息,即使控制器未能成功的更新指纹映射也不会影响第一容器单元号对应的存储空间的回收效果,从而简化了垃圾回收的流程,提高了垃圾回收技术的回收效率。

第二方面,本申请实施例提供了一种存储系统中垃圾回收的方法,该方法包括:主机挂载第一虚拟逻辑单元号;主机存储第一虚拟映射;第一虚拟映射用于指示第一虚拟逻辑单元的存储地址指向第一容器单元号的存储地址;

主机获取存储系统中的目标存储空间内的虚拟重映射,目标存储空间的虚拟重映射可以被至少两个主机访问,虚拟重映射包括第一虚拟映射和第二虚拟映射,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址;第二容器单元号存储第一容器单元号中的有效数据;

主机删除第一虚拟映射,并存储第二虚拟映射。

在第二方面中,控制器根据容器映射生成虚拟重映射以后,控制器将虚拟重映射存储到目标存储空间中,该目标存储空间的虚拟重映射可以被至少两个主机访问虚拟重映射,至少两台主机可以并发的从控制器的目标存储空间获取相关的虚拟重映射。至少两台主机可独立地根据虚拟重映射更新各自的虚拟映射,从而实现至少两台主机的更新。然后,控制器便可释放第一容器单元号对应的存储空间。因此,控制器将虚拟重映射存储到目标存储空间中以后,至少两台主机不需要依次处理虚拟重映射,而是独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收效率。

第三方面,本申请实施例提供了一种存储系统中垃圾回收的装置,该装置应用于存储系统,存储系统还包括第一容器单元号,装置包括:

复制模块,用于将第一容器单元号的存储地址对应的存储空间中的数据块复制到第二容器单元号的存储地址对应的存储空间中;

虚拟重映射生成模块,用于根据容器映射生成虚拟重映射,容器映射用于指示第一容器单元号的存储地址指向第一虚拟逻辑单元号的存储地址,虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第一容器单元号的存储地址,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址;

存储模块,用于将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问;

释放模块,用于释放第一容器单元号对应的存储空间。

在一种可能的实现方式中,装置还包括:

指纹重映射生成模块,用于根据容器映射和指纹映射生成指纹重映射,指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址;将指纹重映射存储到目标存储空间中。

在一种可能的实现方式中,装置还包括:

更新模块,用于根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。

在一种可能的实现方式中,装置还包括:

指纹更新信息生成模块,用于生成第一指纹更新信息,第一指纹更新信息用于指示指纹映射是否被控制器更新成功;将第一指纹更新信息存储至目标存储空间内。

在一种可能的实现方式中,目标存储空间的指纹重映射用于被至少一个指纹服务器访问。

在一种可能的实现方式中,装置还包括:

接收模块,用于接收至少一个指纹服务器发送的第二指纹更新信息,第二指纹更新信息用于指示指纹映射是否被至少一个指纹服务器更新成功;将第二指纹更新信息存储至目标存储空间内。

在一种可能的实现方式中,容器映射还包括第一容器单元号的存储地址对应的第一初始版本号,指纹映射还包括第一容器单元号的存储地址对应的第二初始版本号,第一初始版本号与第二初始版本号相同;装置还包括:

修改模块,用于将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,目标版本号大于第一初始版本号;

确定模块,用于在控制器接收到主机发送的增加一次对第一容器单元号的存储地址的有效数据块的引用请求时,确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号;

删除模块,用于在第二初始版本号与目标版本号不同时,删除所述第一容器单元号对应的所述指纹映射,或者拒绝主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求。

第四方面,本申请实施例提供了一种存储系统中垃圾回收的装置,该装置包括:

挂载模块,用于挂载第一虚拟逻辑单元号;存储第一虚拟映射;第一虚拟映射用于指示第一虚拟逻辑单元的存储地址指向第一容器单元号的存储地址;

获取模块,用于获取存储系统中的目标存储空间内的虚拟重映射,目标存储空间的虚拟重映射可以被至少两个主机访问,虚拟重映射包括第一虚拟映射和第二虚拟映射,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址;第二容器单元号存储第一容器单元号中的有效数据;

删除模块,用于删除第一虚拟映射,并存储第二虚拟映射。

第五方面,本申请实施例提供了一种控制器,该控制器包括:处理器和存储器,其中,存储器内存储有处理器能够执行的操作指令,处理器读取存储器内的操作指令用于实现第一方面或第一方面的任一可能的实现方式中描述的方法。

第六方面,本申请实施例提供了一种主机,该主机包括:处理器和存储器,其中,存储器内存储有处理器能够执行的操作指令,处理器读取存储器内的操作指令用于实现第二方面或第二方面的任一可能的实现方式中描述的方法。

附图说明

图1所示的为本申请实施例提供的一种存储系统与主机的场景示意图;

图2所示的为本申请实施例提供的一种存储系统中垃圾回收的方法的流程图;

图3所示的为本申请实施例提供的另一种存储系统中垃圾回收的方法的流程图;

图4所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图;

图5所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图;

图6所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图;

图7所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图;

图8所示的为本申请实施例提供的一种存储系统中垃圾回收的装置的示意图;

图9所示的为本申请实施例提供的另一种存储系统中垃圾回收的装置的示意图;

图10所示的为本申请实施例提供的又一种存储系统中垃圾回收的装置的示意图;

图11所示的为本申请实施例提供的又一种存储系统中垃圾回收的装置的示意图。

具体实施方式

请参见图1所示,图1所示的为本申请实施例提供的一种存储系统与主机的场景示意图。在图1所示的场景示意图中包括计算机集群10和存储系统20,计算机集群10中包括主机11、主机12和主机13等多个主机,存储系统20包括控制器21、控制器22和控制器23等多个控制器,存储系统还包括存储器31、存储器32和存储器33等。其中,控制器21管理存储器31的容器单元号,控制器22管理存储器32的容器单元号,控制器23管理存储器33的容器单元号。指纹服务器可以设置在控制器内部,也可以设置在控制器的外部,所以在图1中未示出指纹服务器。存储器可以为固态硬盘、机械硬盘等,本发明对存储器类型不作具体限定。

结合图1所示的场景示意图,每个主机均会挂载虚拟逻辑单元号(后面将虚拟逻辑单元号简称为vlun),每个vlun对应的存储空间的大小可以由每个主机的用户自行设定。每个vlun对应的存储空间会被划分为多个存储单元,每个存储单元均用于存储数据块,每个存储单元均可以使用逻辑块地址(后面将逻辑块地址简称为lba)来指示。例如,主机11的用户设定vlun1的存储空间为1gb,并将这1gb的存储空间划分成多个存储单元,每个存储单元均为512字节或者4k字节。

结合图1所示的场景示意图,每个控制器均会预先生成多个容器单元号(后面将容器单元号简称为plun),并为每个plun分配一定的存储空间,每个plun对应的存储空间会被划分为多个存储单元,每个存储单元均用于存储数据块,每个存储单元均可以使用lba来指示。例如,控制器21为plun1分配1gb的存储空间,并将这1gb的存储空间分配给存储器31,再将存储器31划分成多个存储单元,每个存储单元均为512字节或者4k字节。

结合图1所示的场景示意图,下面简要介绍一下主机写数据和建立映射的过程。

首先,假设主机11上的应用软件生成在(vlun1,lba1)对应的存储空间上写入4kb大小的数据a的请求。

然后,主机11接收到该请求后,主机11会计算出数据a的指纹为fp1,并将指纹fp1发送给指纹服务器。其中,指纹服务器可以集成在控制器内部,也可以单独设置在控制器的外部。

其次,指纹服务器会判断指纹fp1是否预先存储过。

如果指纹服务器判断出指纹fp1预先存储过,那么指纹服务器会将指纹fp1对应的容器单元号的存储地址(plun1,lba1,4kb)发送给主机11;由于plun1归属于控制器21,所以主机11会向控制器21发送增加一次(plun1,lba1,4kb)对应的存储空间内的数据块的引用请求,其中,(plun1,lba1,4kb)对应的存储空间为存储器31的一个存储单元;控制器21会同意该引用请求,并建立容器映射(plun1,lba1,4kb->vlun1,lba1,4kb);主机11会建立虚拟映射(vlun1,lba1,4kb->plun1,lba1,4kb)。

如果指纹服务器判断出指纹fp1未存储过,那么指纹服务器向主机11发送未存储过fp1的指令;主机11接收到该指令以后,会向控制器21请求一个与(vlun1,lba1)对应的plun;控制器21向主机11发送一个新的存储地址(plun1,lba2,4kb),(plun1,lba2,4kb)对应的存储空间内未存储有数据,其中,(plun1,lba2,4kb)对应的存储空间为存储器31的一个存储单元;控制器21建立容器映射(plun1,lba2,4kb->vlun1,lba1,4kb);主机11会建立虚拟映射(vlun1,lba1,4kb->plun1,lba2,4kb);指纹服务器建立指纹映射(fp1->plun1,lba2,4kb)。

在图1所示的实施例中,不仅主机11可以使用归属于控制器21的plun1对应的存储空间,计算机集群10中的主机12和主机13等主机也可以使用归属于控制器21的plun1对应的存储空间。当然,计算机集群10中的主机11、主机12和主机13等也可以使用存储系统20中归属于控制器22和控制器23等控制器的plun对应的存储空间。

上述实施例介绍了主机写数据和建立映射的过程,下面将结合本申请实施例中的附图,对本申请实施例提供的存储系统中垃圾回收的过程进行描述。

图2所示的为本申请实施例提供的一种存储系统中垃圾回收的方法的流程图。在图2所示的方法中,在控制器将虚拟重映射存储到目标存储空间中以后,各个主机不需要依次处理虚拟重映射,而自独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收效率。该方法包括以下步骤。

步骤s11、控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

其中,本申请实施例提供的垃圾回收的方法可以应用于存储系统中。存储系统可以包括控制器和第一容器单元号。

在步骤s11之前,主机已经建立第一虚拟映射,第一虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第一容器单元号的存储地址,控制器也已经建立容器映射,容器映射用于指示第一容器单元号的存储地址指向第一虚拟逻辑单元号的存储地址。

在步骤s11中,控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中,说明控制器需要释放掉第一容器单元号对应的存储空间,所以需要将第一容器单元号内的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

例如,假设第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),第一虚拟逻辑单元号为vlun1,第一虚拟逻辑单元号的存储地址为(vlun1,lba1,4kb),第一容器单元号为plun1,第一容器单元号的存储地址为(plun1,lba1,4kb),第二容器单元号为plun2,第二容器单元号的存储地址为(plun2,lba1,4kb)。

结合上述步骤s11可知,(plun1,lba1,4kb)对应的存储空间中存储有效数据块,在控制器需要释放plun1对应的存储空间时,控制器需要先将(plun1,lba1,4kb)对应的存储空间中的有效数据块复制到(plun2,lba1,4kb)对应的存储空间中,进而为释放plun1做好准备工作。

步骤s12、控制器根据容器映射生成虚拟重映射。

其中,在控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中以后,控制器还需要根据容器映射生成虚拟重映射,以使至少两个主机可以根据虚拟重映射更新虚拟映射。

虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第一容器单元号的存储地址,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址。第一虚拟映射用于指示至少两个主机需要删除的虚拟映射,第二虚拟映射用于指示至少两个主机需要增加的虚拟映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),第二虚拟映射为(vlun1,lba1,4kb->plun2,lba1,4kb)。主机在获取到虚拟重映射以后,主机需要删除预先存储的第一虚拟映射,并增加第二虚拟映射。

步骤s13、控制器将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问。

其中,在控制器根据容器映射生成虚拟重映射以后,控制器需要将虚拟重映射存储到目标存储空间中,以使至少两台主机可以主动的在目标存储空间中获取到虚拟重映射。虚拟重映射可以通过文件、文档或日志等形式存储于目标存储空间内。

控制器中的目标存储空间并不局限于1个,也可以为多个。目标存储空间的数量和每个目标存储空间的大小可以由控制器自动进行配置,也可以预先由工作人员配置好。

由于第一容器单元号归属于控制器,所以只要引用了第一容器单元号的存储地址的主机都可以主动的在目标存储空间中获取到虚拟重映射,以更新主机自身的第一虚拟映射。

例如,结合图1,假设主机11预先存储的第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),plun1归属于控制器21。在控制器21将虚拟重映射存储到目标存储空间以后,主机11和引用了plun1的存储地址的主机均会主动的在目标存储空间中获取虚拟重映射。虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),第二虚拟映射为(vlun1,lba1,4kb->plun2,lba1,4kb),第一虚拟映射为主机11需要删除的虚拟映射,第二虚拟映射为主机11需要增加的虚拟映射。在主机11获取到虚拟重映射以后,主机11会删除预先存储的第一虚拟映射(vlun1,lba1,4kb->plun1,lba1,4kb),并存储第二虚拟映射(vlun1,lba1,4kb->plun2,lba1,4kb),说明主机11的第一虚拟逻辑单元号的存储地址(vlun1,lba1,4kb)已经不再指向第一容器单元号的存储地址(plun1,lba1,4kb),而是指向第二容器单元号的存储地址(plun2,lba1,4kb)。

当然,在实际场景中,第一容器单元号的存储地址和第二容器单元号的存储地址均可以包括多条信息,并不局限于1条信息。

例如,第一容器单元号的存储地址包括(plun1,lba1,4kb)、(plun1,lba2,4kb)、(plun1,lba3,4kb)和(plun1,lba4,4kb)等;第二容器单元号的存储地址包括(plun2,lba1,4kb)、(plun2,lba2,4kb)、(plun2,lba3,4kb)和(plun2,lba4,4kb)等。

当然,在实际场景中,容器映射、第一虚拟映射和第二虚拟映射中均可以包括多条映射,并不局限于1条映射。

例如,容器映射包括(plun1,lba1,4kb->vlun1,lba1,4kb)、(plun1,lba2,4kb->vlun1,lba2,4kb)、(plun1,lba3,4kb->vlun1,lba3,4kb)和(plun1,lba4,4kb->vlun1,lba4,4kb)等;第一虚拟映射包括(vlun1,lba1,4kb->plun1,lba1,4kb)、(vlun1,lba2,4kb->plun1,lba2,4kb)、(vlun1,lba3,4kb->plun1,lba3,4kb)和(vlun1,lba4,4kb->plun1,lba4,4kb)等;第二虚拟映射包括(vlun1,lba1,4kb->plun2,lba1,4kb)、(vlun1,lba2,4kb->plun2,lba2,4kb)、(vlun1,lba3,4kb->plun2,lba3,4kb)和(vlun1,lba4,4kb->plun2,lba4,4kb)等。

步骤s14、控制器释放第一容器单元号对应的存储空间。

其中,在引用了第一容器单元号的存储地址的有效数据块的主机根据虚拟重映射更新成功以后,控制器还需要对第一容器单元号的存储地址相关联的容器映射进行更新,指纹服务器还需要对第一容器单元号的存储地址相关联的指纹映射进行更新。在与第一容器单元号相关联的虚拟映射、指纹映射和容器映射等相关信息完全更新完成以后,控制器便可以释放第一容器单元号对应的存储空间。

在图2所示的实施例中,控制器根据容器映射生成虚拟重映射以后,控制器将虚拟重映射存储到目标存储空间中,该目标存储空间的虚拟重映射可以被至少两个主机访问虚拟重映射,至少两台主机可以并发的从控制器的目标存储空间获取相关的虚拟重映射。至少两台主机可独立的根据虚拟重映射更新各自的虚拟映射,从而实现至少两台主机的更新。然后,控制器便可释放第一容器单元号对应的存储空间。因此,控制器将虚拟重映射存储到目标存储空间中以后,至少两台主机不需要依次处理虚拟重映射,而是独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收效率。

请参见图3所示,图3所示的为本申请实施例提供的另一种存储系统中垃圾回收的方法的流程图。图3所示的实施例为基于图2改进的实施例,所以与图2相同的内容可参见图2所示的实施例。图3所示方法包括以下步骤。

步骤s21、控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

步骤s22、控制器根据容器映射生成虚拟重映射。

步骤s23、控制器将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问。

步骤s24、控制器根据容器映射和指纹映射生成指纹重映射。

其中,在控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中以后,控制器还需要根据容器映射和指纹映射生成指纹重映射,以使控制器可以根据指纹重映射更新虚拟映射。

指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址。第一指纹映射用于指示控制器需要删除的指纹映射,第二指纹映射用于指示控制器需要增加的指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。

步骤s25、控制器将指纹重映射存储到目标存储空间中。

其中,在控制器根据容器映射和指纹映射生成指纹重映射以后,控制器需要将指纹重映射存储到目标存储空间中。指纹重映射可以通过文件、文档或日志等形式存储于目标存储空间内。

步骤s26、控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。

其中,在控制器检测到目标存储空间内存在指纹重映射时,控制器需要删除预先存储的第一指纹映射,并增加第二指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。在控制器检测到目标存储空间内存在指纹重映射时,控制器需要删除预先存储的第一指纹映射(fp1->plun1,lba1,4kb),并增加第二指纹映射(fp1->plun2,lba1,4kb)。

步骤s27、控制器生成第一指纹更新信息,第一指纹更新信息用于指示指纹映射是否被控制器更新成功。

其中,在控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射以后,控制器需要生成第一指纹更新信息,以指示指纹映射是否被控制器更新成功。如果指纹映射被控制器更新成功,那么第一指纹更新信息用于指示指纹映射被控制器更新成功;如果指纹映射被控制器更新失败,那么第一指纹更新信息用于指示指纹映射被控制器更新失败。

步骤s28、控制器将第一指纹更新信息存储至目标存储空间内。

其中,在控制器生成第一指纹更新信息以后,控制器便可以将第一指纹更新信息存储至目标存储空间内,以便于控制器根据第一指纹更新信息等相关更新信息来判断是否可以释放第一容器单元号对应的存储空间。

如果控制器根据第一指纹更新信息等相关更新信息判断出第一容器单元号对应的指纹映射、容器映射和虚拟映射等均更新完毕,那么控制器便可以释放第一容器单元号对应的存储空间。

步骤s29、控制器释放第一容器单元号对应的存储空间。

在图3所示的实施例中,由于控制器预先存储有第一容器单元号对应的容器映射和指纹映射,所以控制器可以根据容器映射和指纹映射生成指纹重映射。在控制器生成指纹重映射以后,便可将指纹重映射存储到目标存储空间中。在控制器检测到目标存储空间中具有指纹重映射时,控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。然后,控制器会将用于指示指纹映射是否被控制器更新成功的第一指纹更新信息存储至目标存储空间内。因此,控制器将指纹重映射存储到目标存储空间中以后,控制器可以利用多线程并行的处理目标存储空间中的指纹重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收技术的回收效率。

请参见图4所示,图4所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图。图4所示的实施例为基于图2改进的实施例,所以与图2相同的内容可参见图2所示的实施例。在图4所示的实施例中,指纹服务器设置在控制器的内部。图4所示方法包括以下步骤。

步骤s31、控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

步骤s32、控制器根据容器映射生成虚拟重映射。

步骤s33、控制器将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问。

步骤s34、控制器根据容器映射和指纹映射生成指纹重映射。

其中,在控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中以后,控制器还需要根据容器映射和指纹映射生成指纹重映射,以使控制器可以根据指纹重映射更新虚拟映射。

指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址。第一指纹映射用于指示控制器需要删除的指纹映射,第二指纹映射用于指示控制器需要增加的指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。

步骤s35、控制器将指纹重映射存储到目标存储空间中。

其中,在控制器根据容器映射和指纹映射生成指纹重映射以后,控制器需要将指纹重映射存储到目标存储空间中。指纹重映射可以通过文件、文档或日志等形式存储于目标存储空间内。

步骤s36、控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。

其中,在控制器检测到目标存储空间内存在指纹重映射时,控制器需要根据指纹重映射更新控制器存储的指纹映射,即控制器需要删除预先存储的第一指纹映射,并增加第二指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。在控制器检测到目标存储空间内存在指纹重映射时,控制器需要删除预先存储的第一指纹映射(fp1->plun1,lba1,4kb),并增加第二指纹映射(fp1->plun2,lba1,4kb)。

当然,控制器有可能会出现更新失败的情况,即控制器无法成功的删除第一指纹映射,也无法成功的增加第二指纹映射。即使控制器出现更新失败的情况,也不会影响控制器释放第一容器单元号对应的存储空间。

步骤s37、控制器释放第一容器单元号对应的存储空间。

其中,在控制器接收到主机发送的成功更新虚拟重映射的通知时,说明主机已经删除了第一虚拟映射,并增加第二虚拟映射,那么此时控制器便可以释放第一容器单元号对应的存储空间,不需要考虑指纹重映射是否更新成功。

步骤s38、控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,目标版本号大于第一初始版本号。

在本申请实施例中,容器映射还包括第一容器单元号的存储地址对应的第一初始版本号,指纹映射还包括第一容器单元号的存储地址对应的第二初始版本号,第一初始版本号与第二初始版本号相同。

例如,假设容器映射为(plun1,lba1,4kb,第一初始版本号->vlun1,lba1,4kb),指纹映射为(fp1->plun1,lba1,4kb,第二初始版本号),而且,第一初始版本号等于第二初始版本号。

在控制器释放第一容器单元号对应的存储空间以后,控制器需要将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,而且,目标版本号还会大于第一初始版本号。这样做的目的在于,如果控制器出现指纹映射更新失败的情况,即控制器无法成功的删除第一指纹映射,也无法成功的增加第二指纹映射,那么至少可以保证容器映射内的版本号与控制器预先存储的第一指纹映射的版本号是不同的,用于指示指纹映射更新失败。

步骤s39、在控制器接收到主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求时,控制器确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号。

其中,在控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号以后,如果某个主机向控制器发送增加一次对第一容器单元号的存储地址中的有效数据块的引用请求,那么控制器便需要确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号。

步骤s40、在第二初始版本号与目标版本号不同时,控制器内的指纹服务器删除第一容器单元号对应的指纹映射。

其中,在控制器释放了第一容器单元号对应的存储空间以后,控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号。如果控制器出现指纹映射更新失败的情况,那么第一指纹映射不会被删除,而且容器映射内的版本号与控制器预先存储的第一指纹映射的版本号便是不同的,所以第二初始版本号与目标版本号不同,此时,控制器将拒绝主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求;在主机检测到控制器拒绝增加一次对第一容器单元号的存储地址中的有效数据块的引用请求时,主机向控制器内的指纹服务器发送删除第一容器单元号对应的指纹映射的删除指令;控制器内的指纹服务器在接收到主机发送的删除指令时,指纹服务器会删除第一容器单元号对应的指纹映射。

在图4所示的实施例中,在控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射以后,控制器不需要生成用于指示指纹映射是否被成功更新的指纹更新信息,也不需要在目标存储空间内存储该指纹更新信息,即使控制器未能成功的更新指纹映射也不会影响第一容器单元号对应的存储空间的回收效果,从而简化了垃圾回收的流程,提高了垃圾回收技术的回收效率。

请参见图5所示,图5所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图。图5所示的实施例为基于图2改进的实施例,所以与图2相同的内容可参见图2所示的实施例。图5所示方法包括以下步骤。

步骤s41、控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

步骤s42、控制器根据容器映射生成虚拟重映射。

步骤s43、控制器将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问。

步骤s44、控制器根据容器映射和指纹映射生成指纹重映射。

其中,在控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中以后,控制器还需要根据容器映射和指纹映射生成指纹重映射,以使控制器可以根据指纹重映射更新虚拟映射。

指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址。第一指纹映射用于指示控制器需要删除的指纹映射,第二指纹映射用于指示控制器需要增加的指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。

步骤s45、控制器将指纹重映射存储到目标存储空间中,目标存储空间的指纹重映射用于被至少一个指纹服务器访问。

其中,在控制器根据容器映射和指纹映射生成指纹重映射以后,控制器需要将指纹重映射存储到目标存储空间中,以便于目标存储空间的指纹重映射可以被至少一个指纹服务器访问。指纹重映射可以通过文件、文档或日志等形式存储于目标存储空间内。

指纹服务器在获取到目标存储空间的指纹重映射以后,指纹服务器便需要删除预先存储的第一指纹映射,并增加第二指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。指纹服务器在获取到目标存储空间的指纹重映射以后,指纹服务器需要删除预先存储的第一指纹映射(fp1->plun1,lba1,4kb),并增加第二指纹映射(fp1->plun2,lba1,4kb)。

步骤s46、控制器接收至少一个指纹服务器发送的第二指纹更新信息,第二指纹更新信息用于指示指纹映射是否被至少一个指纹服务器更新成功。

其中,在指纹服务器根据指纹重映射更新指纹映射以后,指纹服务器需要生成第二指纹更新信息,以指示指纹映射是否被指纹服务器更新成功。如果指纹映射被指纹服务器更新成功,那么第一指纹更新信息用于指示指纹映射被指纹服务器更新成功;如果指纹映射被指纹服务器更新失败,那么第一指纹更新信息用于指示指纹映射被指纹服务器更新失败。

在指纹服务器生成第二指纹更新信息以后,指纹服务器会向控制器发送第二指纹更新信息。此时,控制器便会接收指纹服务器发送的第二指纹更新信息。

步骤s47、控制器将第二指纹更新信息存储至目标存储空间内。

其中,在控制器接收到指纹服务器发送的第二指纹更新信息以后,控制器便可以将第二指纹更新信息存储至目标存储空间内,以便于控制器根据第二指纹更新信息等相关更新信息来判断是否可以释放第一容器单元号对应的存储空间。

如果控制器根据第二指纹更新信息等相关更新信息判断出第一容器单元号对应的指纹映射、容器映射和虚拟映射等均更新完毕,那么控制器便可以释放第一容器单元号对应的存储空间。

步骤s48、控制器释放第一容器单元号对应的存储空间。

在图5所示的实施例中,由于控制器预先存储有第一容器单元号对应的容器映射和指纹映射,所以控制器可以根据容器映射和指纹映射生成指纹重映射。在控制器生成指纹重映射以后,便可将指纹重映射存储到目标存储空间中。指纹服务器在获取到目标存储空间的指纹重映射以后,指纹服务器便需要删除预先存储的第一指纹映射,并增加第二指纹映射。在指纹服务器根据指纹重映射更新指纹映射以后,指纹服务器会向控制器发送用于指示指纹映射是否被指纹服务器更新成功的第二指纹更新信息。然后,控制器会将第二指纹更新信息存储至目标存储空间内。因此,控制器将指纹重映射存储到目标存储空间中以后,至少一个指纹服务器可以并行的处理目标存储空间中的指纹重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收技术的回收效率。

请参见图6所示,图6所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图。图6所示的实施例为基于图2改进的实施例,所以与图2相同的内容可参见图2所示的实施例。在图6所示的实施例中,指纹服务器与控制器属于两台独立的设备。图6所示方法包括以下步骤。

步骤s51、控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

步骤s52、控制器根据容器映射生成虚拟重映射。

步骤s53、控制器将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问。

步骤s54、控制器根据容器映射和指纹映射生成指纹重映射。

其中,在控制器将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中以后,控制器还需要根据容器映射和指纹映射生成指纹重映射,以使控制器可以根据指纹重映射更新虚拟映射。

指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址。第一指纹映射用于指示控制器需要删除的指纹映射,第二指纹映射用于指示控制器需要增加的指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。

步骤s55、控制器将指纹重映射存储到目标存储空间中,目标存储空间的指纹重映射用于被至少一个指纹服务器访问。

其中,在控制器根据容器映射和指纹映射生成指纹重映射以后,控制器需要将指纹重映射存储到目标存储空间中,以便于指纹重映射被至少一个指纹服务器访问。指纹重映射可以通过文件、文档或日志等形式存储于目标存储空间内。

在指纹服务器获取到目标存储空间的指纹重映射以后,指纹服务器便可以根据指纹重映射更新指纹服务器存储的指纹映射,即指纹服务器需要删除预先存储的第一指纹映射,并增加第二指纹映射。

例如,假设容器映射为(plun1,lba1,4kb->vlun1,lba1,4kb),指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射为(fp1->plun1,lba1,4kb),第二指纹映射为(fp1->plun2,lba1,4kb)。在指纹服务器获取到目标存储空间的指纹重映射以后,指纹服务器需要删除预先存储的第一指纹映射(fp1->plun1,lba1,4kb),并增加第二指纹映射(fp1->plun2,lba1,4kb)。

当然,指纹服务器有可能会出现更新失败的情况,即指纹服务器无法成功的删除第一指纹映射,也无法成功的增加第二指纹映射。即使指纹服务器出现更新失败的情况,也不会影响控制器释放第一容器单元号对应的存储空间。

步骤s56、控制器释放第一容器单元号对应的存储空间。

其中,在控制器接收到主机发送的成功更新虚拟重映射的通知时,说明主机已经删除了第一虚拟映射,并增加第二虚拟映射,那么此时控制器便可以释放第一容器单元号对应的存储空间,不需要考虑指纹重映射是否更新成功。

步骤s57、控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,目标版本号大于第一初始版本号。

在本申请实施例中,容器映射还包括第一容器单元号的存储地址对应的第一初始版本号,指纹映射还包括第一容器单元号的存储地址对应的第二初始版本号,第一初始版本号与第二初始版本号相同。

例如,假设容器映射为(plun1,lba1,4kb,第一初始版本号->vlun1,lba1,4kb),指纹映射为(fp1->plun1,lba1,4kb,第二初始版本号),而且,第一初始版本号等于第二初始版本号。

在控制器释放第一容器单元号对应的存储空间以后,控制器需要将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,而且,目标版本号还会大于第一初始版本号。这样做的目的在于,如果指纹服务器出现指纹映射更新失败的情况,即指纹服务器法成功的删除第一指纹映射,也无法成功的增加第二指纹映射,那么至少可以保证容器映射内的版本号与控制器预先存储的第一指纹映射的版本号是不同的,用于指示指纹映射更新失败。

步骤s58、在控制器接收到主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求时,控制器确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号。

其中,在控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号以后,如果某个主机向控制器发送增加一次对第一容器单元号的存储地址中的有效数据块的引用请求,那么控制器便需要确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号。

步骤s59、在第二初始版本号与目标版本号不同时,控制器拒绝主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求,以使主机向指纹服务器发送删除第一容器单元号对应的指纹映射的删除指令,并使指纹服务器根据该删除指令删除第一容器单元号对应的指纹映射。

其中,在控制器释放了第一容器单元号对应的存储空间以后,控制器将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号。如果指纹服务器出现指纹映射更新失败的情况,那么第一指纹映射不会被删除,而且容器映射内的版本号与指纹服务器预先存储的第一指纹映射的版本号便是不同的,所以第二初始版本号与目标版本号不同,此时,控制器将拒绝主机发送的增加一次对第一容器单元号的存储地址中的有效数据块的引用请求;在主机检测到控制器拒绝增加一次对第一容器单元号的存储地址中的有效数据块的引用请求时,主机向指纹服务器发送删除第一容器单元号对应的指纹映射的删除指令;指纹服务器在接收到主机发送的删除指令时,指纹服务器会删除第一容器单元号对应的指纹映射。

在图6所示的实施例中,在控制器根据目标存储空间中的指纹重映射更新控制器存储的指纹映射以后,控制器不需要生成用于指示指纹映射是否被成功更新的指纹更新信息,也不需要在目标存储空间内存储该指纹更新信息,即使控制器未能成功的更新指纹映射也不会影响第一容器单元号对应的存储空间的回收效果,从而简化了垃圾回收的流程,提高了垃圾回收技术的回收效率。

图7所示的为本申请实施例提供的又一种存储系统中垃圾回收的方法的流程图。在图7所示的方法中,在控制器将虚拟重映射存储到目标存储空间中以后,各个主机不需要依次处理虚拟重映射,而是独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收效率。该方法包括以下步骤。

步骤s61、主机挂载第一虚拟逻辑单元号,主机存储第一虚拟映射,第一虚拟映射用于指示第一虚拟逻辑单元的存储地址指向第一容器单元号的存储地址。

其中,例如假设第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),第一虚拟逻辑单元号为vlun1,第一虚拟逻辑单元号的存储地址为(vlun1,lba1,4kb),第一容器单元号的存储地址为(plun1,lba1,4kb)。

步骤s62、主机获取存储系统中的目标存储空间内的虚拟重映射,目标存储空间的虚拟重映射可以被至少两个主机访问,虚拟重映射包括第一虚拟映射和第二虚拟映射,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址;第二容器单元号存储第一容器单元号中的有效数据。

其中,在控制器根据容器映射生成虚拟重映射以后,控制器需要将虚拟重映射存储到目标存储空间中,以使至少两台主机可以主动的在目标存储空间中获取到虚拟重映射。虚拟重映射可以通过文件、文档或日志等形式存储于目标存储空间内。

由于第一容器单元号归属于控制器,所以只要引用了第一容器单元号的存储地址的主机都可以主动的在目标存储空间中获取到虚拟重映射,以更新主机自身的第一虚拟映射。

例如,结合图1,假设主机11预先存储的第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),plun1归属于控制器21。在控制器21将虚拟重映射存储到目标存储空间以后,主机11和引用了plun1的存储地址的主机均会主动的在目标存储空间中获取虚拟重映射。虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射为(vlun1,lba1,4kb->plun1,lba1,4kb),第二虚拟映射为(vlun1,lba1,4kb->plun2,lba1,4kb),第一虚拟映射为主机11需要删除的虚拟映射,第二虚拟映射为主机11需要增加的虚拟映射。在主机11获取到虚拟重映射以后,主机11会删除预先存储的第一虚拟映射(vlun1,lba1,4kb->plun1,lba1,4kb),并存储第二虚拟映射(vlun1,lba1,4kb->plun2,lba1,4kb),说明主机11的第一虚拟逻辑单元号的存储地址(vlun1,lba1,4kb)已经不再指向第一容器单元号的存储地址(plun1,lba1,4kb),而是指向第二容器单元号的存储地址(plun2,lba1,4kb)。

当然,在实际场景中,第一容器单元号的存储地址和第二容器单元号的存储地址均可以包括多条信息,并不局限于1条信息。

例如,第一容器单元号的存储地址包括(plun1,lba1,4kb)、(plun1,lba2,4kb)、(plun1,lba3,4kb)和(plun1,lba4,4kb)等;第二容器单元号的存储地址包括(plun2,lba1,4kb)、(plun2,lba2,4kb)、(plun2,lba3,4kb)和(plun2,lba4,4kb)等。

当然,在实际场景中,容器映射、第一虚拟映射和第二虚拟映射中均可以包括多条映射,并不局限于1条映射。

例如,容器映射包括(plun1,lba1,4kb->vlun1,lba1,4kb)、(plun1,lba2,4kb->vlun1,lba2,4kb)、(plun1,lba3,4kb->vlun1,lba3,4kb)和(plun1,lba4,4kb->vlun1,lba4,4kb)等;第一虚拟映射包括(vlun1,lba1,4kb->plun1,lba1,4kb)、(vlun1,lba2,4kb->plun1,lba2,4kb)、(vlun1,lba3,4kb->plun1,lba3,4kb)和(vlun1,lba4,4kb->plun1,lba4,4kb)等;第二虚拟映射包括(vlun1,lba1,4kb->plun2,lba1,4kb)、(vlun1,lba2,4kb->plun2,lba2,4kb)、(vlun1,lba3,4kb->plun2,lba3,4kb)和(vlun1,lba4,4kb->plun2,lba4,4kb)等。

步骤s63、主机删除第一虚拟映射,并存储第二虚拟映射。

在图7所示的实施例中,控制器根据容器映射生成虚拟重映射以后,控制器将虚拟重映射存储到目标存储空间中,该目标存储空间的虚拟重映射可以被至少两个主机访问虚拟重映射,至少两台主机可以并发的从控制器的目标存储空间获取相关的虚拟重映射。至少两台主机可独立的根据虚拟重映射更新各自的虚拟映射,从而实现至少两台主机的更新。然后,控制器便可释放第一容器单元号对应的存储空间。因此,控制器将虚拟重映射存储到目标存储空间中以后,至少两台主机不需要依次处理虚拟重映射,而是独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收技术的回收效率。

图8所示的为本申请实施例提供的一种存储系统中垃圾回收的装置的示意图。图8为图2对应的装置实施例,图8中与图2相同的内容请参见图2对应的实施例即可。参照图8,图8所示的垃圾回收的装置应用于存储系统中,该存储系统还包括第一容器单元号。该垃圾回收的装置包括以下模块:

复制模块41,用于将第一容器单元号的存储地址对应的存储空间中的有效数据块复制到第二容器单元号的存储地址对应的存储空间中。

虚拟重映射生成模块42,用于根据容器映射生成虚拟重映射,容器映射用于指示第一容器单元号的存储地址指向第一虚拟逻辑单元号的存储地址,虚拟重映射包括第一虚拟映射和第二虚拟映射,第一虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第一容器单元号的存储地址,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址。

存储模块43,用于将虚拟重映射存储到目标存储空间中,目标存储空间的虚拟重映射可以被至少两个主机访问。

释放模块44,用于释放第一容器单元号对应的存储空间。

在图8所示的实施例中,控制器根据容器映射生成虚拟重映射以后,控制器将虚拟重映射存储到目标存储空间中,该目标存储空间的虚拟重映射可以被至少两个主机访问虚拟重映射,至少两台主机可以并发的从控制器的目标存储空间获取相关的虚拟重映射。至少两台主机可独立地根据虚拟重映射更新各自的虚拟映射,从而实现至少两台主机的更新。然后,控制器便可释放第一容器单元号对应的存储空间。因此,控制器将虚拟重映射存储到目标存储空间中以后,至少两台主机不需要依次处理虚拟重映射,而是独立地处理目标存储空间中的虚拟重映射,以实现对第一容器单元号的存储地址对应的存储空间的并行回收,进而大大的提高了垃圾回收效率。

可选的,本申请实施例提供的垃圾回收的装置还可以包括以下模块:指纹重映射生成模块,用于根据容器映射和指纹映射生成指纹重映射,指纹映射用于指示数据块的指纹指向第一容器单元号的存储地址,指纹重映射包括第一指纹映射和第二指纹映射,第一指纹映射用于指示有效数据块的指纹指向第一容器单元号的存储地址,第二指纹映射用于指示有效数据块的指纹指向第二容器单元号的存储地址;将指纹重映射存储到目标存储空间中。

可选的,本申请实施例提供的垃圾回收的装置还可以包括以下模块:更新模块,用于根据目标存储空间中的指纹重映射更新控制器存储的指纹映射。

可选的,本申请实施例提供的垃圾回收的装置还可以包括以下模块:指纹更新信息生成模块,用于生成第一指纹更新信息,第一指纹更新信息用于指示指纹映射是否被控制器更新成功;将第一指纹更新信息存储至目标存储空间内。

其中,目标存储空间的指纹重映射用于被至少一个指纹服务器访问。

可选的,本申请实施例提供的垃圾回收的装置还可以包括以下模块:接收模块,用于接收至少一个指纹服务器发送的第二指纹更新信息,第二指纹更新信息用于指示指纹映射是否被至少一个指纹服务器更新成功;将第二指纹更新信息存储至目标存储空间内。

可选的,容器映射还包括第一容器单元号的存储地址对应的第一初始版本号,指纹映射还包括第一容器单元号的存储地址对应的第二初始版本号,第一初始版本号与第二初始版本号相同。本申请实施例提供的垃圾回收的装置还可以包括以下模块:修改模块,用于将容器映射中的第一容器单元号的存储地址对应的第一初始版本号修改为目标版本号,目标版本号大于第一初始版本号;确定模块,用于在控制器接收到主机发送的增加一次对第一容器单元号的存储地址的有效数据块的引用请求时,确定容器映射中的第一容器单元号的存储地址对应的目标版本号,以及确定指纹映射中的第一容器单元号的存储地址对应的第二初始版本号;删除模块,用于在第二初始版本号与目标版本号不同时,删除第一容器单元号对应的指纹映射。具体实现中,删除模块可以由指纹服务器实现。

图9所示的为本申请实施例提供的另一种存储系统中垃圾回收的装置的示意图。图9为图7对应的装置实施例,图9中与图7相同的内容请参见图7对应的实施例即可。参照图9,该垃圾回收的装置包括以下模块:

挂载模块51,用于挂载第一虚拟逻辑单元号;存储第一虚拟映射;第一虚拟映射用于指示第一虚拟逻辑单元的存储地址指向第一容器单元号的存储地址;

获取模块52,用于获取存储系统中的目标存储空间内的虚拟重映射,目标存储空间的虚拟重映射可以被至少两个主机访问,虚拟重映射包括第一虚拟映射和第二虚拟映射,第二虚拟映射用于指示第一虚拟逻辑单元号的存储地址指向第二容器单元号的存储地址;第二容器单元号存储第一容器单元号中的有效数据;

删除模块53,用于删除第一虚拟映射,并存储第二虚拟映射。

图10所示的为本申请实施例提供的又一种存储系统中垃圾回收的装置的示意图。图10为图2对应的装置实施例,图10中与图2相同的内容请参见图2对应的实施例即可。参照图10,该装置包括处理器61和存储器62,其中,存储器62内存储有处理器61能够执行的操作指令,处理器61读取存储器62内的操作指令用于实现上述图2所示的方法。

图11所示的为本申请实施例提供的又一种存储系统中垃圾回收的装置的示意图。图11为图7对应的装置实施例,图11中与图7相同的内容请参见图7对应的实施例即可。参照图11,该装置包括处理器71和存储器72,其中,存储器72内存储有处理器71能够执行的操作指令,处理器71读取存储器72内的操作指令用于实现上述图7所示的方法。

需要说明的是,本申请提供实施例只是本申请所介绍的可选实施例,本领域技术人员在此基础上,完全可以设计出更多的实施例,因此不在此处赘述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

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