一种用于虚拟机的虚拟存储映像版本管理方法和系统与流程

文档序号:16075137发布日期:2018-11-27 20:58阅读:167来源:国知局

本发明涉及云计算领域,特别是涉及一种用于虚拟机的虚拟存储映像版本管理方法和系统。



背景技术:

云计算作为服务共享的计算模式,在系统部署、管理维护和安全性等方面,具有传统计算模式无法比拟的优势。云计算虚拟存储系统具有巨大的存储能力,能够存储并处理不断增长的海量的用户数据(包括操作系统及应用程序)。然而,管理海量数据是一项艰巨的工作,其中建立、使用及维护存储子系统开销巨大并且任务复杂,为云计算建立低开销和低复杂性的自管理存储系统是非常重要的问题。

云计算中用户的所有数据都以虚拟存储映像(VSI)的形式存储在服务器上,如图1,因此VSI历史版本的创建、维护和恢复是一个重要而复杂的管理问题。这个问题随着客户端规模越来越大将显得越来越突出。目前,云计算系统使用常规的备份方法实现对VSI管理。虽然备份是用于解决上述需求的一种有效且重要的机制,然而,传统的备份系统所提供的功能非常有限,并带来很高的访问量和恢复开销,费时费力且价格昂贵。目前云计算服务器使用以天为单位的粗粒度的备份周期,存在巨大的管理开销。

自动的版本控制可以作为解决上述问题的方法。版本控制方法支持在线的数据存储和备份,具有以下三点好处:

(1)从用户误操作中恢复

版本控制允许频繁的存储快照,这些快照相对于传统备份系统能够极大程度的降低数据量。用户通过回滚至先前保存过的版本将意外删除和更改的数据恢复原状。

(2)从系统崩溃中恢复

对于系统产生的恶意事件,管理员能够快速的定位遭到破坏的数据并恢复至先前的一致性系统状态。

(3)历史数据分析

在某些场景下,人们需要了解某个数据段是如何达到一个特定状态的,版本控制是进行历史数据分析的有效工具。

虽然存储的版本控制方面的研究很早就被提出,但大多数的研究在文件系统层。云计算要求对上层操作系统和文件系统透明,需要在块级实现VSI的版本管理,上述方法不能直接适用于云计算系统。基于块级的版本控制存在以下挑战:

(1)内存开销大

版本控制发生在接近物理磁盘的系统底层,对于上层的数据内容以及相关信息是不可知的。块级的版本控制仅仅能够获得块级信息,却不具备这些块所对应的程序和数据的语义信息和访问模式,维护相关的块级元数据信息需要占用大量的内存空间,因此支持块级的版本控制将会加大内存开销。

(2)版本管理开销大

创建VSI新版本时,需要为每个块维护新的版本信息。版本管理对象的数量大,操作复杂,因而存在很大的管理开销。



技术实现要素:

本发明要解决的技术问题是减少内存开销。

根据本发明一方面,提出一种用于虚拟机的虚拟存储映像版本管理方法,包括:

保存元数据以及区间块数据,其中,元数据包括逻辑块区间表(LCT)、VSI版本表(VVL)和设备超级块表(DSB),其中,所述LCT保存VSI的逻辑区间块号与物理块号的映射关系,所述VVL保存版本信息,包括VSI版本号、与之关联的时间顺序上的下一个VSI版本号、版本ID,所述DSB记录VSI属性信息,包括当前版本计数器;区间块数据是多个连续的数据块,所述数据块包括主数据和备份数据,所述主数据为VSI最新版本数据,所述备份数据为VSI历史版本数据;

接收对虚拟磁盘的操作请求,在所述操作请求中携带VSI版本号以及操作类型,确定所述VSI版本号的物理块号,并进行数据操作。

进一步,所述操作类型包括创建版本、删除版本、显示版本、版本读操作、或版本写操作。

进一步,所述操作类型为版本写操作,如果写到没有被分配的块,则使用分配指针从主数据的起点开始扫描到终点结束,扫描到空闲区间块则停止扫描,分配空闲区间块并保存分配指针,当扫描至物理磁盘的末端时,倒置分配指针的方向,从反方向开始执行扫描操作并分配空闲区间块,获取该可用的物理区间块,更新LCT中的映射关系,并将写操作转发至物理磁盘。

进一步,所述操作类型为版本写操作,如果写到已存在的块,且该块在最后一次快照后已被更改,则待写区间块的版本号与当前版本号一致,将请求的区间块地址转换为物理磁盘的物理区间块地址,并对该区间块进行写操作。

进一步,所述操作类型为版本写操作,如果写到已存在的块,且该块在最后一次快照后没有被更改,即待写块的版本号比当前的版本号低,则在新位置创建该区间块的新版本,分配新的LCT条目并且将新老LCT的条目进行交换。

进一步,在每一个LCT条目中加入子位图,区间块内的每一个数据块对应于子位图中的一位,当写操作发生时对子位图内的有效数据块进行标记;当读写操作发生时,检查区间块对应的子位图的有效位是否被标记,如果被标记则代表该位所指向的数据块包含有效数据,反之是无效数据。

进一步,所述操作类型为版本读操作,通过请求的版本号来确定VSI的目标版本,遍历版本列表查找指定的区间块和子区间位图,寻址到具体的物理块;

如果读请求的版本号与当前版本号不相等,则该读请求的目标数据位于历史版本中,根据版本号遍历版本列表,在LCT备份段中查找到对应的版本条目。

进一步,所述操作类型为创建版本,将当前的版本计数器加一,增加元数据的新条目,创建VSI新版本。

进一步,所述操作类型为删除版本,检查是否存在待删除VSI版本号的时间顺序的下一个版本号,如果是,将请求删除的VSI版本号删除,否则,将请求删除的VSI版本号标记为VSI最新版本号,不予删除。

进一步,物理磁盘中预留出可配置的存储空间用于保存VSI历史版本,VSI历史版本占用固定或者容量可变的空间,对于占用容量可变的空间的大小取决于数据量的更新大小以及版本的更新频率。

根据本发明一方面,提出一种用于虚拟机的虚拟存储映像版本管理系统,包括:

存储单元,用于保存元数据以及区间块数据,其中,元数据包括逻辑块区间表(LCT)、VSI版本表(VVL)和设备超级块表(DSB),其中,所述LCT保存VSI的逻辑区间块号与物理块号的映射关系,所述VVL保存版本信息,包括VSI版本号、与之关联的时间顺序上的下一个VSI版本号、版本ID,所述DSB记录VSI属性信息,包括当前版本计数器;区间块数据是多个连续的数据块,所述数据块包括主数据和备份数据,所述主数据为VSI最新版本数据,所述备份数据为VSI历史版本数据;

数据操作单元,用于接收对虚拟磁盘的操作请求,在所述操作请求中携带VSI版本号以及操作类型,确定所述VSI版本号的物理块号,并进行数据操作。

进一步,所述操作类型包括创建版本、删除版本、显示版本、版本读操作、或版本写操作。

进一步,所述操作类型为版本写操作,如果写到没有被分配的块,则使用分配指针从主数据的起点开始扫描到终点结束,扫描到空闲区间块则停止扫描,分配空闲区间块并保存分配指针,当扫描至物理磁盘的末端时,倒置分配指针的方向,从反方向开始执行扫描操作并分配空闲区间块,获取该可用的物理区间块,更新LCT中的映射关系,并将写操作转发至物理磁盘。

进一步,所述操作类型为版本写操作,如果写到已存在的块,且该块在最后一次快照后已被更改,则待写区间块的版本号与当前版本号一致,将请求的区间块地址转换为物理磁盘的物理区间块地址,并对该区间块进行写操作。

进一步,所述操作类型为版本写操作,如果写到已存在的块,且该块在最后一次快照后没有被更改,即待写块的版本号比当前的版本号低,则在新位置创建该区间块的新版本,分配新的LCT条目并且将新老LCT的条目进行交换。

进一步,在每一个LCT条目中加入子位图,区间块内的每一个数据块对应于子位图中的一位,当写操作发生时对子位图内的有效数据块进行标记;当读写操作发生时,检查区间块对应的子位图的有效位是否被标记,如果被标记则代表该位所指向的数据块包含有效数据,反之是无效数据。

进一步,所述操作类型为版本读操作,通过请求的版本号来确定VSI的目标版本,遍历版本列表查找指定的区间块和子区间位图,寻址到具体的物理块;

如果读请求的版本号与当前版本号不相等,则该读请求的目标数据位于历史版本中,根据版本号遍历版本列表,在LCT备份段中查找到对应的版本条目。

进一步,所述操作类型为创建版本,将当前的版本计数器加一,增加元数据的新条目,创建VSI新版本。

进一步,所述操作类型为删除版本,检查是否存在待删除VSI版本号的时间顺序的下一个版本号,如果是,将请求删除的VSI版本号删除,否则,将请求删除的VSI版本号标记为VSI最新版本号,不予删除。

进一步,物理磁盘中预留出可配置的存储空间用于保存VSI历史版本,VSI历史版本占用固定或者容量可变的空间,对于占用容量可变的空间的大小取决于数据量的更新大小以及版本的更新频率。

本发明中,通过将块划分为区间块,即连续的多个块,从而在版本管理过程中,可以节省内存开销。即,一个chunk里面放了很多个块。Chunk越大,固定大小的空间里面的chunk数量就越少,自然元数据需要记录的表项也就越少,表占用的空间就越少。从而节省了内容开销。此外,本发明可以只设置一个版本计数器进行记录即可,不需复杂的数据结构,所以降低了开销。

通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。

附图说明

构成说明书的一部分的附图描述了本发明的实施例,并且连同说明书一起用于解释本发明的原理。

参照附图,根据下面的详细描述,可以更加清楚地理解本发明,其中:

图1为一种用于虚拟机的虚拟存储映像版本管理方法的流程示意图。

图2为逻辑空间与物理空间的映射关系示意图。

图3为一种用于虚拟机的虚拟存储映像版本管理系统的结构示意图。

图4为一种用于虚拟机的虚拟存储映像版本管理系统的实施例的结构示意图。

具体实施方式

现在将参照附图来详细描述本发明的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。

同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。

在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。

图1为一种用于虚拟机的虚拟存储映像版本管理方法的流程示意图。该方法包括:

在步骤110,保存元数据以及区间块数据,其中,元数据包括逻辑块区间表(LCT)、VSI版本表(VVL)和设备超级块表(DSB),其中,所述LCT保存VSI的逻辑区间块(chunk)号与物理块号的映射关系,所述VVL保存版本信息,包括VSI版本号、与之关联的时间顺序上的下一个VSI版本号、版本ID,所述DSB记录VSI属性信息,包括当前版本计数器;区间块数据是多个连续的数据块,所述数据块包括主数据和备份数据,所述主数据为VSI最新版本数据,所述备份数据为VSI历史版本数据。

在步骤120,接收对虚拟磁盘的操作请求,在所述操作请求中携带VSI版本号以及操作类型,确定所述VSI版本号的物理块号,并进行数据操作。

在该实施例中,通过将块划分为区间块,即连续的多个块,从而在版本管理过程中,可以节省内存开销。即,一个chunk里面放了很多个块。Chunk越大,固定大小的空间里面的chunk数量就越少,自然元数据需要记录的表项也就越少,表占用的空间就越少。从而节省了内容开销。此外,本发明可以只设置一个版本计数器进行记录即可,不需复杂的数据结构,所以降低了开销。

其中,所述操作类型包括创建版本、删除版本、显示版本、版本读操作、或版本写操作。

下面将通过具体实施例,对各个操作类型进行详细说明。这里将以VIManager为例进行说明。本领域技术人员应该可以理解,这里的VIManager只是为了用于说明,不应理解为对本发明的限制。

1.VIManager工作环境

VIManager能够在服务器的块级I/O架构中的任意一层进行实现,以透明灵活的方式提供块级版本管理机制。输入层是客户端的用户实例系统或者其它应用的块级抽象,即VSI。VIManager通过输入层接收块级I/O请求(读,写,I/O控制等)。输出层可以是任何物理块设备或者块设备抽象。这种设计为配置云计算虚拟存储系统的块级设备架构提供了巨大的灵活性。

VSI每个版本都拥有唯一的版本号。该版本号由一个整数计数器提供,从0开始计数并随着新版本的出现而递增。如果一个块发生了写操作,则VIManager使用当前版本号对该块进行标记。在一个版本周期内,所有执行过写操作的块都将被赋予相同的版本号,这意味着所有具有相同版本号的块都是VSI新版本的组成部分。VSI最新版本存在于整个VIManager操作的全部过程中,是可读可写的,并且不能被删除,但是VSI历史版本只能处于只读状态,它作为一个虚拟的、只读块设备呈现给块级I/O架构的高层。

大多数建立在块设备上的虚拟卷只能为系统高层呈现尺寸固定的设备。然而,在VIManager机制下,VSI历史版本所占用的存储空间是动态变化的,物理磁盘中可预留出可配置的存储空间用于保存VSI历史版本,占用空间的大小取决于数据量的更新大小以及版本的更新频率。因此,VIManager不仅能够为实例操作系统高层提供固定尺寸的块设备抽象,并且在高层文件系统支持的情况下(可扩容的文件系统)能够提供容量可变的设备。

当设备初始化时,VIManager在输出设备中预留出一部分可配置的存储空间用于保存VSI历史版本。这样,从逻辑上将输出设备的容量划分成为两个部分,主数据段(Primary Data Segment,PDS)和备份数据段(Backup Data Segment,BDS),如图2所示,为逻辑空间与物理空间的映射关系示意图。PDS包含了当前(最新)VSI数据;BDS包含了所有VSI历史版本数据。VIManager将VSI整体空间占用情况报告给应用层管理工具,根据应用层管理工具制定的管理策略对输入层执行存储空间的划分,为VSI当前版本提供PDS磁盘空间。当BDS的数据容量已满时,VIManager将返回容量已满的错误代码,应用层管理工具会自动的执行删除操作或者压缩历史版本来回收BDS的存储空间。VSI最新版本一直保持可读可写的状态,于此同时,VSI历史版本被隐藏在BDS中,对输入层不可见,即对文件系统透明。输入层通过VIManager提供的API执行对BDS中数据的访问和控制。

VIManager的元数据与真实的块数据一同保存在输出设备中。元数据是其他块数据的索引,如果丢失,将导致VSI上的所有数据都变成不可用的脏数据。为保持元数据一致性,VIManager将元数据定时输出至持久存储设备。使用该方法,通过对持久存储设备上保存的元数据执行全面扫描,VIManager能够从系统崩溃中恢复至最近保存的VSI版本(回滚)。元数据的大小由输入层VSI的大小以及chunk尺寸决定。总的来说,VIManager元数据相比于传统文件系统的元数据数量极大的降低,并且这些元数据被顺序的同步至持久存储器中,因此,通过读取相关元数据进行版本恢复并不会带来大的性能开销。

VIManager为云计算客户端的实例操作系统提供可供访问的VSI。从用户角度,VIManager与普通的物理磁盘没有差别,但是VIManager能够保存历史数据的版本并定制预定义的备份策略。相比于云计算目前采用的VSI管理方法,VIManager增加时间项作为管理数据的维度,并提供了创建和操作VSI版本的机制。VIManager处理的每个数据段都将记录入索引,包括该数据段位于物理块设备上的位置信息以及执行写操作的时间。VIManager支持以一定的时间间隔自动捕获VSI版本,支持VSI当前版本和历史版本作为独立的块设备被用户在线的访问和获取,并支持VSI历史版本的删除和压缩。

2.映射机制

(1)VIManager元数据

VIManager中的三种重要的元数据分别是逻辑块区间表(Logical Chunk Table,LCT),VSI版本表(VSI Version List,VVL),设备超级块表(Device Super Block,DSB)。

LCT记录VSI的逻辑地址到物理块的映射关系。VIManager为输入设备提供VSI逻辑块号而不是物理块号。VIManager使用LCT可以将逻辑块号转换为物理块号。注意,这里所说的物理块号不需要直接对应于真实的物理存储块的分配。

VVL记录输出设备的所有版本信息,表中的每个输出设备都可以作为高层使用的块设备。VVL保存的版本信息包括了每个VSI版本号、与之关联的VSI、版本的创建时间以及一些标志位。

DSB记录了VSI重要的属性信息。这些信息包括VSI输出设备的容量信息、空间分配、chunk尺寸、块尺寸、当前版本计数器以及版本数量等。

(2)Map-On-Write映射机制

如果使用传统的COW(Copy On Write,写时复制)的方式进行操作,LCT需要大量的内存维护其内部的元数据信息,进而导致大量的内存开销。为保证LCT编址空间增长的同时降低LCT的内存占用,VIManager使用区间块的概念(称为,chunk)取代基础的块结构,作为VIManager的基本数据单元。chunk是由一系列连续的块(逻辑的和物理的)组成的块的集合,可以被认为是VIManager的内部块结构,能够配置成任意尺寸,大到数百KB或者几MB。对应于传统的物理块和逻辑块,chunk也可分为逻辑(输入)chunk和物理(输出)chunk。使用大尺寸的chunk能够显著的降低元数据的内存占用,但尺寸过大的chunk会增加磁盘空间的占用。如果VIManager采用传统的COW方式对chunk执行如上操作将会极大的降低I/O读写的性能,并增加磁盘空间的占用。

为了解决这个问题,VIManager使用了子区间寻址(sub-chunk addressing)的方法,对于每一次写操作执行“写时映射”(Map-On-Write,MOW)操作。MOW不拷贝旧数据到新的chunk,而为该数据分配一个新的、空闲的chunk,并将chunk的逻辑地址转换至新的chunk地址。为了解决部分更新的问题,在每一个LCT条目中加入一个子位图。chunk内的每一个块对应于子位图中的一位,当写操作发生时对子位图内的有效数据块进行标记。当读写操作发生时,首先检查该chunk对应的子位图的有效位是否被标记,如果被标记则代表该位所指向的数据块包含有效数据,反之是无效数据。

相对于常规的COW,MOW进行的读写操作中MOW的元数据占用是降低的。令Mblk为COW下的元数据占用,Mchunk为MOW下的元数据占用,Capacity为虚拟磁盘的容量,blk_size为块尺寸,chunk_size为chunk的尺寸,item_len是LCT中一个表项的长度。于是可以分别得到两种操作下的元数据大小。其中Mchunk包括两个部分,LCT表以及子区间位图。

令一个chunk由N个块组成,即N=chunk_size/blk_size。联立(5-1)和(5-2),可以得到

其中,item_len是一个常数,在目前的设计中item_len为16。也就是说,随着N值的增大,Mchunk大小成比例的下降。

3.版本控制机制

(1)版本控制接口

VIManager提供了一系列供高层应用管理程序调用的基础机制。应用程序通过调用VIManager提供的接口可以为云计算系统VSI制定相应的版本管理策略:

create_version()

获取底层块设备状态,并将获取后的设备状态对应至一个VSI版本。该操作在三种情况触发:操作系统服务调用、用户应用程序调用以及内部读写事件。

delete_version()

删除指定的VSI历史版本,并且回收了相应的输出设备空间。

list_version()

展示用户的某个具体块设备所对应的所有版本。

view_version()

获取输入设备,它对应于一个具体的VSI版本,该VSI只能处于只读模式。

compact_version()/uncompact_version()

对现存的VSI的多个历史版本执行压缩和解压缩功能,从而降低磁盘空间开销。

(2)版本控制方法

通过操纵内存中的数据结构,所有的版本管理操作能够在很低的性能开销下完成。

VIManager创建VSI新版本,仅对当前版本的计数器执行一个递增操作,而无需拷贝任何数据。当create_version()被调用时,VIManager首先将当前的版本计数器加一,向设备版本列表追加了一个新条目,并创建VSI新版本。在此之后,VIManager处理所有发送至输出层的I/O请求。因为每个VSI都被映射至一个具体的输入设备,所以根据发送I/O请求的输入设备的设备号能够得到VSI的版本。

当delete_version()操作发生时,VIManager首先定位待删除版本在时间顺序上的下一个版本的数据块,之后才能处理待删除版本的数据块。假定待删除的VSI版本号是V,时间顺序的下一个版本号是V’。VIManager遍历LCT主数据段追踪每个块的历史版本的列表。如果某个列表项的版本号跟V一致(即为待删除的版本),它检查是否存在一个列表项的版本号是V’。如果不存在V’,将V对应条目的版本号改为V’。因为版本V’需要该块的内容,该块的内容不能被删除。如果存在V’,从版本列表中删除版本号为V的块,同时标记该LCT条目为空闲,并释放相对应的物理存储空间。高层应用管理程序调用delete_version()实现版本清除功能。因为物理存储空间是有限的,需要在必要的时刻对BDS空间执行清除策略,以保证版本控制能够不受影响的持续进行。当PDS和BDS空间已满时,为保证VSI当前版本能够执行持续的写入操作,VIManager将调动delete_version()删除存放时间最久的VSI版本,执行版本回收功能。

系统事件或外部进程可以周期性调用上述基础机制完成VSI版本的创建、删除、显示等。

(3)I/O访问路径

根据VSI版本的类型可将读写访问分成两类,一类是对当前版本的访问,另一类是对历史版本的访问。

(3.1)写请求I/O访问路径

为了定位VSI具体版本对应的物理chunk的请求块,VIManager首先查询LCT主数据段条目,寻址请求chunk的当前版本(单次查找)。然后VIManager使用chunk历史版本的链接表,寻址请求块的对应版本。根据每个I/O请求的类型和请求块的状态,对I/O请求操作进行如下规定:对VSI当前版本可以进行读操作和写操作,而对VSI历史版本只能进行读操作。这样,VIManager只需通过一次LCT访问,就可以完成对当前版本chunk的寻址。写请求有如下三种类型。

类型1:写到没有被分配的块。在这种情况下,VIManager调用chunk分配方法,默认的chunk分配策略是扫描策略,使用分配指针从PDS的起点开始扫描到终点结束,扫描到空闲chunk则停止扫描,分配空闲chunk并保存分配指针。当扫描至设备末端时,倒置分配指针的方向,从反方向开始执行扫描操作并分配空闲chunk。获取输出设备上一个可用的物理chunk,更新LCT中对应的条目,并将写操作转发至输出设备。

类型2:写到已存在的块,且该块在最后一次快照后已被更改。如果版本没有新增加的情况下,可以重复写,因为都是版本并没有变化。如果版本号改变了,也就是版本增长了,就要写到新的块上。

在这种情况下,待写chunk的版本号与当前版本号一致。VIManager执行单次查找就可以完成LCT对应条目的寻址,并且将请求的chunk地址转换为输出设备的物理chunk地址。在这种情况下,直接对该块进行写操作,完成就地更新。

类型3:写到现存的块,并且该块在最后一次快照后没有被更改。在这种情况下,待写块的版本号比当前的版本号低。此时,物理chunk的数据不允许被覆盖写,新的数据块必须写到与此前不同的新位置,并且在新位置创建该chunk的新版本。VIManager在BDS中分配新的LCT条目并且将新老LCT的条目进行交换,这样旧LCT条目就被移动到LCT备份段。块地址被转换成新的物理chunk地址,I/O请求被传递至输出层。新旧LCT条目的交换机制保证了LCT与当前版本的逻辑chunk间始终维持一对一映射关系,从而保证LCT执行单次查找完成I/O寻址,进而优化了寻址效率。

(3.2)读请求I/O访问路径

对当前版本的读请求转换。首先,VIManager通过请求的版本号来确定VSI的目标版本。接着,VIManager遍历LCT的版本列表查找指定的chunk和子区间位图,从而寻址到具体的物理块。由于使用MOW和子区间寻址,读操作被转换至物理chunk之前,需要在当前chunk和历史chunk中查找有效的LCT子区间。

VSI历史版本可以作为不同的输入设备提供给云计算客户端上的用户。上层文件系统能够使用这些输入设备访问VSI历史版本。如果读请求的版本号与当前版本号不相等,则该读请求的目标数据位于某个历史版本中。VIManager根据版本号确定所请求的chunk版本,遍历该chunk的版本列表,在LCT备份段中查找到该逻辑chunk对应的版本条目。如果读请求的版本号与当前版本号相等,则直接读取。

图3为一种用于虚拟机的虚拟存储映像版本管理系统的结构示意图。该系统包括存储单元310以及数据操作单元320。其中:

存储单元310,用于保存元数据以及区间块数据,其中,元数据包括逻辑块区间表(LCT)、VSI版本表(VVL)和设备超级块表(DSB),其中,所述LCT保存VSI的逻辑区间块号与物理块号的映射关系,所述VVL保存版本信息,包括VSI版本号、与之关联的时间顺序上的下一个VSI版本号、版本ID,所述DSB记录VSI属性信息,包括当前版本计数器;区间块数据是多个连续的数据块,所述数据块包括主数据和备份数据,所述主数据为VSI最新版本数据,所述备份数据为VSI历史版本数据。

数据操作单元320,用于接收对虚拟磁盘的操作请求,在所述操作请求中携带VSI版本号以及操作类型,确定所述VSI版本号的物理块号,并进行数据操作。

在该实施例中,通过将块划分为区间块,即连续的多个块,从而在版本管理过程中,可以节省内存开销。此外,本发明可以只设置一个版本计数器进行记录即可,不需复杂的数据结构,所以降低了开销。

其中,所述操作类型包括创建版本、删除版本、显示版本、版本读操作、或版本写操作。

下面将对各个操作类型进行详细说明。

所述操作类型为版本写操作,如果写到没有被分配的块,则使用分配指针从主数据的起点开始扫描到终点结束,扫描到空闲区间块则停止扫描,分配空闲区间块并保存分配指针,当扫描至物理磁盘的末端时,倒置分配指针的方向,从反方向开始执行扫描操作并分配空闲区间块,获取该可用的物理区间块,更新LCT中的映射关系,并将写操作转发至物理磁盘。

所述操作类型为版本写操作,如果写到已存在的块,且该块在最后一次快照后已被更改,则待写区间块的版本号与当前版本号一致,将请求的区间块地址转换为物理磁盘的物理区间块地址,并对该区间块进行写操作。

所述操作类型为版本写操作,如果写到已存在的块,且该块在最后一次快照后没有被更改,即待写块的版本号比当前的版本号低,则在新位置创建该区间块的新版本,分配新的LCT条目并且将新老LCT的条目进行交换。

在每一个LCT条目中加入子位图,区间块内的每一个数据块对应于子位图中的一位,当写操作发生时对子位图内的有效数据块进行标记;当读写操作发生时,检查区间块对应的子位图的有效位是否被标记,如果被标记则代表该位所指向的数据块包含有效数据,反之是无效数据。

所述操作类型为版本读操作,通过请求的版本号来确定VSI的目标版本,遍历版本列表查找指定的区间块和子区间位图,寻址到具体的物理块;如果读请求的版本号与当前版本号不相等,则该读请求的目标数据位于历史版本中,根据版本号遍历版本列表,在LCT备份段中查找到对应的版本条目。

所述操作类型为创建版本,将当前的版本计数器加一,增加元数据的新条目,创建VSI新版本。

所述操作类型为删除版本,检查是否存在待删除VSI版本号的时间顺序的下一个版本号,如果是,将请求删除的VSI版本号删除,否则,将请求删除的VSI版本号标记为VSI最新版本号,不予删除。

图4为一种用于虚拟机的虚拟存储映像版本管理系统的实施例的结构示意图。其中,虚拟存储映像版本管理系统设置在存储服务器中,通过网络通信协议与客户端进行交互。

在本发明中,用户正常对虚拟磁盘(输入空间)进行读或者写操作,则底层就会映射到真实磁盘(输出空间)进行读写操作。某时刻(定时或者用户随时发起都可以)需要记录版本的时候,发出创建版本的指令(create_version),这个时候会使用某种记录及映射方法(执行数据操作,例如读写,或更改表等等,达到版本管理的目的。

本发明提出一种低开销的支持版本控制的块级虚拟存储映像管理方法,支持低开销的虚拟存储映像管理和版本管理。本发明适用于多种云管理平台下的多种类型的虚拟存储映像。

至此,已经详细描述了本发明。为了避免遮蔽本发明的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。

可能以许多方式来实现本发明的方法以及装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本发明的方法以及装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本发明的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本发明实施为记录在记录介质中的程序,这些程序包括用于实现根据本发明的方法的机器可读指令。因而,本发明还覆盖存储用于执行根据本发明的方法的程序的记录介质。

虽然已经通过示例对本发明的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本发明的范围。本领域的技术人员应该理解,可在不脱离本发明的范围和精神的情况下,对以上实施例进行修改。本发明的范围由所附权利要求来限定。

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