存储空间处理方法、装置、电子设备及可读存储介质与流程

文档序号:28813661发布日期:2022-02-09 04:56阅读:230来源:国知局
存储空间处理方法、装置、电子设备及可读存储介质与流程

1.本发明涉及存储领域,具体而言,涉及一种存储空间处理方法、装置、电子设备及可读存储介质。


背景技术:

2.为了满足使用少量盘存储更多数据且实现灾备,市场上通常采用纠删方式实现数据灾备。目前,基于纠删方式的文件存储,在创建文件的过程,通常会为文件创建分组(object),然后通过object将文件分散的写入到各个磁盘来实现文件的写入。
3.上述创建文件的方式很容易出现即使object空闲,但也不能被分配给其他文件使用,造成严重的空间浪费问题,而且浪费空间和纠删比成正比。相关技术中缺少一种有效的存储空间分配方法,来避免空间浪费。


技术实现要素:

4.本发明的目的之一在于提供一种存储空间处理方法、装置、电子设备及可读存储介质,其能够解决上述空间浪费问题。
5.本发明的实施例可以这样实现:
6.第一方面,本技术提供当接收到文件写入请求,将虚拟文件空间中的目标分片分配给待写入文件;其中,所述虚拟文件空间是由多个分片组合而成存储空间;分片是所述虚拟文件空间的最小分配单位;所述目标分片为所述多个分片中的至少一个;所述目标分片处于空闲状态;根据所述分片与分组的对应关系,确定所述目标分片对应的目标分组;将所述目标分组的空闲块空间分配给所述待写入文件。
7.第二方面,本技术提供存储空间处理装置,包括:分配模块,用于当接收到文件写入请求,将虚拟文件空间中的目标分片分配给待写入文件;其中,所述虚拟文件空间是由多个分片组合而成存储空间;分片是所述虚拟文件空间的最小分配单位;确定模块,用于根据所述分片与分组的对应关系,确定所述目标分片对应的目标分组;分配模块,用于将所述目标分组的空闲块空间分配给所述待写入文件。
8.第三方面,本发明提供一种电子设备,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机程序,所述处理器可执行所述计算机程序以实现第一方面所述的存储空间处理方法。
9.第四方面,本发明提供一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的存储空间处理方法。
10.本发明提供的一种存储空间处理方法、装置、电子设备及可读存储介质本发明实施提供的存储空间处理方法,首先当接收到文件写入请求,将虚拟文件空间中的目标分片分配给待写入文件,为待写入文件分配处于空闲状态的目标分片之后,进而可以依据分片和分组之间的对应关系,确定出一个目标分组,那么则可以将目标分组中处于空闲状态的块空间分配给该待写入文件,从而使得目标分组中空闲的块空间能够得以应用,可以避免
分组的空间浪费。
附图说明
11.为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
12.图1为一种存储架构图;
13.图2为现有的一种存储原理示意图;
14.图3为写入一个文件时的空间浪费情况示意图;
15.图4为本技术实施例提供的存储空间分配的原理图;
16.图5为本发明实施例提供的存储空间处理方法的示意性流程图;
17.图6为本发明实施例提供一种场景图;
18.图7为本发明实施例提供的步骤s501的实施方式的示意性流程图;
19.图8为本发明实施提供的另一种存储空间处理方法的示意性流程图;
20.图9为本发明实施例提供的另一种存储空间处理方法的示意性流程图;
21.图10为本发明实施例提供的另一种存储空间处理方法的示意性流程图;
22.图11为本发明实施例提供的存储空间处理装置的功能模块图;
23.图12为本发明实施例提供的一种电子设备的方框示意图。
具体实施方式
24.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
25.因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
27.在本发明的描述中,需要说明的是,若出现术语“上”、“下”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,或者是该发明产品使用时惯常摆放的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
28.此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
29.需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
30.首先对本技术涉及的名词数据进行解释。
31.纠删码(erasure code,简称ec):一种编码技术,可以在n份原始数据的基础上增加m份校验数据,如果有任意小于等于m份的数据失效,可以通过n+m份中的任意n份数据,还原出原始数据。
32.虚拟文件空间(object file system,简称ofs):管理文件的虚拟空间系统,可以被划分为多个相同空间大小的分片,分片可以作为它的最小分配单位,主要功能是负责存储空间的回收和分配。
33.分组(object):文件写入的基本单位,通常来说,一个分组可以包含n个数据块,每个数据块的大小通常为64m,在基于纠删码的存储方式中,一个分组可以包含n个数据块和m个校验块。
34.分片:虚拟文件空间的最小分配单位。
35.条带:一个分组的最小写入单位。
36.元数据:是指存储空间分配和处理过程中,每个文件对应的分配数据,下面对本实施例中涉及到的相关元数据进行解释。
37.1、空闲分片标识表,用于维护全部处于空闲状态的分片的标识,供分配文件空间时使用。分配时从头部删除若干个被分配分片的标识,回收时将回收的分片的标识加入表尾部。记为:key:bf@开始sliceid-结束sliceid;value:none。
38.2、分配位置信息表:用于维护当前分配位置的分片的sliceid,即当前分配位置为上一次分配过程中最后一个被分配分片的下一个分片的sliceid,可以用于实现循环分配,可一定程度减少表的数量。记为:key:fspos@slice id;value:none。
39.3、分配表,用于维护分配给文件的分片的sliceid,由于文件可能有多个分片组成,故需引入sliceid序号来表示,此分片是文件中的第几个分片。记为:key:ba@文件id-sliceid序号;value:slice开始id-slice结束id。
40.此外,元数据还可以包括object信息表,用于存放object映射的磁盘信息,磁盘block信息表,用于记录磁盘上的block;恢复信息表,用于系统中待恢复的object的表;节点信息表,用于存放文件节点或者目录节点,在创建文件或者目录时插入,在删除目录或者文件时删除,此处不再介绍。
41.请参见图1,图1为一种存储架构图,其中包括主机和磁盘1至磁盘n+m,每个磁盘可与主机连接,为了在进行文件写入的过程中能够有效的进行磁盘间的数据恢复,目前最常用的是基于纠删码的数据恢复方式,基于纠删方式的文件存储方式的示意图可以如图2所示,图2为现有的一种存储原理示意图,其中,文件层负责提供文件,object层表包含文件被划分成的分组,负责纠删计算和数据块的写入,提供存储空间和分组之间的映射。
42.具体地,假设纠删比为n+m,即n个数据块+m个校验块,其中,n、m均为正整数,文件写入的基本单位是一个object,则一个object可以包含n+m个数据块,将目标文件写入n+m个磁盘的过程可以为:根据目标文件的文件大小和纠删比,将目标文件划分为多个分组,包括分组1和分组2,每个分组可以包括n+m个数据块(图2中省略了数据块),进而将这n+m个数据块依次写入分组1对应的n+m个磁盘中,完成目标文件的存储。
43.然而,从上述存储方式可以看出,每个分组都是基于当前要写入的文件所创建的,若当前写入的文件的大小小于一个分组的大小,很容易出现即使object空闲,但也不能被分配给其他文件使用的情况,造成严重的空间浪费,或者,当前写入文件对应有个多个分
组,但最后一个分组存在空间浪费问题,而且上述存储方式造成的浪费空间和纠删比成正比,请参见表一,表一列出在各个典型纠删比下写入1g的文件的存储空间浪费情况:
44.纠删比(n+m)object大小(m)空间浪费(m)16+11088m64m24+21664m640m36+32496m1472m8+1576m128m16+21152m128m6+1448m320m4+1320m256m8+2640m256m12+3960m896m16+41280m256m3+1256m0m6+2512m0m2+1192m128m4+2384m128m1+1128m0m
45.例如,请参见图3,图3为写入一个文件时的空间浪费情况示意图,假设纠删比是36+3,一个分组内每个数据块的大小为64m,那么一个object占用的空间则为:39*64m=2046m,假设目标文件的大小是1024m,仅需要创建一个object即可,则实际浪费的空间为:2496m-1024m=1472m,说明一个object仍然存在1472m的空间得不到使用,浪费率超过50%。
46.再例如,以表一中纠删比为8+1为例,一个object的大小为576m,那么针对1024m大小的文件,需要创建2个object,占用空间大小为2*576m=1152m,那么浪费的空间为1152m-1024m=128m,很明显,最后一个object仍然存在空闲的空间,而这部分空间得不到利用,造成浪费。
47.为了解决上述问题,本技术实施例提供了一种存储空间处理方法,本技术首先提出了一种“虚拟文件空间”它的主要功能是负责object的存储空间的回收和分配。
48.请参见图4,图4为本技术实施例提供的存储空间分配的原理图,其中本技术在图2的基础上,提出了一种虚拟文件空间层(即ofs层),文件层可以将文件通过文件相关接口传递到ofs层,由ofs层进行存储空间的分配与回收。
49.下面针对本技术实施例提供的ofs层和object层进行详细介绍。
50.示例性的,本实施例中的ofs层,用于存储空间的分配和回收,其中,分片是ofs层的最小分配单位,分片的空间大小与纠删比和条带(strip)的空间大小有关,其中,条带是object的最小写入单位,因此,假设纠删比是n+m,其中,n为数据块数量,m为校验块数量,那么,每个分片的空间大小可以用公式表示为:
51.ofs
slice
=n*strip
ꢀꢀꢀ
(1)
52.其中,n为数据块数量,strip为一个条带的大小。
53.需要注意的是,上述公式仅仅考虑了单个分片在一个object下面的磁盘块(block)写一个条带的数据的情况,实际上单个分片可以在一个block上面写多个条带,那么分片的空间大小还可以表示为如下公式:
54.ofs
slice
=n*strip*α
ꢀꢀꢀ
(2)
55.其中,α表示条带的数量。
56.可以理解的是,在已知单个分片的大小之后,那么根据存储总容量可以计算出ofs层的容量上限和容量下限,设容量下限为0,则容量上限可以表示为:
57.spaceu=k*d*(n/(n+m))/ofs
slice
ꢀꢀꢀ
(3)
58.其中,k为系统中的磁盘数量,d为单个磁盘的容量,n为数据块的数量,m为校验块的数量,ofs
slice
分片的空间大小。
59.那么,ofs层的分片编号(sliceid)范围则可以表示为[0,spaceu)。
[0060]
示例性的,在本实施例中object层中,每个object可以映射到n+m个磁盘块(block),其中,block的编号范围为[0,n+m-1],那么设object层的最大分组数量为可以表示为:
[0061]
objectu=k*d/((n+m)*b)
ꢀꢀꢀ
(4)
[0062]
即分组编号(object id)的范围可以表示为[0,objectu)。
[0063]
其中,k为系统中的磁盘数量,d为单个磁盘的容量,n为数据块的数量,m为校验块的数量,b为单个数据块的大小。
[0064]
通过上述分析可知,对于ofs层,分片id的范围为[0,spaceu),对于object层,分组id的范围为[0,objectu),因此,为了通过分片映射到分组,本实施例首先还建立了分片与分组的对应关系,在可能的实施方式中,这种对应关系可以通过sliceid和objectid来表征,即:
[0065]
object id=slice id*ofs
slice
/(n*b)
ꢀꢀꢀ
(5)
[0066]
其中,ofs
slice
表征单个分片的大小,n为数据块的数量,b为单个数据块的大小。
[0067]
从上述对应关系可以看出,一旦确定了一个sliceid,则可以映射到object层的一个分组,进而可以用object id-blockid来唯一标识一个数据块,单一的一个数据块会通过特定的算法存到系统中的某一个磁盘上面去,具体分配算法这里不再赘述,这也是ofs层可以专注于容量分配,而object层专注于数据的写入,互不干扰的原因。
[0068]
在上述存储原理的基础上,下面介绍本发明实施例提供的一种存储空间处理方法,请参见图5,图5为本发明实施例提供的存储空间处理方法的示意性流程图,该方法包括:
[0069]
s501,当接收到文件写入请求,将虚拟文件空间中的目标分片分配给待写入文件。
[0070]
其中,虚拟文件空间是由多个分片组合而成存储空间;分片是虚拟文件空间的最小分配单位;目标分片为多个分片中的至少一个;目标分片处于空闲状态。
[0071]
在一种实施方式中,在获得待写入文件之后,可以根据文件名和大小,在元数据中查找是否存在该待写入文件,若不存在,则在元数据中插入该待写入文件的节点信息;若存在,则返回该文件以已存在的信息;
[0072]
在另一种实施方式中,在获得待写入文件之后,可以根据文件名和大小,先在元数据中查找父目录是否存在,若存在,进而在元数据中查找是否存在该待写入文件,若不存
在,则在元数据中插入该待写入文件的节点信息;若存在,则返回该文件以已存在的信息;若不存在该父目录,则可以直接返回失败信息。
[0073]
s502,根据分片与分组的对应关系,确定目标分片对应的目标分组。
[0074]
在确定目标分片之后,可以基于公式(5)所示的对应关系,确定目标分片各自的sliceid对应的object id,进而确定目标分片对应的目标分组。
[0075]
例如,假设sliceid为2的分片为目标分片,数据块数量n=36,ofs
slice
=4.5m,b=64m,那么根据公式(5),可以得到object id=slice id*ofs
slice
/(n*b)=2*4.5m/(64m*36)约等于0,因此,object id为0对应的分组即为目标分组。
[0076]
s503,将目标分组中处于空闲状态的块空间分配给待写入文件。
[0077]
可以理解的是,在一种情况下,目标分组的块空间可能全部处于空闲状态,那么可以根据待写入文件的大小,确定分配给待写入文件的块空间的数量;在另一种情况下,目标分组可能已经存在部分块空间处于占用状态,那么将最后一个被占用的块空间的下一个块空间依次分配给待写入文件。
[0078]
为了方便理解,请参见图6,图6为本发明实施例提供一种场景图,假设系统中磁盘个数k为40,单个磁盘容d为8t,磁盘块block的大小b为64m,纠删比为36+3(n+m)。写入磁盘时单个条带的大小strip指定为128k,ofs层中每个分片是由36个大小为128k的条带组合而成,则ofs层每个分片的大小为128k*36*1=4608k。
[0079]
那么,根据公式(3)得出sliceid的范围为[0,68829184)。根据公式(4)可以得到object id的范围为[0,134432)。
[0080]
其中,设文件1大小为1024m,文件2大小为4.5m,文件1和文件2是两个待写入的文件,假设在写入文件1和文件2之前,分组和分片均处于空闲状态,那么,以文件1为例,将slice id 0至slice id 227分配给文件1,根据公式(5)的对应关系可以计算到slice id 0至slice id 227均对应object id为0的分组,那么将object为0的空闲的块空间分配给文件1,被分配的空闲的块空间即图6中object层的黑色区域,进而,针对文件2,将slice id 228的分片分配给文件2,那么通过公式(5),计算到slice id 228对应的object id仍然为0,因此,将object为0的其他空闲的块空间分配给文件2,其他空闲的块空间即图6中object层紧邻着黑色区域的灰色区域。
[0081]
由上述分配过程可以看出,针对同一个分组,可以有多个文件共享其空闲的块空间,因此,可以解决上述提到的分组空间浪费的问题。
[0082]
请继续参见图6,针对上述object层的黑色区域,可以这样理解:以0-1这个数据块为例,黑色区域是由228个条带组合而成,228个条带依次为第0个分片到第227个分片各自的第1个条带,所述黑色区域的空间大小为228*128=28.5m,以此类推,0-2这个数据块的黑色区域对应第0-227个分片各自的第2个条带,0-36号数据块的黑色区域对应第0-227个分片各自第36个条带;针对object层的灰色区域,仍然以0-1这个数据块为例,灰色区域是对应第228个分片的第1个条带,依次类推,0-2这个数据块的灰色区域对应第228个分片的第2个条带,0-36号数据块的灰色区域对应第228个分片第36个条带。
[0083]
在上述分配的基础上,则可以进行文件的写入操作了,例如,针对文件1,首先0号分组将0-1至0-36个数据块以及3个校验块对应的各自的第1个条带的文件数据,依次写入39个磁盘中第1个条带的位置,进而将这39个数据块各自的第2个条带的文件数据,依次写
入39个磁盘的第2个条带的位置,以此类推,直到这39个数据块各自的228个条带的数据依次写入到这39个磁盘各自的228个条带位置,至此完成对文件1的写入,紧接着,将这39个数据块的第229个条带的文件数据依次写入这39个磁盘各自的229个条带位置,至此文件2写入完成。
[0084]
可以看出,本发明实施提供的存储空间处理方法,首先通过虚拟文件空间,为待写入文件分配处于空闲状态的目标分片,进而可以依据分片和分组之间的对应关系,确定出一个目标分组,那么则可以将给目标分组中处于空闲状态的块空间分配给该待写入文件,分组中空闲的块空间的得到应用,从而可以避免分组的空间浪费。
[0085]
可选地,本发明实施例还给出了一种分配目标分片的实施方式,请参见图7,图7为本发明实施例提供的步骤s501的实施方式的示意性流程图,步骤s501可以包括:
[0086]
s501-1,当接收到文件写入请求,根据待写入文件的文件大小和分片的大小,确定目标分片的总数。
[0087]
例如,假设待写入文件的大小为1024m,每个分片的大小为4.5m,那么,可以将待写入文件划分为1024m/4.5m为228段,因此,目标分片的数量为228个。
[0088]
s501-2,确定虚拟文件空间中的空闲分片段的起始位置。
[0089]
可以理解的是,在一种场景中,虚拟文件空间中的分片可能都处于空闲状态,那么起始位置则可以为sliceid为0;例如,假设待写入文件的大小为1024m,需要目标分片为228,那么目标分片则为sliceid为0-227的分片。
[0090]
在另一种场景中,虚拟文件空间中可能部分分片处于已分配状态,因此,虚拟文件空间中存在多个空闲分片段,因此可以在空闲分片段中确定目标分片,即将空闲分片段的起始位置作为分配的起始位置例如,虚拟文件空间中存在[0,300]个分片,其中假设上一次最后一个被分配的分片的sliceid为0-227,那么空闲分片段则为[228,300],那么空闲分片段中sliceid为228的分片可以作为起始位置。
[0091]
可以理解的是,若存在多个空闲分片段,且其中一个空闲分片段中可以得到的目标分片的数量少于总数,则可以在这多个空闲分片段中依次获得与总数一致的多个目标分片。
[0092]
其中,针对上述步骤s501-2,本发明实施例还给出一种可能的实施方式,即:
[0093]
在预设的分配位置信息表中,确定当前分配位置,将与当前分配位置相邻的下一个分配位置,确定为起始位置。
[0094]
本实施中,分配位置信息表中存储有当前分配位置,当前分配位置表征上一次分配过程中最后一个被分配分片的下一个分片所在的位置,记录为变量space
pos
,初始的space
pos
为0,也就是sliceid的下限,可以用于实现循环分配,一定程度减少表的数量。
[0095]
可以理解的是,初始的sliceid的范围为[0,spaceu],每分配一次以后,sliceid的范围变为[x,spaceu],其中x为最后一个被分配分片的下一个分片对应sliceid,每次进行分片分配之后,更新space
pos
,方便下一次分配使可以直接定位到空闲的分片所在位置。
[0096]
例如,假设上一次最后一个被分配分片的sliceid为227,那么将sliceid为227的分片的下一分片,即sliceid为228写入分配位置信息表,在下一次分配过程中,先从分配位置信息表确定当前分配位置228,那么下一次分配的起始位置即为sliceid为228的分片。
[0097]
s501-3,以起始位置为分配起点,依次将与总数一致的多个目标分片分配给待写
入文件。
[0098]
在一种可能的实施方式中,步骤s501-3可以包括以下步骤:
[0099]
步骤1,从空闲分片段的起始位置开始,依次取多个分片作为目标分片;
[0100]
步骤2,若分配位置到达空闲分片段的最后一个分片,且,已获得的目标分片的数量等于总数,则停止分配;
[0101]
步骤3,若分配位置到达空闲分片段的最后一个分片,且已分配的目标分片少于总数,则确定下一个空闲分片段,并从下一个空闲分片段的起始位置开始,执行上述步骤1-3,直到获得与总数一致的多个目标分片。
[0102]
可选地,为了实现循环分配,在获得目标分片之后,还可以更新上述分配位置信息表,即将多个目标分片中最后一个目标分片的下一个分片所在的位置,更新为分配位置信息表中的当前分配位置,从而可以方便下一次分配快速、准确的定位到分配位置。
[0103]
为了方便理解上述分配方式,下面将给出几种分配目标分片的实施方式。
[0104]
例子1空闲分片段为[0,100],请求分配50个目标分片,当前分配位置为0。那么,从0开始依次分配50个目标分片,分配出去的分片为[0,49],其中49为最后一个被分配分片,剩余的sliceid为[50,100],更新当前分配位置为50。
[0105]
例子2,空闲分片段为[0,100],请求分配50个目标分片,当前分配位置为80。那么,从80到100依次分配20个目标分片,此时目标分片的数量少于总数且分配位置到达空闲分片段即分配出去的有[80,100],还差30个目标分片,进而从0开始继续分配出去30个目标分片,即分配出去的为[0,29],剩余的空间为[29,79],更新当前分配位置为29。
[0106]
例子3,空闲分片段为[0,30],[40,60],[70,90],请求分配50个目标分片,当前分配位置为50,那么分配方式可以如下:
[0107]
首先,从当前分配位置50所在空闲分片段[40,60],依次分配10个目标分片,此时到达[40,60]的最后一个分片且分配的目标分片的数量少于50,则更新当前分配位置为70,进而在空闲分片段[70,90]进行分配,获得20个分片,此时已分配到的目标分片的数量是30少于50,且到达该[70,90]的最后一个分片,那么更新当前分配位置为0,继续在[0,30]上分配20个目标分片,分配位置到达20,得到50个目标分片后停止分配,所以最后获得的目标分片的sliceid为[50,60],[70,90],[0,17],剩余空间为[18,30],[40,49],更新当前分配位置为18。
[0108]
通过上述分配方式,可以快速准确的获得多个处于空闲状态的目标分片,进而可以基于得到的目标分片进行目标分组的匹配。
[0109]
可选地,在获得多个目标分片之后,还可以同时更新空闲分片标识表和待写入文件对应的分配表,以方便下次分配,例如,可以将多个目标分片各自对应的标识,从空闲分片标识表中删除,并将多个目标分片各自对应的标识写入待写入文件的分配表中。
[0110]
可选地,从图6可以看出,文件1和文件2可以共享一个分组,为了确定一个object被多少个文件的sliceid引用,从而避免后续因删除sliceid时,误删除object的问题,本发明实施例还提供一种实现方式,请参见图8,图8为本发明实施提供的另一种存储空间处理方法的示意性流程图,该方法还可以包括:
[0111]
s504,增加目标分组的引用计数值,其中,引用计数值表征目标分组对应的目标分片的个数。
[0112]
在可选的实施方式中,可以在待写入文件的元数据的object信息中添加object的引用计数这一变量object
ref
,用来指示该object的引用次数,object
ref
的初始值为0,当有sliceid对应到该object时,该值+1,当sliceid取消对应该object时,该值减1。通过引用计数值可以快速确定目标分组被共享的情况。
[0113]
可选地,在设置引用计数值的基础上,为了解决删除sliceid时,误删除object的问题,本实施例给出一种可能的实施方式,请参见图9,图9为本发明实施例提供的另一种存储空间处理方法的示意性流程图,该方法还可以包括:
[0114]
s505,当接收到文件删除请求,将被删除文件占用的分片的标识写入空闲分片标识表;
[0115]
s506,更新被删除文件占用的分片对应的分组的引用计数值。
[0116]
s507,若更新后的引用计数值达到预设值,则删除被删除文件占用的分片对应的分组。
[0117]
本实施例中,预设值为0,当引用计数值为0时,说明该object没有被分片引用,那么就可以删除了。
[0118]
例如,请继续参见图6,对0号object而言,其初始引用计数objectref为0,当创建了1g的文件1以后,更新objectref更新为228,因为共有228个slice引用该object;当创建了4.5m文件以后,又更新为229;当删除了1g大文件后,更新引用计数为1;当删除4.5m文件以后,更新引用计数为0;这时再也没有文件引用该object,可以删除。
[0119]
可选地,在一种可能的实施方式中,针对步骤s502,若目标分片不存在目标分组,说明当前object层创建的分组不足以写入待创建文件,此时需要重新创建新的分组,并把新的分组作为该目标分片的目标分组,因此,在图8的基础上,请参见图10,图10为本发明实施例提供的另一种存储空间处理方法的示意性流程图,该方法还可以包括:
[0120]
s508,若目标分片不存在对应的目标分组,则根据空闲的磁盘信息,创建新的分组。
[0121]
s509,将新的分组确定为目标分片对应的目标分组。
[0122]
可以理解的是,对于新创建的分组,当有目标分片引用该分组时,也需要增加该分组的引用计数值,以避免后续对该分组进行误删除的情况。
[0123]
可选地,在将所述目标分组中空闲的块空间分配给所述待写入文件之前,所述方法还包括:若所述目标分片不存在对应的目标分组,则根据空闲的磁盘信息,创建新的分组;将所述新的分组确定为所述目标分片的目标分组;更新所述目标分组的所述引用计数值。
[0124]
可选地,本发明实施例还提供了一种建立分片与分组的对应关系的实施方式,建立上述对应关系可以包括以下步骤:
[0125]
步骤1,根据预设纠删比和磁盘参数信息,确定初始的虚拟分片空间的分片标识的最大值,以及确定分组标识的最大值;
[0126]
步骤2,根据分片标识的最大值,将初始的虚拟文件空间划分为多个分片,并基于分组标识的最大值,创建多个分组;
[0127]
步骤3,根据每个分片的空间大小、磁盘参数信息,建立分片与分组的对应关系。
[0128]
可选地,由于ofs层的空间范围由系统中的存储容量决定,当把磁盘从系统中拔出
的时候,这个时候无须去更新ofs的空间,当把磁盘添加到系统中时,这时候需要更新ofs空间,下面给出一种可能的实施方式,即:当存在新增的磁盘,根据所述新增的磁盘的参数信息,计算新的所述分片标识的最大值;基于新的所述分片标识的最大值,更新所述虚拟文件空间。
[0129]
可以理解的是,当存在新增的磁盘,根据所述新增的磁盘的参数信息,先计算出新的sliceid的最大值,然后和之前的sliceid的最大值进行比较,取两者中最大的那个值作为新的ofs空间的上限,其下限还是0。
[0130]
为了实现上述实施例中的各个步骤以实现相应的技术效果,本发明实施例提供的存储空间处理方法可以在硬件设备或者以软件模块的形式实现中执行,当存储空间处理方法以软件模块的形式实现时,本发明实施例还提供一种存储空间处理装置,请参见图11,图11为本发明实施例提供的存储空间处理装置的功能模块图,该存储空间处理装置600可以包括:
[0131]
分配模块610,用于当接收到文件写入请求,将虚拟文件空间中的目标分片分配给待写入文件;其中,所述虚拟文件空间是由多个分片组合而成存储空间;分片是所述虚拟文件空间的最小分配单位;
[0132]
确定模块620,用于根据所述分片与分组的对应关系,确定所述目标分片对应的目标分组;
[0133]
分配模块610,用于将所述目标分组的空闲块空间分配给所述待写入文件。
[0134]
可以理解的是,分配模块610和确定模块620可以协同地执行图5中的步骤以实现相应的技术效果。
[0135]
在一些可能的实施方式中,该存储空间处理装置600还包括更新模块,用于增加所述目标分组的引用计数值,其中,所述引用计数值表征所述目标分组对应的目标分片的个数。
[0136]
在一些可能的实施方式中,该存储空间处理装置600还包括写入模块和删除模块,写入模块用于当接收到文件删除请求,将被删除文件占用的分片的标识写入空闲分片标识表;其中,所述空闲分片标识表用于维护全部处于空闲状态的分片的标识;更新模块还用于更新所述被删除文件占用的分片对应的分组的引用计数值;删除模块用于若更新后的所述引用计数值达到预设值,则删除所述被删除文件占用的分片对应的分组。
[0137]
在一些可能的实施方式中,分配模块610,具体用于:当接收到文件写入请求,根据所述待写入文件的文件大小和所述分片的大小,确定所述目标分片的总数;确定所述虚拟文件空间中的空闲分片段的起始位置;以所述起始位置为分配起点,依次将与所述总数一致的多个所述目标分片分配给所述待写入文件。
[0138]
在一些可能的实施方式中,分配模块610,还具体用于:在预设的分配位置信息表中,确定当前分配位置,其中所述当前分配位置表征上一次分配过程中最后一个被分配分片对应的位置;将与所述当前分配位置相邻的下一个分配位置,确定为所述起始位置。
[0139]
在一些可能的实施方式中,写入模块,还用于将多个所述目标分片各自对应的标识,从空闲分片标识表中删除,并将所述标识写入所述待写入文件的分配表中。
[0140]
在一些可能的实施方式中,更新模块,用于将所述多个目标分片中最后一个目标分片所在的位置,更新为所述分配位置信息表中的所述当前分配位置。
[0141]
在一些可能的实施方式中,还包括创建模块,用于若所述目标分片不存在对应的目标分组,则根据空闲的磁盘信息,创建新的分组;确定模块620,还用于将所述新的分组确定为所述目标分片对应的目标分组。
[0142]
在一些可能的实施方式中,还包括建立模块,用于根据预设纠删比和磁盘参数信息,确定初始的虚拟分片空间的分片标识的最大值,以及确定分组标识的最大值;根据所述分片标识的最大值,将所述初始的所述虚拟文件空间划分为多个分片,并基于所述分组标识的最大值,创建多个分组;根据每个所述分片的空间大小、所述磁盘参数信息,建立所述分片与分组的对应关系。
[0143]
在一些可能的实施方式中,更新模块,还用于当存在新增的磁盘,根据所述新增的磁盘的参数信息,计算新的所述分片标识的最大值;基于新的所述分片标识的最大值,更新所述虚拟文件空间。
[0144]
需要说明的是,本发明实施例还的存储空间处理装置600中的各个功能模块可以软件或固件(firmware)的形式存储于存储器中或固化于电子设备的操作系统(operating system,os)中,并可由电子设备中的处理器执行。同时,执行上述模块所需的数据、程序的代码等可以存储在存储器中。
[0145]
因此,本发明实施例还提供一种电子设备,该电子设备可以是图1所示的主机,或者是其他具有数据处理功能的电子设备,本发明不做限定。
[0146]
如图12,图12为本发明实施例提供的一种电子设备的方框示意图。该电子设备700包括通信接口703、处理器702和存储器701。该处理器702、存储器701和通信接口703相互之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。存储器701可用于存储软件程序及模块,如本发明实施例所提供的存储空间处理方法对应的程序指令/模块,处理器702通过执行存储在存储器701内的软件程序及模块,从而执行各种功能应用以及数据处理。该通信接口703可用于与其他节点设备进行信令或数据的通信。在本发明中该电子设备70可以具有多个通信接口703。
[0147]
其中,存储器701可以是但不限于,随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-only memory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom),电可擦除只读存储器(electric erasable programmable read-only memory,eeprom)等。
[0148]
处理器702可以是一种集成电路芯片,具有信号处理能力。该处理器可以是通用处理器,包括中央处理器(central processing unit,cpu)、网络处理器(network processor,np)等;还可以是数字信号处理器(digital signal processing,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。
[0149]
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如前述实施方式中任一项的存储空间处理方法。该计算机可读存储介质可以是,但不限于,u盘、移动硬盘、rom、ram、prom、eprom、eeprom、磁碟或者光盘等各种可以存储程序代码的介质。
[0150]
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1