一种虚拟磁盘的解析方法及系统与流程

文档序号:12801867阅读:174来源:国知局
一种虚拟磁盘的解析方法及系统与流程

本发明属于计算机技术领域,更具体是涉及一种虚拟磁盘的解析方法及系统。



背景技术:

kvm(kernel-basedvirtualmachine),是一个开源的系统虚拟化模块,自linux2.6.20之后集成在linux的各个主要发行版本中。它使用linux自身的调度器进行管理,所以相对于xen,其核心源码很少。kvm目前已成为学术界的主流vmm之一。

众多虚拟化平台底层基于kvm开发,如国产虚拟化平台h3ccas。为了对此类虚拟化平台提供数据备份恢复支持,目前可行的方案是通过备份整个qcow2磁盘文件的方式,但会存在问题:如基于外部快照备份会导致磁盘链路复杂而难以管理,虽然基于内部快照备份不会产生因磁盘链路复杂而难于管理的问题,但始终存在一个很大的限制,即只能恢复到基于kvm开发的虚拟化平台。

而今,为了更加安全可靠的保护虚拟化数据,越来越多的客户选择用某一种虚拟化平台提供业务的同时,选择另一家公司的另一种虚拟化平台来做容灾。此时,就急需要一种能实现跨虚拟化平台恢复数据的技术。



技术实现要素:

鉴于以上所述现有技术的缺点,本发明的目的在于提供一种虚拟磁盘的解析方法,用于提供跨虚拟化平台恢复用数据,从而解决现有技术中跨虚拟化平台恢复数据的问题。

为实现上述目的及其他相关目的,本发明的第一个方面是提供一种虚拟磁盘的解析方法,包括将第一类型格式虚拟磁盘的数据解析为裸磁盘数据,以供还原成所述第一类型格式虚拟磁盘数据或不同于所述第一类型格式虚拟磁盘的第二类型格式虚拟磁盘数据的步骤。

于本发明的一实施例中,将第一类型格式虚拟磁盘的数据解析为裸磁盘数据采用下列步骤:

解析所述第一类型格式虚拟磁盘以获取所述第一类型格式虚拟磁盘的扇区总数及一级索引表l1表;

计算每个扇区映射在l1表的偏移量,结合所述l1表的起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

遍历获取每个扇区所映射数据簇的起始偏移地址,若起始偏移地址为0,则说明此扇区未分配数据,若起始偏移地址不为0,则说明此扇区已经分配数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据,遍历读取到的数据集即为第一格式虚拟磁盘的全部真实数据集。

为实现上述目的及其他相关目的,本发明的另一个方面是提供一种虚拟磁盘的解析系统,包括用于将第一类型格式虚拟磁盘的数据解析为裸磁盘数据,以供还原成所述第一类型格式虚拟磁盘数据或不同于所述第一类型格式虚拟磁盘的第二类型格式虚拟磁盘数据的解析模块。

于本发明的一实施例中,所述解析模块包括:

预处理模块:用于解析所述第一类型格式虚拟磁盘以获取所述第一类型格式虚拟磁盘的扇区总数和一级索引表l1表;

寻址模块:计算每个扇区位于所述l1表的偏移量,结合所述l1表的起始偏移地址,获取此扇区位于所述l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区映射的数据簇的起始偏移地址;

判断读取模块:遍历获取每个扇区所映射数据簇的起始偏移地址,若起始偏移地址为0,则说明此扇区未分配数据,若起始偏移地址不为0,则说明此扇区已经分配数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据,遍历读取到的数据集即为第一格式虚拟磁盘的全部真实数据集。

采用上述发明技术方案的有益效果:本发明将第一类型格式虚拟磁盘的数据按扇区读成裸磁盘数据,所述裸磁盘数据相当于真实磁盘中存储的无组织格式的数据,所述裸磁盘数据可直接被重新组织化成不同虚拟化平台所用的不同虚拟化磁盘格式,故可供用于在不同虚拟化平台间恢复数据,从而实现了跨不同类型的虚拟化平台的备份恢复,大大提高了备份产品的竞争力。

附图说明

图1显示为本发明的虚拟磁盘的解析方法的一实施例的流程示意图。

图2显示为本发明基于内部快照读取虚拟磁盘所有扇区全部数据的解析方法的一实施例的流程示意图。

图3显示为本发明基于内部快照读取虚拟磁盘所有扇区已变动数据的解析方法的一实施例的流程示意图。

图4显示为本发明基于外部快照读取虚拟磁盘所有扇区全部数据的解析方法的一实施例的流程示意图。

图5显示为本发明基于外部快照读取虚拟磁盘所有扇区已变动数据的解析方法的一实施例的流程示意图。

图6显示为本发明的虚拟磁盘的解析系统的一实施例结构示意图。

具体实施方式

以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。

需要说明的是,本实施例中所提供的图示仅以示意方式说明本发明的基本构想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

本发明提供一种虚拟磁盘的解析方法,即将一种虚拟化平台中的虚拟磁盘的数据解析为裸磁盘数据,该裸磁盘数据相当于真实磁盘中的数据,不存在组织格式,该裸磁盘数据可用于恢复到相同的虚拟化平台也可用于恢复到不同的虚拟化平台中。如将h3ccas虚拟化平台中格式为qcow2的虚拟磁盘解析为裸磁盘数据后,可将该裸磁盘数据恢复到cas平台的qcow2格式磁盘中,也可将该裸磁盘数据恢复到vmwere平台的vmdk格式磁盘中或virtualbox平台的vdi格式磁盘中。当然也可以恢复到其它虚拟化平台的虚拟磁盘中。因此本发明将虚拟磁盘数据解析为裸磁盘数据的方法,可用于实现在各种虚拟化平台间恢复数据。

本发明主要以解析qcow2格式虚拟磁盘为例进行说明。qcow2格式是一种特殊的磁盘格式,内部主要包括文件头、一级索引表(l1表)、引用计数表、二级索引表(l2表)以及数据部分。其文件头包含了虚拟磁盘文件的基本性质,例如虚拟磁盘文件的版本信息、磁盘文件大小信息、快照信息等;l1表和l2表是qcow2格式的两级索引表,通过这两级索引表结构将数据组织起来,数据的查找也根据这两级索引表。不管是文件头、数据还是表,都是以数据簇cluster为单位存储的,按数据簇cluster对齐。其中,l1表中的每条表项存储一个l2表在虚拟磁盘文件中的偏移值,l2表中的每条表项存储一个数据簇cluster的偏移值;引用计数表则记录每个数据簇cluster的使用情况,当某个数据簇cluster对应的引用计数表中的值为0时,证明该数据簇cluster为空,但是qcow2格式不提供删除的方法,只能标记为空闲(即在引用计数表中标记为0),当有新数据存储时则优先存储在这些空闲的数据簇cluster中。

将一种虚拟化平台中的虚拟磁盘的数据解析为裸磁盘数据,在一个实施例中,如图1所示,所述虚拟磁盘的解析方法包括:

步骤101、解析所述第一类型格式虚拟磁盘以获取所述第一类型格式虚拟磁盘的扇区总数及一级索引表l1表。即解析qcow2格式虚拟磁盘,获取相应的所有扇区的信息和l1表的信息;

步骤102、计算每个扇区映射在l1表的偏移量,结合所述l1表的起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

步骤103、遍历获取每个扇区所映射数据簇的起始偏移地址,若起始偏移地址为0,则说明此扇区未分配数据,若起始偏移地址不为0,则说明此扇区已经分配数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据,遍历读取到的数据集即为第一格式虚拟磁盘的全部真实数据集。

本发明提供一种具体的解析qcow2格式虚拟磁盘某扇区数据的实施例对上述方法进行进一步说明:

如获取qcow2格式虚拟disk1第n个扇区的数据,需进行如下操作:

a1、读取disk1的header信息,解析到相应的属性值;。

a2、根据header信息获取到l1表的偏移量;

a3、通过运算获取本扇区位于l1表的偏移量,结合l1表的起始偏移地址获取到对应的l2表的起始偏移地址,进一步计算获取到本扇区位于l2表的偏移量,结合l2表的起始偏移地址读取l2表中相应数据簇cluster的起始偏移地址;

a4、若扇区数据簇cluster的起始偏移地址为0,说明此扇区未分配数据;若不为0,则进一步计算得到此扇区位于此数据簇cluster的偏移量,读取到相应的数据即为此扇区的真实数据(簇为扇区的整数倍,因此不存在某个扇区数据不在同一个簇的情况)。

遍历读取disk1所有扇区的数据,此时即可得到qcow2格式虚拟磁盘对应的全量裸磁盘数据。

进一步的,本发明还提供一种更具体的解析qcow2格式虚拟磁盘某扇区数据的实施例对上述方法进行具体说明:

如存在一个qcow2格式虚拟磁盘disk1,需读取第n=10个扇区的数据(因为qcow2磁盘内数据按照一系列格式组织,第10个扇区并不对应于磁盘的第10个扇区,需进一步计算得到第10个扇区位于磁盘的真实偏移地址)。

b1、读取disk1的header信息,解析得到header相应属性的值;

b2、根据步骤2解析得到l1表的起始偏移地址为786432;

b3、通过运算获取本扇区位于l1表的偏移量为0,结合l1表的起始偏移地址,读取磁盘偏移地址为786432的数据,得到l2表的起始偏移地址为1048576;

b4、进一步计算获取到本扇区位于l2表的偏移量为0,结合l2表的起始偏移地址,读取磁盘偏移地址为1048576的数据,得到cluster的起始偏移地址为1310720;

b5、簇起始偏移地址为1310720,不为0,说明此扇区已分配数据,则进一步计算得到此扇区位于此簇的偏移量为10;

b6、结合簇偏移量及起始偏移地址,读取512个字节的磁盘偏移地址为1310720+10*512的数据,即为第10个扇区的数据。

针对qcow2格式虚拟磁盘,快照分为外部快照和内部快照。以下分别对基于内部快照或外部快照获取qcow2格式虚拟磁盘的全量备份或增量备份裸磁盘数据的方法进行具体说明。

图2为本发明基于内部快照读取虚拟磁盘所有扇区全部数据的解析方法的一实施例,其解析虚拟磁盘的方法包括:

步骤201、对所述第一类型格式虚拟磁盘执行内部快照,生成新的内部快照;

步骤202、解析所述第一类型格式虚拟磁盘和所述内部快照以获取所述第一类型格式虚拟磁盘的扇区总数及所述内部快照对应的一级索引表l1表;

步骤203、计算每个扇区映射在l1表的偏移量,结合所述l1表的起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

步骤204、遍历获取每个扇区所映射数据簇的起始偏移地址,若起始偏移地址为0,则说明此扇区尚未分配数据;若起始偏移地址不为0,则说明此扇区已经分配数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据,遍历读取到的数据集即为所述第一格式虚拟磁盘在执行所述内部快照时刻的全部真实数据集。

本发明提供一种具体的基于内部快照读取qcow2格式虚拟磁盘所有扇区数据的实施例对图2中所述方法做进一步说明:

c1、对qcow2格式虚拟磁盘disk1触发接口执行内部快照1;

c2、读取disk1的header信息,解析到相应属性值;

c3、根据header属性值,获取到磁盘大小及新生成的内部快照1的偏移地址;

c4、通过偏移地址检索获取到内部快照1对应的l1表的起始偏移地址;

c5、从0~size遍历每个扇区,如遍历第n个扇区时,通过运算获取本扇区位于l1表的偏移量,结合l1表的起始偏移地址获取到对应的l2表的起始偏移地址,进一步计算获取到本扇区位于l2表的偏移量中结合l2表的起始偏移地址读取l2表中相应数据簇cluster的起始偏移地址,如果为0,说明此扇区未分配,及不存在数据;若不为0,则说明此扇区已分配数据,记录此扇区地址;

c6、遍历步骤c5,即得到所有已分配dataclusters(真实用户数据)的所有扇区地址信息。

图3为本发明基于内部快照读取虚拟磁盘所有扇区已变动数据的解析方法的一实施例,其解析虚拟磁盘的方法包括:

步骤301、对所述第一类型格式虚拟磁盘执行内部快照,生成新的内部快照;

步骤302、解析所述第一类型格式虚拟磁盘、所述新的内部快照及所述新的内部快照前的任意一个内部快照,获取所述第一类型格式虚拟磁盘的扇区总数、所述新的内部快照对应的一级索引表l1表及所述新的内部快照前的任意一个内部快照对应的一级索引表l1表;

步骤303、计算每个扇区映射在所述新的内部快照对应的l1表的偏移量,结合所述新的内部快照对应的l1表的起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

步骤304、计算每个扇区映射在所述新的内部快照前的任意一个内部快照的l1表偏移量,结合所述新的内部快照前的任意一个内部快照的l1表起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

步骤305、遍历对比每个扇区对应在所述新的内部快照和所述新的内部快照前的任意一个内部快照中分别所映射的数据簇的起始偏移地址,当所述两个数据簇的起始偏移地址相同时,说明此簇数据未改变;不相同时,说明此簇已重新分配,说明此扇区数据已变动,结合此扇区映射在所述新的内部快照中数据簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据,遍历读取到的数据集即为所述第一类型格式虚拟磁盘在所述新的内部快照及所述新的内部快照前的任意一个内部快照间所有变动的真实数据集。

本发明提供一种具体的基于内部快照读取qcow2格式虚拟磁盘所有扇区已变动数据的实施例对图3中所述方法做进一步说明:

d1、对qcow2格式虚拟磁盘disk1触发接口执行内部快照2;

d2、通过读取disk1对应的内部快照1及disk1的header信息,获取到内部快照1的偏移地址,进而得到其对应的l1表起始偏移地址,进而得到其对应的所有l2表起始偏移地址;

d3、通过内部快照2的header信息,获取到内部快照2的偏移地址,进而得到其对应的l1表起始偏移地址,进而得到其对应的所有l2表起始偏移地址;

d4、分别解析步骤d2和步骤d3两个内部快照各自l2表对应的数据,即已分配的dataclusters的起始偏移地址;

d5、依次对比步骤d4中的数据,如果起始偏移地址不相同,说明本扇区相应数据已发生了变动。通过计算获取到所有已变动数据的扇区位于内部快照2的l2表对应的数据簇cluster的偏移量,获取到并读取相应数据。

图4为本发明基于外部快照读取虚拟磁盘所有扇区全部数据的解析方法的一实施例,其解析虚拟磁盘的方法包括:

步骤401、对所述第一类型格式虚拟磁盘执行外部快照,生成新的外部快照;

步骤402、解析所述第一类型格式虚拟磁盘及所述新的外部快照之前生成的所有外部快照,获取所述第一类型格式虚拟磁盘的扇区总数及所述于所述新的外部快照之前生成的所有外部快照对应的一级索引表l1表;

步骤403、计算每个扇区映射在所述新的外部快照的上一级外部快照对应的l1表的偏移量,结合所述新的外部快照的上一级外部快照对应的l1表的起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

步骤404、若扇区映射的数据簇的起始偏移地址为0,则说明此扇区尚未在此外部快照中分配,需进一步获取此扇区在此外部快照的上一级外部快照中所映射的数据簇的起始偏移地址,若所述起始偏移地址仍为0,则需继续获取此扇区在上上一级外部快照中所映射的数据簇的起始偏移地址,,直至此扇区映射的数据簇起始偏移地址不为0或根磁盘,若此扇区在上述某一外部快照中或所述根磁盘中映射的数据簇的起始偏移地址不为0,说明此扇区已分配,并且此数据簇中存储着此扇区的最新数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据;

步骤405、若扇区映射的数据簇的起始偏移地址不为0,则说明此扇区已分配,并且此数据簇中存储着此扇区的最新数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据;

步骤406、遍历所有扇区,即可获得所述第一类型格式虚拟磁盘在执行所述新的外部快照时刻的全部真实数据集。

本发明提供一种具体的基于外部快照读取qcow2格式虚拟磁盘所有扇区已变化数据的实施例对图4中所述方法做进一步说明:

e1、对disk1触发接口执行外部快照1,得到disk2→disk1(disk2为当前使用盘,disk1为disk2的backing_file)。

e2、读取disk2的header信息,解析到相应的属性值;

e3、根据header信息,获取到磁盘大小size及backing_file偏移地址,进而获取到backing_file的绝对路径(即disk1的绝对路径);

e4、根据步骤e2和e3,如磁盘链路较复杂,可依次获取到执行外部快照1后的磁盘链路关系;

e5、获取到链路关系后,只需剔除当前使用盘,依次获取其他磁盘的数据即可。(因当前使用盘为快照后生成,不包含需读取的数据)。即此例只需解析读取disk1;

e6、通过获取到的disk1的绝对路径,读取disk1的header信息,解析到相应的属性值。

e7、通过header信息获取到l1表的起始偏移地址;

e8、从0~size遍历每个扇区,如遍历第n个扇区时,通过运算获取本扇区位于l1表的偏移量,结合l1表的起始偏移地址获取到对应的l2表的起始偏移地址,进一步计算获取到本扇区所位于l2表的偏移量,结合l2表的起始偏移地址读取l2表中相应数据簇cluster的起始偏移地址,如果为0,说明此扇区未分配,即不存在数据;若不为0,则说明此扇区已分配数据,记录此扇区地址;

e9、遍历步骤e8,即得到所有已分配dataclusters(真实用户数据)的所有扇区地址信息;

e10、如磁盘disk1存在backing_file(disk0),则步骤e4、e5后需读取的磁盘为disk1和disk0,继续执行步骤e6、e7、e8,若第n个扇区已在disk1中分配,读取此扇区数据后继续遍历第n+1个扇区;如第n个扇区未在disk1中分配,则开始在disk0中检索此扇区是否已分配。具体方法为执行步骤e6、e7、e8,其中步骤e6相应改为“通过获取到的disk1的绝对路径,读取disk0的header信息,解析到相应的属性值”。执行后若此扇区已在disk0中分配,读取此扇区数据后继续遍历第n+1个扇区;如第n个扇区未在disk0中分配,则说明第n个扇区未分配,跳过此扇区继续遍历第n+1个扇区。

图5为本发明基于外部快照读取虚拟磁盘所有扇区已变动数据的解析方法的一实施例,其解析虚拟磁盘的方法包括:

步骤501、对所述第一类型格式虚拟磁盘执行外部快照,生成新的外部快照;

步骤502、解析所述第一类型格式虚拟磁盘和所述新的外部快照获取所述第一类型格式虚拟磁盘的扇区总数和所有外部快照;

步骤503、解析获取所述第一类型格式虚拟磁盘的任意两次外部快照之间的所有外部快照的一级索引表l1表;

步骤504、计算每个扇区映射在所述第一类型格式虚拟磁盘的任意两个外部快照之间的所有外部快照中的最后生成的外部快照对应的l1表的偏移量,结合所述l1表的起始偏移地址,获取到此扇区所映射的二级索引表l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区所映射的数据簇的起始偏移地址;

步骤505、若扇区映射的数据簇的起始偏移地址为0,则说明此扇区尚未在此外部快照中分配,需进一步获取此扇区在此外部快照的上一级外部快照中所映射的数据簇的起始偏移地址,若所述起始偏移地址仍为0,则需继续获取此扇区在上上一级外部快照中所映射的数据簇的起始偏移地址,,直至所述第一类型格式虚拟磁盘的任意两次外部快照之间的所有外部快照中的最先生成的外部快照,若此扇区在上述某一外部快照中映射的数据簇的起始偏移地址不为0,则说明此扇区已分配,并且此数据簇中存储着此扇区的最新数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据;

步骤506、若扇区映射的数据簇的起始偏移地址不为0,则说明此扇区已分配,并且此数据簇中存储着此扇区的最新数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据;

步骤507、遍历所有扇区,即可获得所述第一类型格式虚拟磁盘在任意两次外部快照间的所有变动的真实数据集。

本发明提供一种具体的基于外部快照读取qcow2格式虚拟磁盘所有扇区数据的实施例对图5中所述方法做进一步说明:

f1、对qcow2格式虚拟磁盘disk1执行外部快照3,得到disk4,此时磁盘链路关系为disk4→disk3→disk2→disk1(disk4为当前使用盘,disk2、disk3分别对应外部快照1和外部快照2,disk1为根磁盘);

f2、读取disk4的header信息,解析到相应的属性值;

f3、根据header信息,获取到backing_file偏移地址,进而获取到backing_file(disk3)的绝对路径;

f4、根据步骤f2和f3,可依次获取到执行外部快照2后的各磁盘链路关系及disk1、disk2及disk3的绝对路径;

f5、通过查询外部快照1后磁盘的变化数据集,可知外部快照1后disk2、disk3为新增盘(disk4是为了保证disk3的数据一致性而生成),即保存外部快照1后的所有变化数据;

f6、获取disk3的header信息,进而获取到磁盘大小size及l1表的起始偏移地址;

f7、从0~size遍历每个扇区,如遍历第n个扇区时,通过运算获取本扇区位于l1表的偏移量,结合l1表的起始偏移地址获取到对应的l2表的起始偏移地址,进一步计算获取到本扇区所位于l2表的偏移量,结合l2表的起始偏移地址读取l2表中相应cluster的起始偏移地址,如果为0,说明此扇区未分配,若不为0,则说明此扇区已分配数据,记录此扇区地址;

f8、若f7中第n个扇区未在disk3分配,则需继续在disk2中检索此扇区,检索后若此扇区未在disk2分配,说明此扇区数据一直未改变,继续在disk3执行遍历第n+1个扇区;若此扇区在disk2中分配,说明此扇区数据已改变,记录此扇区地址后,继续在disk3磁盘执行遍历第n+1个扇区;

f9、遍历步骤f7、f8,即获取到所有已变化数据的扇区信息。

本发明还提供一种虚拟磁盘的解析系统,包括:用于将第一类型格式虚拟磁盘的数据解析为裸磁盘数据,以供还原成所述第一类型格式虚拟磁盘数据或不同于所述第一类型格式虚拟磁盘的第二类型格式虚拟磁盘数据的解析模块。

所述解析模块,在一实施例中,如图6所示,包括:

预处理模块601:用于解析所述第一类型格式虚拟磁盘以获取所述第一类型格式虚拟磁盘的扇区总数和一级索引表l1表;

寻址模块602:计算每个扇区位于所述l1表的偏移量,结合所述l1表的起始偏移地址,获取此扇区位于所述l2表的起始偏移地址,结合此扇区映射在此l2表的偏移量,获取到此扇区映射的数据簇的起始偏移地址;

判断读取模块603:遍历获取每个扇区所映射数据簇的起始偏移地址,若起始偏移地址为0,则说明此扇区未分配数据,若起始偏移地址不为0,则说明此扇区已经分配数据,结合此扇区映射在此簇的偏移量,获取到此扇区相对于此磁盘文件起始地址的偏移地址,即可读取此扇区对应的数据,遍历读取到的数据集即为第一格式虚拟磁盘的全部真实数据集。

本发明还提供了一种将裸磁盘扇区真实数据写入到qcow2格式虚拟磁盘的实施例:

如将第n个扇区写入到qcow2格式虚拟磁盘disk1,需进行如下操作:

g1、读取disk1的header信息,解析得到相应的属性值。

g2、通过n计算得到扇区所在l1表和l2表的偏移量。

g3、通过解析header信息,查询l1表的起始偏移地址。如disk1中l1表尚未分配,则将l1表信息写入到disk1中。

g4、通过l1表的信息获取l2表的起始偏移地址,如l2表尚未分配,则将l2able信息写入到disk1中。

g5、通过l2表的起始偏移地址及此扇区所在l2表的偏移量,查询相应dataclusters信息。如cluster尚未分配,则遍历所有cluster信息,获取已分配的最大簇起始偏移地址,增加一个簇大小后,进而将簇信息写入到disk1中。

g6、此时已分配了cluster,计算此扇区所在cluster的偏移量,将数据写入到此cluster的相应偏移地址即可。

g7、步骤g4、g5、g6如手动写入l1表、l2表和cluster信息时(即手动分配创建l1表、l2表和cluster),需根据header信息计算disk1的refcount表(引用计数表)的偏移地址,计算得到需写入到引用计数表的偏移地址后,将引用计数信息写入到disk1中。

g8、此时即成功将裸磁盘数据重新组织格式化并写入为qcow2磁盘中的数据。

综上所述,本发明虚拟磁盘的解析方法及系统,可实现基于扇区将qcow2格式虚拟磁盘数据解析为裸磁盘数据,也可实现基于扇区将qcow2格式虚拟磁盘内部快照或外部快照解析为裸磁盘,且能将裸磁盘(此裸磁盘可以是其他类型虚拟化平台备份而来)写入到qcow2格式虚拟磁盘中或其他不同的格式虚拟磁盘中,极大提高了备份的灵活性,便于基于不同客户情况采取不同的备份方案。可极大提升备份产品在市场上的优势。所以,本发明有效克服了现有技术中的种种缺点而具高度产业利用价值。

上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何熟悉此技术的人士皆可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,举凡所属技术领域中具有通常知识者在未脱离本发明所揭示的精神与技术思想下所完成的一切等效修饰或改变,仍应由本发明的权利要求所涵盖。

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