CN106462491B - 一种存储数据的管理方法、存储管理器及存储系统 - Google Patents
一种存储数据的管理方法、存储管理器及存储系统 Download PDFInfo
- Publication number
- CN106462491B CN106462491B CN201480016987.4A CN201480016987A CN106462491B CN 106462491 B CN106462491 B CN 106462491B CN 201480016987 A CN201480016987 A CN 201480016987A CN 106462491 B CN106462491 B CN 106462491B
- Authority
- CN
- China
- Prior art keywords
- storage
- blocks
- storage container
- block
- container
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
Abstract
一种存储数据的管理方法、存储管理器以及存储系统,包括:每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号(S310);为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间(S320);根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系(S330);记录所述m个存储块的块号到所述本次待保存的数据的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址(S340),从而提升了磁盘空间利用率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种存储数据的管理方法、存储管理器以及存储系统。
背景技术
文件系统记录数据的位置信息一般采取以下方式:记录数据的虚拟地址,通过映射表将虚拟地址映射到物理地址。该方式逻辑简单且上层不需要理解底层布局。
在系统运行一段时间后,已经经过多次空间回收,磁盘碎片化问题凸显,需要进行磁盘碎片(Defragmentation)整理,碎片整理过程依赖于文件系统的布局。考虑到空间回收和数据局部性,通常文件系统会把数据/文件以存储块(所述存储块是指文件系统中读写数据的最小单位或者最基本的单位,在不同的文件系统中可能有不同的命名,如基本数据块Chunk,数据块Data Block等)的形式进行记录,并将多个存储块以存储容器Container(本领域也称数据段Segment)的形式组织起来。
图1A为现有技术中一种使用容器地址转换表CAT记录数据位置信息的文件系统的CAT索引示意图。该方案将数据所在的存储容器号和存储块号(<CTID,CKID>)组合起来作为数据的虚拟地址,再通过容器地址转换表CAT将CT(Container的简称)映射到物理地址。以数据<CTID1,CKID2>为例,该虚拟地址<CTID1,CKID2>即代表存储容器CT1中的存储块CK2中所存的数据。通过查询CAT表可知存储容器CT1的物理地址PA1,同时在每个存储容器中都有元数据记录该存储容器中每个CK的大小,校验码,在CT中的位置等相关信息,因此在得知了CT1的物理地址PA1后,再通过查询CT1中的元数据即可确定所述数据<CTID1,CKID2>的物理地址。
图1B为现有技术经过磁盘整理后的CAT索引结构示意图,可见经过磁盘整理后,原CT2中的CK4和CK6迁移到CT1,此时CAT表中,CT2的索引信息将修改为CT1的物理地址PA1。然而,由于该现有技术通过<CTID,CKID>组合起来作为数据的虚拟地址,进行磁盘整理的时候,也只能是一个CT中的存储块必须整体迁移到另一个CT中,如图1C所示,如果将CT2中的CK4迁移到CT1中,而将CT2中的CK6迁移到CT3中,因为CT1和CT3的物理地址是不同的,此时CAT表中的CT2的物理地址将无法映射。
因此,现有技术中,文件系统对存储数据的管理方法使得磁盘整理的时候的灵活性和效率都不好,磁盘整理之后的磁盘空间利用率仍然不高。
发明内容
有鉴于此,实有必要提供一种存储数据的管理方法的方法、存储管理器和存储系统,以提高磁盘整理的灵活性。
第一方面,本发明实施例提出了一种存储数据的管理方法,包括:
每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;
为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间,n为大于等于1的自然数;
根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;
记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址。
结合第一方面,在第一种可能的实现方式中,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
结合第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述存储块与存储容器的对应关系包括多条索引,其中,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,所述每条索引的键为同一个存储容器所容纳的全部存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块被配置的块号的最小值大于前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于后一次待保存数据所配置的存储块的块号的最小值;
所述每条索引中的代表值为所述同一个存储容器所容纳的存储块的最小块号。
结合第一方面的第三种可能的实现方式,在第四种可能的实现方式中,所述为所述m个存储块指定n个存储容器,以及根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,包括:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
结合第一方面的第二种可能的实现方式,在第五种可能的实现方式中,每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块被配置的块号的最小值大于后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于前一次待保存数据所配置的存储块的块号的最小值;
所述每条索引中的代表值为同一个存储容器所容纳的存储块的最大块号。
结合第一方面的第五种可能的实现方式,在第六种可能的实现方式中,所述为所述m个存储块指定n个存储容器,以及根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,包括:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
结合第一方面的第三种可能实现的方式至第一方面的第六种可能实现的方式种的任一种可能实现的方式,在第七种可能的实现方式中,还包括:接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
结合第一方面的第三种可能实现的方式至第一方面的第六种可能实现的方式种的任一种可能实现的方式,在第八种可能的实现方式中,还包括:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
扫描所述待整理的存储容器,获取逻辑相邻的待整理的存储容器中包含的非垃圾存储块,所述逻辑相邻表示所述存储块与存储容器的对应关系中每条索引的键的值大小相邻;
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
结合第一方面的第三种可能实现的方式至第一方面的第六种可能实现的方式种的任一种可能实现的方式,在第九种可能的实现方式中,所述方法还包括:
接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,查询所述待读取的数据所在的文件的文件元数据,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数;
根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数;
读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息,每个存储容器的元数据用于描述所述每个容器中所有存储块的信息。
第二方面,本发明实施例提出了一种存储管理器,应用于存储系统中,所述存储系统包括存储设备以及存储管理器,所述存储设备包含用于提供物理地址空间的存储介质,所述存储管理器用于接收由应用触发的数据保存请求,将所述待保存的数据转发到所述存储设备进行保存;所述存储管理器包括:
存储块管理模块,用于在每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;
存储容器管理模块,用于为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间,n为大于等于1的自然数;
记录模块,用于根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;以及,
所述记录模块还用于记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址。
结合第二方面,在第一种可能的实现方式中,,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
结合第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述记录模块中记录的所述存储块与存储容器的对应关系中包括多条索引,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,所述每条索引的键为同一个存储容器所容纳的存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
结合第二方面的第二种可能的实现方式,在第三种可能的实现方式中,所述存储块管理模块每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块的块号的最小值大于为前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块的块号的最大值小于为后一次待保存数据所配置的存储块的块号的最小值;
所述记录模块具体用于,将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。
结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述存储容器管理模块具体用于执行下述操作:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器,以及确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,则通知所述记录模块在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
b、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;再次通知所述记录模块在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
c、当所述更新的工作的存储容器为满存储容器时,再次执行步骤b,直至将所述m个存储块指定在所述n个存储容器中;
所述记录模块具体用于,在接到所述存储容器管理模块发来的增加一条索引的通知时,在所述存储块与存储容器的对应关系中执行增加索引的操作。
结合第二方面的第二种可能的实现方式,在第五种可能的实现方式中,所述存储块管理模块每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块的块号的最小值大于为后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块的块号的最大值小于为前一次待保存数据所配置的存储块的块号的最小值;
所述记录模块具体用于,将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。
结合第二方面的第五种可能的实现方式,在第六种可能的实现方式中,所述存储容器管理模块具体用于执行下述操作:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器,以及确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,则通知所述记录模块在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
b、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;再次通知所述记录模块在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
c、当所述更新的工作的存储容器为满存储容器时,再次执行步骤b,直至将所述m个存储块指定在所述n个存储容器中;
所述记录模块具体用于,在接到所述存储容器管理模块发来的增加一条索引的通知时,在所述存储块与存储容器的对应关系中执行增加索引的操作。
结合第二方面的第三种可能实现的方式至第六种可能的实现方式中任一种可能实现的方式,在第七种可能的实现方式中,所述存储管理器还包括磁盘整理模块,所述磁盘整理模块用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并通知所述记录模块更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
结合第二方面的第三种可能实现的方式至第六种可能的实现方式中任一种可能实现的方式,在第八种可能的实现方式中,所述存储管理器还包括磁盘整理模块,所述磁盘整理模块用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
扫描所述待整理的存储容器,获取逻辑相邻的待整理的存储容器中包含的非垃圾存储块,所述逻辑相邻表示所述存储块与存储容器的对应关系中每条索引的键的值大小相邻;
为所述非垃圾存储块重新指定新的存储容器,并通知所述记录模块更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
第三方面,本发明实施例提出了一种存储系统,所述存储系统包括存储设备以及存储管理器;
所述存储设备包含存储介质,用于提供物理地址空间来保存数据;
所述存储管理器,用于在每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;
为所述m个存储块指定n个存储容器,其中,每个存储容器表示所述存储设备上的一段物理存储空间,n为大于等于1的自然数;
根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;以及
记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址。
结合第三方面,在第一种可能的实现方式中,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
结合第三方面的第一种可能的实现方式,在第二种可能的实现方式中,所述存储管理器用于记录存储块与存储容器的对应关系具体包括:
所述存储管理器记录的所述存储块与存储容器的对应关系中包括多条索引,每条索引表示被指定到同一个存储容器的全部存储块的指向,其中,每条索引的键为同一个存储容器所容纳的存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
结合第三方面的第二种可能的实现方式,在第三种可能的实现方式中,所述配置单元包括:所述存储管理器具体用于,将每次分配的所述m个存储块的块号配置为线性递增,且配置所述m个存储块的块号的最小值大于为前一次待保存数据所配置的存储块的块号的最大值或者配置所述m个存储块的块号的最大值小于为后一次待保存数据所配置的存储块的块号的最小值;
所述存储管理器具体用于将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。
结合第三方面的第三种可能的实现方式,在第四种可能的实现方式中,所述存储管理器具体用于执行下述操作:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
结合第三方面的第二种可能的实现方式,在第五种可能的实现方式中,所述存储管理器具体用于,将每次分配的所述m个存储块的块号配置为线性递减,且配置所述m个存储块的块号的最小值大于为后一次待保存数据所配置的存储块的块号的最大值或者配置所述m个存储块的块号的最大值小于为前一次待保存数据所配置的存储块的块号的最小值;
所述存储管理器具体用于将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。
结合第三方面的第五种可能的实现方式,在第六种可能的实现方式中,所述存储管理器为所述m个存储块指定n个存储容器,以及记录存储块与存储容器的对应关系,具体用于执行下述操作:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条的索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
结合第三方面的第三种可能实现的方式至第三方面的第六种可能实现的方式中任一种可能的实现方式,在第七种可能的实现方式中,所述存储管理器还用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
结合第三方面的第三种可能实现的方式至第三方面的第六种可能实现的方式中任一种可能的实现方式,在第八种可能的实现方式中,所述存储管理器还用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
扫描所述待整理的存储容器,获取逻辑相邻的待整理的存储容器中包含的非垃圾存储块,所述逻辑相邻表示所述存储块与存储容器的对应关系中每条索引的键的值大小相邻;
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
所述存储管理器还用于:
在接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,查询所述待读取的数据所在的文件的文件元数据,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数,根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数,以及读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息,每个存储容器的元数据用于描述所述每个容器中所有存储块的信息。第四方面,本发明实施例提供一种一种存储管理器,包括:
包括用于与存储设备交互的接口、处理器、存储器,所述处理器通过总线与所述处理器连接,所述处理器通过所述接口与所述存储设备交互信息;
所述存储器用于存储计算机执行指令,当所述存储管理器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述存储管理器执行以上第一方面或第一方面任一可能的实现方式所提供的存储数据的管理方法。
第五方面,本发明实施例提供一种计算机,包括:处理器、存储器、总线和通信接口;
所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行以上第一方面或第一方面任一可能的实现方式所提供的存储数据的管理方法。
第六方面,本发明实施例提供一种计算机可读介质,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行以上第一方面或第一方面任一可能的实现方式所提供的存储数据的管理方法。
本发明实施例中,每次为待保存的数据分配m个存储块,并为所述m个存储块指定n个存储容器,根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,并记录所述m个存储块的块号到所述本次待保存的数据的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址,使得系统中数据的虚拟地址与数据所在的存储容器无关,能够根据数据所在的存储块的块号查询所述存储块与存储容器的对应关系,从而获得数据的物理地址的相关信息,此种数据存储的管理方法,使得在进行磁盘整理的时候,不需要以存储容器为粒度来整体迁移,而直接以存储块为粒度进行磁盘的整理,因而提升了磁盘整理的效率和灵活性,也提升了磁盘的空间利用率。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A为现有技术中一种使用CAT容器地址转换表记录数据的位置信息的文件系统的CAT索引结构示意图;
图1B为现有技术中一种使用CAT记录数据的位置信息的文件系统磁盘碎片整理后的CAT索引结构示意图;
图1C为现有技术中一种使用CAT记录数据的位置信息的文件系统磁盘碎片整理的原理示意图;
图2A为根据本发明实施例提供的一种存储系统的结构示意图;
图2B为本发明实施例的应用场景示意图;
图3为根据本发明实施例的一种存储数据的管理方法的示范性流程图;
图4为根据本发明实施例创建的CK2C(Chunk to Container)存储块到存储容器映射表的结构示意图;
图5为依据本发明一实施例的存储数据的管理方法的示范性流程图;
图6A为依据本发明一实施例的磁盘整理方法的示范性流程图;
图6B为依据本发明一实施例的磁盘整理方法的原理图;
图7为依据本发明一实施例的存储管理器的结构示意图;
图8为本发明实施例的计算机的结构示意图。
具体实施方式
为使得本发明的发明目的、特征、优点能够更加的明显和易懂,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述,显然,所描述的实施例仅仅是本发明一部分实施例,而非全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为方便理解实施,本发明实施例首先提供一种存储系统200。如图2A所示为该存储系统200的逻辑结构示意图,存储系统200包括:存储管理器210和存储设备220,所述存储管理器210分别与外部设备(如主机、应用服务器等,本方案不限制外部设备的数量)和所述存储设备220通信相连。
其中,所述存储设备220可以包含存储介质222和存储控制器221(本发明实施例并不限制所述存储介质222和所述存储控制器221的数量,这里仅为了方便描述才示出了图示中数量的221和222),所述存储介质222用于提供物理地址空间来保存数据,在具体实现过程中,所述存储介质222,可以通过例如但不限于EEPROM、ROM、固态硬盘SSD、硬盘HDD、磁带、光硬盘或其他非易失性存储装置来实现,对此不作为对本发明实施例的限制;所述存储控制器221用于管理、调度所述多个存储介质222,仅作为示例而非限制,所述存储控制器221与所述存储介质222可以组成磁盘阵列RAID(Redundant Arrays of Independent Disks),对此不作为对本发明实施例的限制。
所述存储管理器210,作为外部设备(主机host、APP Service)与所述存储设备220实现数据读写的中间单元,可以如图2A所示单独设置在一台物理设备上,作为一种具体的实现方式,所述存储管理器210可以通过对文件系统进行改造来实现。需要注意的是,本发明实施例中提到的文件系统是指对文件存储设备(包括但不限于图2A中的存储设备200)的地址空间进行组织和分配,负责文件/数据的存储并对存入的文件/数据进行管理、检索和保护的系统,即本发明实施例中的文件系统包括文件管理功能和空间管理功能。
所述存储管理器210,具体用于在每次接收到来自主机的数据保存请求之后,为本次待保存的数据分配m个存储块(本发明实施例中的存储块CK是指读写数据的最小单位或者最基本的单位,在不同的系统中可能有不同的命名,如基本数据块Chunk,数据块DataBlock等),其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号(CKID),m为大于等于1的自然数。需要注意的是,本发明实施例中所指的每次接收到数据保存请求可以是指存储管理器210一次接收到一个来自主机的数据保存请求,也可以是指存储管理器210一次接收到多个来自主机的保存请求数据保存请求,且所述数据保存请求可以是由外部应用触发也可以由所述存储管理器210内部的指令函数触发,对此,均不作为对本方案实施例的限制。
在分配好存储块之后,所述存储管理器210为所述m个存储块指定n个存储容器(CT),其中,每个存储容器表示所述存储设备220上的一段物理存储空间,n为大于等于1的自然数。需要注意的是,本发明实施例中所提到的存储容器用于容纳多个所述存储块,本领域也称所述存储容器为数据容器Container(CT)或者数据段Segment。存储容器还可以容纳存储块相关的元数据。所述每个存储容器表示所述存储设备220上的一段物理存储空间,是指所述存储管理器所分配的每个存储容器实际对应了所述存储设备220(具体是指存储介质222)上的一段连续不间断的物理地址空间,所述一段物理存储空间既可以是由连续、不间断的物理地址空间组成,也可以是由离散、间断的物理地址空间所组成,仅作为示例而非限制,当所述存储介质222为磁盘时,所述每个存储容器可以实际对应存储设备提供的逻辑卷上的一段连续的逻辑地址,也可以对应磁盘上一段连续的扇区或磁道,还可以对应磁盘上由离散、间断的扇区或磁道所组成的一段物理存储空间,例如通过RAID条带化的形式将所述离散、间断的扇区或磁道组成一段物理存储空间。每个存储容器配置有元数据,每个存储容器的元数据记录所述每个存储容器容纳的存储块的每个存储块的校验码、数据大小、在CT中的位置等相关信息。
本发明实施例中,所述存储管理器210中将保存不同于现有技术的新的对应关系,在本发明实施例中称为存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;本发明实施例中,所述存储管理器210不同于现有技术中所使用的,将<CTID,CKID>组合起来用作为虚拟地址的方法,而是记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址。所述存储管理器210将存储块的块号用作为待保存数据的虚拟地址可以在分配好存储块之后即执行,也可以在记录号存储块与存储容器的对应关系之后再进行,本发明实施例对此不做限定。需要注意的是,本发明实施例所述的虚拟地址用来作为所述存储管理器对数据进行寻址时的寻址地址使用,上层应用和底层存储设备均无需感知这个虚拟地址,虚拟地址仅对于存储管理器而言具有寻址意义。例如,所述存储管理器在接收到的数据读取请求后,根据所述数据读取请求确定待读取的数据的虚拟地址,即定位待读取的数据在所述存储管理器所定义的虚拟存储空间中的位置。一般来说,待保存的数据的虚拟地址或者待读取的数据的虚拟地址采用元数据的形式记录在所述存储管理器中。本发明实施例中的所述存储管理器保存有多个文件的元数据,每个文件对应有保存的数据,每个文件都有文件的元数据,文件的元数据为本领域公知的只是,例如,包括文件目录信息和索引节点信息等等。本发明实施例提供的存储系统200中,由存储管理器210负责为待保存的数据分配m个存储块,并为所述m个存储块指定n个存储容器,根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,并记录所述m个存储块的块号到所述本次待保存的数据的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址,使得系统中记录的数据的虚拟地址与数据所在的存储容器无关,能够根据数据所在的存储块查询所述存储块与存储容器的对应关系,从而获得数据的物理地址的相关信息,此种数据存储的管理方法,使得在进行磁盘整理的时候,不需要以存储容器为粒度来整体迁移,而直接以存储块为粒度进行磁盘的整理,因而提升了磁盘整理的效率和灵活性,也大幅提升了磁盘的空间利用率。
进一步的,为方便记录和管理,所述存储管理器210可以为所述每个存储容器配置有唯一的标识(CTID),所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。在具体实现过程中,仅作为示例,所述每个存储容器的标识可以通过映射方式映射到物理地址或通过指定系统存储容器的初始物理地址并指定所述每个存储容器的空间大小(如8M),再通过计算偏移量(CTID*8M)得到所述每个存储容器所对应的物理地址。对此,不作为对本发明实施例保护范围的限制。
进一步的,所述存储管理器210记录的所述存储块与存储容器的对应关系中包括多条索引,每条索引表示被指定到同一个存储容器的全部存储块的指向,其中,每条索引的键为同一个存储容器所容纳的存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
本发明实施例中,所述存储管理器210通过多条索引来记录所述存储块与存储容器的对应关系,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,且所述每条索引的键配置为同一个存储容器所容纳的全部存储块的块号的代表值,所述每条索引的值配置为所述同一个存储容器的标识。因而,在保证能够记录所述存储块与存储容器的对应关系的同时,使得所述每个存储容器仅需要一条索引就能够记录所述每个存储容器中的全部存储块,降低了所述存储块与存储容器的对应关系的冗余度,使得对应关系简单易查,提高查询使用的效率。
作为一种优选的实施方式,所述存储管理器210具体可以将每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块被配置的块号的最小值大于前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于后一次待保存数据所配置的存储块的块号的最小值;所述存储管理器具体用于将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。在具体实现过程中,仅作为示例而非限制,所述存储管理器210将每次分配的所述m个存储块的块号配置为线性递增可以通过如下算法实现:CKIDnew=CKIDmax+1,其中,所述CKIDnew为每次新配置的一个存储块的块号,所述CKIDmax为所述文件系统中当前最大的数据块号。
本发明实施例中,存储管理器210将每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块被配置的块号的最小值大于前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于后一次待保存数据所配置的存储块的块号的最小值;并将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。使得算法简单,且易于实现所述每个存储容器仅需要一条索引就能够记录所述每个存储容器中的全部存储块。
进一步,基于上述存储块号线性递增的实现方式,所述存储管理器210具体通过如下的方式来实现存储块指定到存储容器,以及存储块与存储容器的对应关系的记录:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;在具体实现过程中,为了保证系统中每个存储容器里面所容纳的存储块的块号的数值范围与其他任何一个存储容器所容纳的存储块的块号数值范围都不出现交集,所述存储管理器210在任一时刻都最多仅配置有一个存储容器用于容纳存储块,该存储容器就是所述当前工作的存储容器。
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;需要注意的是,所述空闲存储容器即为不包含任何存储块的存储容器,比如由文件系统新建的存储容器,或者经空间回收后不包含存储块的旧存储容器。
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;需要注意的是,所述满存储容器是指存储容器中已经没有足够的空间来容纳下一个待分配的存储块了。同时,基于与步骤a中相同的理由,在当前工作的存储容器为满存储容器时,获得的所述更新的工作的存储容器必须为空闲容器。
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
本实施例详细说明了如何为所述m个存储块分配所述n个存储容器并记录所述存储块与存储容器的对应关系,算法简单且易于实现,当然在具体实现过程中,可能上述步骤a-步骤e可能会被拆分为更多个小步骤或者合并为几条步骤执行,也可能变换步骤之间的执行顺序,由于上述变换都是基于本实施例的基础上无需经过创造性劳动即可实现,因此都应归于本实施例的保护范围。
作为一种优选的实施方式,所述存储管理器210具体用于,将每次分配的所述m个存储块的块号配置为线性递减,且配置所述m个存储块的块号的最小值大于为后一次待保存数据所配置的存储块的块号的最大值或者配置所述m个存储块的块号的最大值小于为前一次待保存数据所配置的存储块的块号的最小值;
所述存储管理器210具体用于将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。
本发明实施例中,存储管理器210将每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块被配置的块号的最小值大于后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于前一次待保存数据所配置的存储块的块号的最小值;并将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。使得算法简单,且易于实现所述每个存储容器仅需要一条索引就能够记录所述每个存储容器中的全部存储块。
可选的,当所述存储管理器210将每次分配的所述m个存储块的块号配置为线性递减时,所述存储管理器210具体用于执行下述操作:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条的索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
本实施例详细说明了如何为所述m个存储块分配所述n个存储容器并记录所述存储块与存储容器的对应关系,算法简单且易于实现,当然在具体实现过程中,如前一个实施例所述,基于本实施例的变形都应归于本实施例的保护范围。
进一步的,当所述存储管理器210将每次分配的所述m个存储块的块号配置为线性递增或线性递减时,所述存储管理器210还用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块(即还会被系统使用的存储块);
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
本实施例中,存储管理器210在接收到磁盘整理指令后,能够确定待扫描的存储容器(可以通过多种方式实现,对此不作为本方案实施例的限制),获取每个待整理的存储容器包含的非垃圾存储块,并以所述非垃圾存储块为粒度重新指定新的存储容器,同时更新所述存储块与存储容器的对应关系,具体是通过配置每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集来实现。使得在磁盘整理时,能够以存储块为粒度进行灵活整理,并且整理后在所述存储块与存储容器的对应关系中仍然保证每个新的存储容器仅需要一条索引就能记录所述每个新的存储容器中的全部非垃圾存储块,进而降低虚拟地址到物理地址的映射代价。
进一步的,当所述存储管理器210将每次分配的所述m个存储块的块号配置为线性递增或线性递减时,所述存储管理器210还用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块(即已经不会被系统使用或已被空间回收的存储块)的存储容器;
扫描所述待整理的存储容器,获取逻辑相邻的待整理的存储容器中包含的非垃圾存储块,所述逻辑相邻表示所述存储块与存储容器的对应关系中每条索引的键的值大小相邻(该大小相邻即是指两条索引的键的值紧挨着,所述两条索引的键值构成的键值区间中不包含其他任何一条索引的键值);
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
本实施例中,存储管理器210在接收到磁盘整理指令后,能够确定所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器为待整理的存储容器,并通过在所述逻辑相邻的待整理的存储容器中对非垃圾存储块指定新的存储容器,同时更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。使得在磁盘整理时,能够以包含垃圾存储块的存储容器为对象进行灵活整理,并且整理后在所述存储块与存储容器的对应关系中仍然保证每个新的存储容器仅需要一条索引就能记录所述每个新的存储容器中的全部非垃圾存储块,进而降低虚拟地址到物理地址的映射代价。
进一步的,所述方法还包括:接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数;仅作为示例而非限制,所述待读取的数据的信息包括所述待读取的数据的文件名、所述待读取的数据在文件中的偏移量、所述待读取的数据的长度等相关信息。当获得所述待读取的数据的信息后,可以查询待读取的数据所在的文件的元数据,例如先读取文件系统的目录,获得所述待读取的数据的inode(索引节点)信息,再根据所述待读取的数据的inode信息,查询所述待读取的数据的虚拟地址,所述待读取的数据的虚拟地址包括p个存储块的块号。
根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数;
读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息;具体实现过程中,所述q个存储容器的元数据记录了所述q个存储容器内每个存储块的校验码、数据大小、在CT中的位置等相关信息。由于所述q个存储容器的标识指示到所述q个存储容器的物理地址,因此知道了所述q个存储容器的物理地址后,再加上所述q个存储容器内的元数据的信息,就可以确定所述p个存储块的物理地址信息。
根据所述p个存储块的物理地址信息,从所述存储设备上读取所述待读取的数据。
进一步的,所述方法还可以包括:接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数;
根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数;
将所述q个存储容器的标识以及所述q个存储容器的元数据所记录的所述p个存储块的位置信息发送给所述存储设备,以便于所述存储设备确定所述所述p个存储块的物理地址信息;
根据所述p个存储块的物理地址信息,从所述存储设备上读取所述待读取的数据。在具体实现过程中,所述元数据记录了所述待寻址的存储块的块号所对应的存储容器内每个存储块的校验码、数据大小、在CT中的位置等相关信息。
图2B为本发明实施例的存储管理器的一种具体实现的组成示意图。图2B包括存储管理器A(未编号)、存储设备230和存储管理器B(未编号),这里只是为了方便描述才示出了两个存储管理器A和B,存储管理器B可以作为存储管理器A的备份,存储管理器的数量不作为对本发明实施例的限制,一般来说,设置一个存储管理器即可实现本发明实施例。存储管理器A包括处理器211、与存储设备交互的接口(未示出)和存储器212,处理器211和存储器212通过总线(未编号)通信,处理器211执行存储器212中的计算机指令,并使得存储管理器A执行包括但不限于图2A中的实施例。存储管理器A通过所述与存储设备交互的接口与所述存储设备230通信,所述所述存储设备230用于存储存储管理器A转发的数据,存储管理器A实现的功能或方法与图2A中的存储设备220类似,这里不再赘述。
图3为依据本发明实施例的一种存储数据的管理方法的示范性流程图。该存储数据的管理方法可以但不限于应用于如图2A所示的存储系统中或图2B所示的应用场景中。虽然下文描述的方法300的流程包括以特定顺序出现的多个操作,但是应该清楚了解,这些操作也可以包括更多的操作或合并于更少的操作中,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)或者改变步骤之间的执行顺序,对此均应落入本发明实施例的保护范围。如图3所示,该方法包括:
步骤S310,每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数。需要注意的是,如图2A的实施例中已述的,所述每次接收到数据保存请求可以是指一次接收到一个数据保存请求,也可以是指一次接收到多个数据保存请求。
步骤S320,为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间,n为大于等于1的自然数。图2A的实施例中已对所述一段物理存储空间作了详细的解释,在此不再赘述。
步骤S330,根据所述m个存储块与所述n个存储容器的对应关系更新储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系。
步骤S340,记录所述m个存储块的块号到所述本次待保存的数据的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址。
根据本发明实施例提供的技术方案,通过每次为待保存的数据分配m个存储块,并为所述m个存储块指定n个存储容器,根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,同时记录所述m个存储块的块号到所述本次待保存的数据的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址,使得存储块与存储容器的对应关系能够记录下来,且所述数据的虚拟地址与数据所在的存储容器无关,因而,在进行磁盘整理的时候,不需要以存储容器为粒度来整体迁移,提升了磁盘整理的效率和灵活性,也大幅提升了磁盘的空间利用率。
进一步的,为方便记录和管理,步骤S320中的所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。图2A的实施例中已经详细描述了如何使用所述每个存储容器的标识指示到所述每个存储容器所对应的物理地址,在此不再赘述。
进一步的,步骤S330中所述存储块与存储容器的对应关系包括多条索引,其中,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,所述每条索引的键为同一个存储容器所容纳的全部存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
根据本发明实施例提供的技术方案,通过多条索引来记录所述存储块与存储容器的对应关系,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,且所述每条索引的键配置为同一个存储容器所容纳的全部存储块的块号的代表值,所述每条索引的值配置为所述同一个存储容器的标识。因而,在保证能够记录所述存储块与存储容器的对应关系的同时,使得所述每个存储容器仅需要一条索引就能够记录所述每个存储容器中的全部存储块,降低了所述存储块与存储容器的对应关系的映射代价。
优选的,在所述存储块与存储容器的对应关系包括多条索引的情况下,每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块被配置的块号的最小值大于前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于后一次待保存数据所配置的存储块的块号的最小值;
所述每条索引中的代表值为所述同一个存储容器所容纳的存储块的最小块号。
本发明实施例中,将每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块被配置的块号的最小值大于前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于后一次待保存数据所配置的存储块的块号的最小值;并将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。使得算法简单,且易于实现所述每个存储容器仅需要一条索引就能够记录所述每个存储容器中的全部存储块。
优选的,当每次分配的所述m个存储块的块号配置为线性递增时,所述为所述m个存储块指定n个存储容器,以及根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,包括:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
需要注意的是,上述实施例提到的当前工作的存储容器、满存储容器、空闲的存储容器等技术术语的概念在图2A所述的实施例中已经做了详细描述,在此不再赘述。同时,本实施例详细说明了如何为所述m个存储块分配所述n个存储容器并记录所述存储块与存储容器的对应关系,算法简单且易于实现,当然在具体实现过程中,可能上述步骤a-步骤e可能会被拆分为更多个小步骤或者合并为几条步骤执行,也可能变换步骤之间的执行顺序,由于上述变换都是基于本实施例的基础上无需经过创造性劳动即可实现,因此都应归于本实施例的保护范围。
优选的,在所述存储块与存储容器的对应关系包括多条索引的情况下,还可以将每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块被配置的块号的最小值大于后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于前一次待保存数据所配置的存储块的块号的最小值;
所述每条索引中的代表值为所述同一个存储容器所容纳的存储块的最大块号。
本发明实施例中,将每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块被配置的块号的最小值大于后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于前一次待保存数据所配置的存储块的块号的最小值;并将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。使得算法简单,且易于实现所述每个存储容器仅需要一条索引就能够记录所述每个存储容器中的全部存储块。
优选的,当每次分配的所述m个存储块的块号配置为线性递减时,所述为所述m个存储块指定n个存储容器,以及根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,包括:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
本实施例详细说明了如何为所述m个存储块分配所述n个存储容器并记录所述存储块与存储容器的对应关系,算法简单且易于实现,当然在具体实现过程中,如之前的实施例所述,基于本实施例的变形都应归于本实施例的保护范围。
进一步的,当每次分配的所述m个存储块的块号配置为线性递增或线性递减时,所述方法还包括:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块(即还会被系统使用的存储块);
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
本实施例中,在接收到磁盘整理指令后,能够确定待扫描的存储容器(可以通过多种方式实现,对此不作为本方案实施例的限制),获取每个待整理的存储容器包含的非垃圾存储块,并以所述非垃圾存储块为粒度重新指定新的存储容器,同时更新所述存储块与存储容器的对应关系,具体是通过配置每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集来实现。使得在磁盘整理时,能够以存储块为粒度进行灵活整理,并且整理后在所述存储块与存储容器的对应关系中仍然保证每个新的存储容器仅需要一条索引就能记录所述每个新的存储容器中的全部非垃圾存储块,进而降低虚拟地址到物理地址的映射代价。
进一步的,当每次分配的所述m个存储块的块号配置为线性递增或线性递减时,所述方法还包括:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块(即已经不会被系统使用或已被空间回收的存储块)的存储容器;
扫描所述待整理的存储容器,获取逻辑相邻的待整理的存储容器中包含的非垃圾存储块,所述逻辑相邻表示所述存储块与存储容器的对应关系中每条索引的键的值大小相邻(所述键的值大小相邻在图2A所述的实施例中已经做了详细描述,不再赘述);
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
本实施例中,在接收到磁盘整理指令后,能够确定所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器为待整理的存储容器,并通过在所述逻辑相邻的待整理的存储容器中对非垃圾存储块指定新的存储容器,同时更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。使得在磁盘整理时,能够以包含垃圾存储块的存储容器为对象进行灵活整理,并且整理后在所述存储块与存储容器的对应关系中仍然保证每个新的存储容器仅需要一条索引就能记录所述每个新的存储容器中的全部非垃圾存储块,进而降低虚拟地址到物理地址的映射代价。
图4为根据本发明实施例创建的CK2C(Chunk to Container)存储块到存储容器映射表的结构示意图,该CK2C表可以用来记录存储块与存储容器的对应关系,即所述CK2C表为上述各个实施例中的所述存储块与存储容器的对应关系的一种优选的组织形式。为了方便描述,所述CK2C表记录的存储块的块号选择了线性递增、永不复用(唯一表示)的形式,(即每次为新存储块所分配的虚拟地址/CKID都与之前旧存储块的虚拟地址/CKID不同,且分配的CKID是一直线性增大的,当然也可以一直线性减小,这里未示出)。优选的,该CKID是64位的无符号整型数(int型),此时文件系统的全局寻址空间即为[0,2^64-1],需要注意的是,本发明实施例并不限制CKID的数量级,系统可以根据实际需要进行调整。根据具体应用场景,该CK2C表可以用线性表或者B+树来实现,具体采用何种方式则不作为对本发明实施例的限制。
如图4所示,该CK2C表中包含多条索引(该CK2C表中每一列即是一条索引,如<CKID1,CTID1>即为一条索引),其中,每条索引和每个存储容器一一对应,即所述CK2C表中索引的条数等于该CK2C表所记录的存储容器CT的个数(这里为了方便描述,仅示出了三个CT亦即三条索引,不作为对本发明的限制)。同时需要注意的是,与每条索引相对应的存储容器所包含的CKID的数值范围不会重合。例如,图中CT1所包含的CKID范围是1-4,CT2所包含的CKID范围是5-8......,以此类推,每个CT所包含的CKID的范围不会出现重合或交集。在具体实现过程中,可以通过多种方式实现所述每个CT所包含的CKID的数值范围不会出现重合或交集,仅作为示例而非限制,文件系统中任一时刻,都最多仅有一个处于工作状态的容器(即当前工作的存储容器),当有新的存储块写入时(本发明实施例不限制所述新存储块的数量),则将所述新存储块写入当前工作的存储容器中,如果所述当前工作的存储容器已满或者所述当前工作的存储容器剩余的可用空间不够,则可以创建一个新的存储容器(空闲容器)作为新的工作容器来存储所述新的存储块。同时,需要注意的是,之前已用的存储容器,即使内部仍有可用空间也不能复用(即不会调用之前的存储容器作为新的工作容器来存储新的存储块),除非之前已用的存储容器经空间回收或碎片整理后变成了空白容器(即容器内部已无存储块),在此情形下则可以调用之前已用的存储容器作为新的工作容器。因此,再加上CKID具有线性增大/减小、永不复用的特性,就保证了每个CT所包含的CKID的范围不会出现重合或交集。当然,还可以通过为不同的CT分配不同的CKID区段来实现每个CT所包含的CKID的范围不出现重合或交集,不作为对本方案实施例的限制。
可选的,当CKID为线性增大时,所述CK2C表采用key-value键值对的形式进行记录,该CK2C表中记录的每条索引的Key(键)统一配置为每条索引对应的存储容器CT中最小的CKID(如图4所示),每条索引的Value(值)为每条索引对应的存储容器的CTID,同时每个CTID都唯一确定有一个物理地址。仅作为示例而非限制,CTID可以通过计算偏移量直接对应到物理地址(例如假设CT的大小为8M,则CTID*8M=PA),也可以通过映射方式映射到物理地址。因此,知道了某个数据的虚拟地址(CKID),就能通过查询所述CK2C表从而唯一确定该数据的物理地址。仅作为示例,具体查询方式可以为:当该CK2C表中记录的每条索引的Key(主键)统一配置为每条索引对应的存储容器CT中最小的CKID,且文件系统的CKID为线性增大、永不复用时,以图4为例,假设需要查询物理地址的数据的虚拟地址CKID为CKID7,则首先查询CK2C表中有无值为CKID7的key,若有则结束查找;若无,则继续通过CK2C表确定该CK2C表中所有比CKID7小的key(图4中即CKID1、CKID5),再从所有比CKID7小的key中确定出数值最接近CKID7的key,如图4中即CKID5,那么CKID7必然落入以CKID5为key的存储容器中(CTID2),最后通过查询CTID2内的元数据加上CTID2对应的物理地址PA2,就可以唯一确定CKID7的物理地址。
本方案实施例中提供了一种CK2C表用来记录存储块与存储容器的对应关系,由存储容器中最小的或最大的CKID作为存储容器对应的CK2C表索引的key,同时由CKID作为数据的虚拟地址,且每个存储容器中所包含的CKID的范围不交叠、无交集,使得每个CT只对应一条CK2C表索引,通过一条索引就能确定一个存储容器CT中所有的存储块的物理地址,且该CK2C表体积小,降低了虚拟地址到物理地址的映射代价。
图5为依据本发明一实施例的存储数据的管理方法的示范性流程图,该方法使用图4所示的CK2C表管理、记录数据的空间位置信息,仅作为示例而非限制,该方法中CKID配置为线性增长,永不复用,且该方法所使用的所述CK2C表中记录的每条索引的Key(键)统一配置为每条索引对应的存储容器CT中最小的CKID。需要注意的是,虽然下文描述的该方法的流程包括以特定顺序出现的多个操作,但是应该清楚了解,这些操作也可以包括更多的操作或合并于更少的操作中,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。如图5所示,该方法包括以下步骤:
步骤S510,接收待保存的新存储块,所述待保存的新存储块在具体实现过程中,可以是一个单一的存储块,也可以是图3实施例中的步骤S310所生成的m个存储块按照从小块号到大块号的顺序逐个传送而来的。以下以图3实施例中的所述m个存储块为例进行描述,对此,不作为对本发明实施例的限制。
步骤S511,获取当前工作的存储容器(所述当前工作的存储容器在图2A及图4的实施例中均作了描述,不再赘述);
步骤S512,判断当前工作的存储容器(工作CT)的可用空间是否大于或等于所述待保存的新存储块的数据大小(Ck Size),即工作CT能否容纳下所述待保存的新存储块。
步骤S513,若所述当前工作的存储容器的可用空间大于或等于所述待保存的新存储块的数据大小(Ck Size),则从当前工作的存储容器的可用空间中减去/拿出大小为CKSize的空间分配给所述待保存的新存储块。当然,仅作为示例性的补充说明,在具体实现中,当前工作的存储容器在接收所述待保存的新存储块后,该当前工作的存储容器内的元数据需要记录所述待保存的新存储块的大小,校验码,在CT中的位置等一系列属性信息。
步骤S514,若所述当前工作的存储容器的可用空间小于所述待保存的新存储块的数据大小(Ck Size),则更换当前工作的存储容器以满足所述待保存的新存储块对空间大小的需求,具体实现中,可以创建一个新的存储容器(即不包含存储块的空闲容器)作为更新的工作CT来容纳所述待保存的新存储块;或选择之前已经使用过的,并经空间回收后变为空白容器的旧容器作为更新的工作CT来容纳所述待保存的新存储块。
步骤S515,从所述更新的工作CT的可用空间中减去/拿出大小为CK Size的空间分配给所述待保存的新存储块。其他操作与步骤S513类似,在此不再赘述。
步骤S516,由于所述更新的工作CT在所述CK2C表中没有记录,所以需要在所述CK2C表中新增/插入一条新索引,用于记录该更新的工作CT,该新索引的键key为所述待保存的新存储块的块号CKIDnew,值value为所述更新的工作CT的容器号CTID。在具体实现中,在插入该新索引时,作为优选的,可以按照CK2C表中索引的键值(CKID)的大小顺序来按序插入新索引。
步骤S517,最后对所述待保存的新存储块返回虚拟地址,即所述待保存的新存储块的块号CKIDnew。因此,图3实施例中的所述m个存储块的块号就是所述待保存的数据的虚拟地址。
需要注意的是,为了使方案更加完善,作为优选的,在步骤S513之后,可以加上如下操作:判断当前工作的存储容器(工作CT)是否已经包含有存储块,如果已经包含有存储块,则说明CK2C表里已经存有该当前工作的存储容器的索引,那么直接执行步骤S517;如果发现该当前工作的存储容器为空闲容器(此种情况比较特殊,一般不会出现系统正在工作的存储容器为空闲容器,但是也不能排除其出现的可能性,比如系统初始工作的时候,新建了一个空闲容器为工作CT,然后出现了申请VA的请求),即没有包含存储块,则说明CK2C表里没有该当前工作的存储容器的索引,那么需要先在CK2C表里插入一条记录所述当前工作的存储容器的索引,该索引的key为所述待保存的新存储块的块号CKIDnew,value为所述当前工作的存储容器的CTID。
图6A为依据本发明实施例的磁盘整理方法的实施方式之一的示范性流程图。该方法使用图4所示的CK2C表管理、记录数据的空间位置信息,仅作为示例而非限制,该方法中CKID配置为线性增长,永不复用(当然也可以将CKID配置为线性减小,永不复用,这里仅是用来示例选择了CKID线性增大),且该方法所使用的所述CK2C表中记录的每条索引的Key(键)统一配置为每条索引对应的存储容器CT中最小的CKID。需要注意的是,虽然下文描述的该方法的流程包括以特定顺序出现的多个操作,但是应该清楚了解,这些操作也可以包括更多的操作或合并于更少的操作中,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。如图6A所示,该方法包括以下步骤:
步骤S611,接收磁盘整理请求;在具体实现中,可以定时发起磁盘整理请求也可以经过空间回收后,已经知道CT中哪些CK是垃圾(不会再被系统使用),这样,碎片整理时不需要扫描整个文件系统,直接在存储块这一层直接进行,逻辑简单。对此,不作为对本发明实施例的限制。
步骤S612,根据所述CK2C表获取一批待整理的CT,所述待整理的CT为所述CK2C表上所指示的全部存储容器中包含垃圾存储块的存储容器;多组虚拟地址连续的存储容器进一步,确定至少两组虚拟地址连续的待整理的存储容器,其中,每组虚拟地址连续的待整理的存储容器包含k个待整理的存储容器,所述k个待整理的存储容器在所述存储块与存储容器的对应关系中为k条逻辑连续的索引。所述k条索引之间没有其他的存储容器的索引作为间隔。例如,下图6B中的CT1、CT2、CT3、CT4即是一组虚拟地址连续的存储容器,CK1、CK6、CK10和CK16为4条连续的索引,而CT1、CT3、CT4就不是一组虚拟地址连续的存储容器,CK1、CK10和CK16不是连续的索引,因为中间间隔CK6。需要确定至少两组虚拟地址连续的待整理的存储容器的原因是因为可能存在不包含垃圾存储块的存储容器,这种存储容器不会被视为待整理的存储容器,会出现待整理的存储容器的虚拟地址存在间隔的情况,对于这种情况,需要分组进行处理,以保证磁盘整理后获得的新的存储容器中所容纳的存储块与其它的存储容器所容纳的存储块在范围上不存在交集。具体的扫描和分组方式可以按照大小顺序,以下以图6B中的CT1、CT2、CT3、CT4为例加以说明。步骤S613,按照所述4个待整理的CT(CT1、CT2、CT3、CT4)的键值从小到大的顺序逐个扫描单个CT中的非垃圾CK,即按照CT1→CT2→CT3→CT4的顺序逐一扫描。
步骤S614,判断扫描到的非垃圾CK是否组成一个满存储容器(即已经没有多余的空间来存放下一个非垃圾CK)或是否所有的待整理CT(CT1、CT2、CT3、CT4)已经扫描完毕?如果是,则执行步骤S615;如果否,则返回执行步骤S613。如图6B中当扫描到CK8时,发现CK1-CK8已经构成一个满的存储容器,则执行下一步S615。
步骤S615,在扫描到的非垃圾CK组成一个满存储容器或所有的待整理CT(CT1、CT2、CT3、CT4)已经扫描完毕时,则申请一个新CT(空闲容器),例如图6B中新建的存储容器CT5.
步骤S616,将扫描到的非垃圾CK迁移到所述新CT中。如图6B中,将CK1-CK8迁移进新CT5中。
步骤S617,在所述CK2C表里插入/新增一条索引用于记录所述新CT中的存储块与所述新CT的对应关系。如图6B中,在CK2C表中插入一条索引<CKID1,CTID5>。步骤S618,判断是否扫描完成,若扫描完成执行步骤S619;若没有扫描完成,则返回执行步骤S613。
步骤S619,当所有待整理的存储容器扫描完毕时,结束磁盘整理操作。如图6B中CT4已经全部扫描完毕。
图6B为依据本发明一实施例的磁盘整理方法的原理图。该方法使用图4所示的CK2C表管理、记录数据的空间位置信息,仅作为示例而非限制,该方法中CKID配置为线性增长,永不复用(当然也可以将CKID配置为线性减小,永不复用,这里仅是用来示例选择了CKID线性增大),且该方法所使用的所述CK2C表中记录的每条索引的Key(键)统一配置为每条索引对应的存储容器CT中最小的CKID。图6B使用了图6A中的磁盘整理方法,最终将原容器CT1、CT2、CT3、CT4四个待整理的存储容器中的非垃圾CK迁移进了新存储容器CT5和新存储容器CT6中,且用于记录存储块与存储容器的对应关系的所述CK2C表在磁盘整理后仅有两条索引,分别对应上述新存储容器CT5和新存储容器CT6,可见所述CK2C表包含的索引的条数于存储容器的数量能够动态地保持一致,不会随着系统运行时间的推移而增长,最终降低了虚拟地址到物理地址的映射代价。
图7为依据本发明一实施例的存储管理器700的逻辑结构示意图。该存储管理器700可以但不限于作为图2A中的存储管理器210也可以作为图2B中的存储管理器A,同时也可以但不限于执行图3、图5及图6A所述的方法。如图7所示,该存储管理器700包括存储块管理模块710、存储容器管理模块720及记录模块730。存储块管理模块710,用于在每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;
存储容器管理模块720,用于为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间,n为大于等于1的自然数;
记录模块730,用于根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;以及,所述记录模块730还用于记录所述m个存储块的块号到所述本次待保存的数据的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址。
可选的,为了方便记录和管理,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
可选的,当所述每个存储容器配置有唯一的标识时,所述记录模块730中记录的所述存储块与存储容器的对应关系中包括多条索引,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,所述每条索引的键为同一个存储容器所容纳的存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
可选的,所述存储块管理模块710每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块的块号的最小值大于为前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块的块号的最大值小于为后一次待保存数据所配置的存储块的块号的最小值;
所述记录模块730具体用于,将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。
优选的,所述存储容器管理模块720具体用于执行下述操作:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器,以及确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,则通知所述记录模块730在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
b、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;再次通知所述记录模块730在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
c、当所述更新的工作的存储容器为满存储容器时,再次执行步骤b,直至将所述m个存储块指定在所述n个存储容器中;
所述记录模块730具体用于,在接到所述存储容器管理模块720发来的增加一条索引的通知时,在所述存储块与存储容器的对应关系中执行增加索引的操作。
优选的,所述存储块管理模块710每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块的块号的最小值大于为后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块的块号的最大值小于为前一次待保存数据所配置的存储块的块号的最小值;
所述记录模块730具体用于,将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。
优选的,所述存储容器管理模块720具体用于执行下述操作:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器,以及确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,则通知所述记录模块730在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
b、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;再次通知所述记录模块730在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
c、当所述更新的工作的存储容器为满存储容器时,再次执行步骤b,直至将所述m个存储块指定在所述n个存储容器中;
所述记录模块730具体用于,在接到所述存储容器管理模块720发来的增加一条索引的通知时,在所述存储块与存储容器的对应关系中执行增加索引的操作。
可选的,所述存储管理器700还包括磁盘整理模块(未示出),所述磁盘整理模块用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并通知所述记录模块更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
可选的,所述存储管理器700还包括磁盘整理模块(未示出),所述磁盘整理模块用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
扫描所述待整理的存储容器,获取逻辑相邻的待整理的存储容器中包含的非垃圾存储块,所述逻辑相邻表示所述存储块与存储容器的对应关系中每条索引的键的值大小相邻;
为所述非垃圾存储块重新指定新的存储容器,并通知所述记录模块更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
如图8,为本发明实施例的计算机800的逻辑结构示意图。本发明实施例的计算机800可包括:
处理器801、存储器802、系统总线803和通信接口804。CPU801、存储器802和通信接口804之间通过系统总线803连接并完成相互间的通信。
处理器801可能为单核或多核中央处理单元,或者为特定集成电路,或者为被配置成实施本发明实施例的一个或多个集成电路。
存储器802可以为高速RAM存储器,也可以为非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
存储器802用于保存计算机执行指令(未示出)。具体的,计算机执行指令中可以包括程序代码805。
当计算机运行时,处理器801运行计算机执行指令,可以执行图3、图5、或图6任意之一所述的方法流程。
本领域普通技术人员将会理解,本发明的各个方面、或各个方面的可能实现方式可以被具体实施为系统、方法或者计算机程序产品。因此,本发明的各方面、或各个方面的可能实现方式可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件等等),或者组合软件和硬件方面的实施例的形式,在这里都统称为“电路”、“模块”或者“系统”。此外,本发明的各方面、或各个方面的可能实现方式可以采用计算机程序产品的形式,计算机程序产品是指存储在计算机可读介质中的计算机可读程序代码。
计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包含但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或者装置,或者前述的任意适当组合,如随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者快闪存储器)、光纤、便携式只读存储器(CD-ROM)。
计算机中的处理器读取存储在计算机可读介质中的计算机可读程序代码,使得处理器能够执行在流程图中每个步骤、或各步骤的组合中规定的功能动作;生成实施在框图的每一块、或各块的组合中规定的功能动作的装置。
计算机可读程序代码可以完全在用户的计算机上执行、部分在用户的计算机上执行、作为单独的软件包、部分在用户的计算机上并且部分在远程计算机上,或者完全在远程计算机或者服务器上执行。也应该注意,在某些替代实施方案中,在流程图中各步骤、或框图中各块所注明的功能可能不按图中注明的顺序发生。例如,依赖于所涉及的功能,接连示出的两个步骤、或两个块实际上可能被大致同时执行,或者这些块有时候可能被以相反顺序执行。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
处于说明的目的,前面的描述是参考具体实施例而进行的。但是,上述说明性论述并不打算穷举或将本发明局限于所公开的精确形式。根据上述教导,众多修改和变化都是可行的。选择并描述这些实施例是为了最佳地说明本发明的原理及其实际应用,从而使本领域技术人员最佳地利用本发明。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (28)
1.一种存储数据的管理方法,其特征在于,所述方法包括:
每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;
为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间,n为大于等于1的自然数;
根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;
记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址;
其中,所述为所述m个存储块指定n个存储容器,以及根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,包括:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中;
或者,
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
2.根据权利要求1所述的方法,其特征在于,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
3.根据权利要求2所述的方法,其特征在于,所述存储块与存储容器的对应关系包括多条索引,其中,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,所述每条索引的键为同一个存储容器所容纳的全部存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
4.根据权利要求3所述的方法,其特征在于,每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块被配置的块号的最小值大于前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于后一次待保存数据所配置的存储块的块号的最小值;
所述每条索引中的代表值为所述同一个存储容器所容纳的存储块的最小块号。
5.根据权利要求3所述的方法,其特征在于,每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块被配置的块号的最小值大于后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块被配置的块号的最大值小于前一次待保存数据所配置的存储块的块号的最小值;
所述每条索引中的代表值为同一个存储容器所容纳的存储块的最大块号。
6.根据权利要求1-5任一项所述的方法,其特征在于,还包括:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
7.根据权利要求1-5任一项所述的方法,其特征在于,还包括:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
确定至少两组虚拟地址连续的待整理的存储容器,其中,每组虚拟地址连续的待整理的存储容器包含k个待整理的存储容器,所述k个待整理的存储容器在所述存储块与存储容器的对应关系中为k条逻辑连续的索引,k为大于等于2的自然数;
分别为每组待整理的存储容器中包含的非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
8.根据权利要求1-5任一项所述的方法,其特征在于,所述方法还包括:
接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,查询所述待读取的数据所在的文件的文件元数据,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数;
根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数;
读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息,每个存储容器的元数据用于描述所述每个容器中所有存储块的信息。
9.根据权利要求6所述的方法,其特征在于,所述方法还包括:
接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,查询所述待读取的数据所在的文件的文件元数据,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数;
根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数;
读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息,每个存储容器的元数据用于描述所述每个容器中所有存储块的信息。
10.根据权利要求7所述的方法,其特征在于,所述方法还包括:
接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,查询所述待读取的数据所在的文件的文件元数据,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数;
根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数;
读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息,每个存储容器的元数据用于描述所述每个容器中所有存储块的信息。
11.一种存储管理器,其特征在于,应用于存储系统中,所述存储系统包括存储设备以及存储管理器,所述存储设备包含用于提供物理地址空间的存储介质,所述存储管理器用于接收由应用触发的数据保存请求,将所述待保存的数据转发到所述存储设备进行保存;所述存储管理器包括:
存储块管理模块,用于在每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;
存储容器管理模块,用于为所述m个存储块指定n个存储容器,其中,每个存储容器表示存储设备上的一段物理存储空间,n为大于等于1的自然数;
记录模块,用于根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;以及,
所述记录模块还用于记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址;
其中,所述存储容器管理模块具体用于执行下述操作:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器,以及确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,则通知所述记录模块在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
b、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;再次通知所述记录模块在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
c、当所述更新的工作的存储容器为满存储容器时,再次执行步骤b,直至将所述m个存储块指定在所述n个存储容器中;
所述记录模块具体用于,在接到所述存储容器管理模块发来的增加一条索引的通知时,在所述存储块与存储容器的对应关系中执行增加索引的操作;
或者,
其中,所述存储容器管理模块具体用于执行下述操作:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器,以及确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,则通知所述记录模块在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
b、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;再次通知所述记录模块在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
c、当所述更新的工作的存储容器为满存储容器时,再次执行步骤b,直至将所述m个存储块指定在所述n个存储容器中;
所述记录模块具体用于,在接到所述存储容器管理模块发来的增加一条索引的通知时,在所述存储块与存储容器的对应关系中执行增加索引的操作。
12.根据权利要求11所述的存储管理器,其特征在于,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
13.根据权利要求12所述的存储管理器,其特征在于,
所述记录模块中记录的所述存储块与存储容器的对应关系中包括多条索引,每条索引用于表示被指定到同一个存储容器的全部存储块的指向,所述每条索引的键为同一个存储容器所容纳的存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
14.根据权利要求13所述的存储管理器,其特征在于,所述存储块管理模块每次分配的所述m个存储块的块号配置为线性递增,且所述m个存储块的块号的最小值大于为前一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块的块号的最大值小于为后一次待保存数据所配置的存储块的块号的最小值;
所述记录模块具体用于,将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。
15.根据权利要求13所述的存储管理器,其特征在于,所述存储块管理模块每次分配的所述m个存储块的块号配置为线性递减,且所述m个存储块的块号的最小值大于为后一次待保存数据所配置的存储块的块号的最大值或者所述m个存储块的块号的最大值小于为前一次待保存数据所配置的存储块的块号的最小值;
所述记录模块具体用于,将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。
16.根据权利要求11-15任一项所述的存储管理器,其特征在于,所述存储管理器还包括磁盘整理模块,所述磁盘整理模块用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并通知所述记录模块更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
17.根据权利要求11-15任一项所述的存储管理器,其特征在于,所述存储管理器还包括磁盘整理模块,所述磁盘整理模块用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
确定至少两组虚拟地址连续的待整理的存储容器,其中,每组虚拟地址连续的待整理的存储容器包含k个待整理的存储容器,所述k个待整理的存储容器在所述存储块与存储容器的对应关系中为k条逻辑连续的索引,k为大于等于2的自然数;
分别为每组待整理的存储容器中包含的非垃圾存储块重新指定新的存储容器,并通知所述记录模块更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
18.一种存储系统,其特征在于,所述存储系统包括存储设备以及存储管理器;
所述存储设备包含存储介质,用于提供物理地址空间来保存数据;
所述存储管理器,用于在每次接收到数据保存请求之后,为本次待保存的数据分配m个存储块,其中,每个存储块用于表示一段虚拟地址空间,所述每个存储块配置有唯一的块号,m为大于等于1的自然数;为所述m个存储块指定n个存储容器,其中,每个存储容器表示所述存储设备上的一段物理存储空间,n为大于等于1的自然数;
根据所述m个存储块与所述n个存储容器的对应关系更新存储块与存储容器的对应关系,所述存储块与存储容器的对应关系用于记录已经分配的存储块与容纳所述已经分配的存储块的存储容器的对应关系;以及
记录所述m个存储块的块号到所述本次待保存的数据所在的文件的元数据中,所述m个存储块的块号用于作为所述本次待保存的数据的虚拟地址;
其中,所述存储管理器具体用于执行下述操作:
a、获取当前工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最小块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最小块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从小块号至大块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最小块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中;
或者,
所述存储管理器为所述m个存储块指定n个存储容器,以及记录存储块与存储容器的对应关系,具体用于执行下述操作:
a、获取当前工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块指定到所述当前工作的存储容器;
b、确定所述当前工作的存储容器在容纳所述m个存储块中的最大块号的存储块之前是否为空闲存储容器,若所述当前工作的存储容器为空闲存储容器,在所述存储块与存储容器的对应关系中增加一条索引,所述增加的索引的键为所述m个存储块中的最大块号,所述增加的索引的值为所述当前工作的存储容器的标识;
c、当所述当前工作的存储容器为满存储容器时,获得更新的工作的存储容器,按照从大块号至小块号的顺序逐个将所述m个存储块中剩余的存储块指定到所述更新的工作的存储容器中,所述更新的工作的存储容器为空闲的存储容器;
d、在所述存储块与存储容器的对应关系中再次增加一条的索引,所述再次增加的索引的键为所述m个存储块中剩余的存储块的最大块号,所述再次增加的索引的值为所述更新的工作的存储容器的标识;
e、当所述更新的工作的存储容器为满存储容器时,返回执行步骤c,直至将所述m个存储块指定在所述n个存储容器中。
19.根据权利要求18所述的存储系统,其特征在于,所述每个存储容器配置有唯一的标识,所述每个存储容器的标识用于指示到所述每个存储容器所对应的物理地址。
20.根据权利要求19所述的存储系统,其特征在于,所述存储管理器用于记录存储块与存储容器的对应关系具体包括:
所述存储管理器记录的所述存储块与存储容器的对应关系中包括多条索引,每条索引表示被指定到同一个存储容器的全部存储块的指向,其中,每条索引的键为同一个存储容器所容纳的存储块的块号的代表值,所述每条索引的值为所述同一个存储容器的标识。
21.根据权利要求20所述的存储系统,其特征在于,所述存储管理器具体用于,将每次分配的所述m个存储块的块号配置为线性递增,且配置所述m个存储块的块号的最小值大于为前一次待保存数据所配置的存储块的块号的最大值或者配置所述m个存储块的块号的最大值小于为后一次待保存数据所配置的存储块的块号的最小值;
所述存储管理器具体用于将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最小块号。
22.根据权利要求20所述的存储系统,其特征在于,所述存储管理器具体用于,将每次分配的所述m个存储块的块号配置为线性递减,且配置所述m个存储块的块号的最小值大于为后一次待保存数据所配置的存储块的块号的最大值或者配置所述m个存储块的块号的最大值小于为前一次待保存数据所配置的存储块的块号的最小值;
所述存储管理器具体用于将所述每条索引中的所述代表值记录为所述同一个存储容器所容纳的存储块的最大块号。
23.根据权利要求19-22任一项所述的存储系统,其特征在于,所述存储管理器还用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的存储容器;
扫描所述待整理的存储容器,获取每个待整理的存储容器包含的非垃圾存储块;
为所述非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
24.根据权利要求18-22任一项所述的存储系统,其特征在于,所述存储管理器还用于:
接收磁盘整理指令,确定待整理的存储容器,所述待整理的存储容器为所述存储块与存储容器的对应关系所指示的全部存储容器中包含垃圾存储块的存储容器;
确定至少两组虚拟地址连续的待整理的存储容器,其中,每组虚拟地址连续的待整理的存储容器包含k个待整理的存储容器,所述k个待整理的存储容器在所述存储块与存储容器的对应关系中为k条逻辑连续的索引,k为大于等于2的自然数;
分别为每组待整理的存储容器中包含的非垃圾存储块重新指定新的存储容器,并更新所述存储块与存储容器的对应关系,其中,每个新的存储容器所容纳的所述非垃圾存储块的块号为线性递增或者线性递减,且所述每个新的存储容器所容纳的存储块的块号的范围与其它新的存储容器所容纳的存储块的块号的范围不存在交集。
25.根据权利要求19-22任一项所述的存储系统,其特征在于,所述存储管理器还用于:
在接收到数据读取请求之后,根据所述数据读取请求中携带的待读取的数据的信息,查询所述待读取的数据所在的文件的文件元数据,获取所述待读取的数据的虚拟地址,其中,所述待读取的数据的虚拟地址包括p个存储块的块号,p为大于等于1的自然数,根据所述p个存储块的块号查询所述存储块与存储容器的对应关系,确定容纳所述p个存储块的q个存储容器,q为大于等于1的自然数,以及读取所述q个存储容器的元数据,确定所述p个存储块的物理地址信息,每个存储容器的元数据用于描述所述每个容器中所有存储块的信息。
26.一种存储管理器,其特征在于,包括用于与存储设备交互的接口、处理器、存储器,所述处理器通过总线与所述处理器连接,所述处理器通过所述接口与所述存储设备交互信息;
所述存储器用于存储计算机执行指令,当所述存储管理器运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述存储管理器执行如权利要求1-10中任一所述的存储数据的管理方法。
27.一种计算机,其特征在于,包括:处理器、存储器、总线和通信接口;
所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述计算机运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述计算机执行如权利要求1-10中任一所述的存储数据的管理方法。
28.一种计算机可读介质,其特征在于,包括计算机执行指令,以供计算机的处理器执行所述计算机执行指令时,所述计算机执行如权利要求1-10中任一所述的存储数据的管理方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2014/096073 WO2016106757A1 (zh) | 2014-12-31 | 2014-12-31 | 一种存储数据的管理方法、存储管理器及存储系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106462491A CN106462491A (zh) | 2017-02-22 |
CN106462491B true CN106462491B (zh) | 2020-08-14 |
Family
ID=56284026
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201480016987.4A Active CN106462491B (zh) | 2014-12-31 | 2014-12-31 | 一种存储数据的管理方法、存储管理器及存储系统 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106462491B (zh) |
WO (1) | WO2016106757A1 (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110019031B (zh) * | 2017-08-31 | 2022-05-13 | 华为技术有限公司 | 一种文件创建方法及文件管理装置 |
CN109254733B (zh) * | 2018-09-04 | 2021-10-01 | 北京百度网讯科技有限公司 | 用于存储数据的方法、装置和系统 |
CN109656886B (zh) * | 2018-12-26 | 2021-11-09 | 百度在线网络技术(北京)有限公司 | 基于键值对的文件系统实现方法、装置、设备和存储介质 |
EP4155946A4 (en) * | 2020-05-18 | 2024-01-10 | Cambricon Xian Semiconductor Co Ltd | METHOD AND DEVICE FOR ALLOCATING STORAGE ADDRESS FOR STORED DATA |
CN113282582B (zh) * | 2021-05-21 | 2023-06-20 | 海南超船电子商务有限公司 | 一种船位数据的高效存储方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101676882A (zh) * | 2008-09-16 | 2010-03-24 | 美光科技公司 | 存储器装置的内嵌映射信息 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6823442B1 (en) * | 2003-05-12 | 2004-11-23 | 3Pardata, Inc. | Method of managing virtual volumes in a utility storage server system |
US20070041050A1 (en) * | 2005-08-17 | 2007-02-22 | Bing-Yu Wang | Memory management method and system |
EP2416251B1 (en) * | 2010-08-06 | 2013-01-02 | Alcatel Lucent | A method of managing computer memory, corresponding computer program product, and data storage device therefor |
CN103853665B (zh) * | 2012-12-03 | 2017-06-06 | 华为技术有限公司 | 存储空间分配方法及设备 |
US9645920B2 (en) * | 2013-06-25 | 2017-05-09 | Marvell World Trade Ltd. | Adaptive cache memory controller |
-
2014
- 2014-12-31 WO PCT/CN2014/096073 patent/WO2016106757A1/zh active Application Filing
- 2014-12-31 CN CN201480016987.4A patent/CN106462491B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101676882A (zh) * | 2008-09-16 | 2010-03-24 | 美光科技公司 | 存储器装置的内嵌映射信息 |
Also Published As
Publication number | Publication date |
---|---|
WO2016106757A1 (zh) | 2016-07-07 |
CN106462491A (zh) | 2017-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106462491B (zh) | 一种存储数据的管理方法、存储管理器及存储系统 | |
US10417186B2 (en) | File migration method and apparatus, and storage device | |
JP6344675B2 (ja) | ファイル管理方法、分散記憶システムおよび管理ノード | |
KR100843135B1 (ko) | 비휘발성 메모리 관리 방법 및 장치 | |
CN107209714B (zh) | 分布式存储系统及分布式存储系统的控制方法 | |
TWI533152B (zh) | 資料儲存裝置及方法 | |
CN111344683A (zh) | 非易失性存储器装置中的命名空间分配 | |
CN107066498B (zh) | 键值kv存储方法和装置 | |
CN107239526B (zh) | 文件系统实现方法、碎片整理方法、操作位置定位方法 | |
CN111414315A (zh) | 用来管理一记忆装置的方法以及其相关的记忆装置 | |
KR20170009706A (ko) | 중복 데이터를 감소시키기 위한 저장 장치 및 그것의 동작 방법 | |
EP3312714A1 (en) | Distributed data parallel method for reclaiming space | |
US10922276B2 (en) | Online file system check | |
CN108475230B (zh) | 一种存储系统和系统垃圾回收方法 | |
KR101730151B1 (ko) | 플래시 메모리 장치에 데이터를 기록하는 방법, 플래시 메모리 장치, 및 저장 시스템 | |
CN110147203B (zh) | 一种文件管理方法、装置、电子设备及存储介质 | |
KR20150071500A (ko) | 데이터 관리 방법 및 장치 | |
KR101579941B1 (ko) | 가상머신 i/o 관리 방법 및 장치 | |
CN112650577A (zh) | 内存管理方法和装置 | |
CN108628762B (zh) | 一种固态存储设备及其处理io命令的方法 | |
CN116340198B (zh) | 固态硬盘的数据写入方法、其装置及固态硬盘 | |
JP6050794B2 (ja) | フラッシュメモリモジュール、不揮発性半導体メモリモジュール及びストレージ装置 | |
JP2020123039A (ja) | メモリシステムおよび制御方法 | |
US11226738B2 (en) | Electronic device and data compression method thereof | |
KR101735065B1 (ko) | 비트맵 기반의 트림 코맨드를 이용하는 데이터 관리 시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |