一种虚拟磁盘的冗余数据删除方法及系统的制作方法

文档序号:6381984阅读:217来源:国知局
专利名称:一种虚拟磁盘的冗余数据删除方法及系统的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种虚拟磁盘的冗余数据删除方法及系统。
背景技术
虚拟磁盘是虚拟机存储基本操作系统数据和一些运行时需要的软件和数据等的文件。当大量的相同数据封装在不同的虚拟磁盘中时,会导致存储空间的大量浪费,而且还会造成虚拟机相似,从而影响了虚拟机的管理和调度的灵活性,在虚拟磁盘迁移或备份的过程中严重浪费网络资源,因此针对虚拟磁盘的冗余数据删除十分必要。目前对虚拟磁盘的冗余数据删除主要采用在线重复数据删除方法,即通过在数据存储过程中判断数据是否重复,只存储不重复的数据,对于重复的数据直接建立索引指向已有数据。这种重复数据删除的方法虽然能够在重复数据产生时就处理,但是对于数据存储过程中的重复数据识别和数据读写过程中的索引查找却需要一定的时间,因此,会给虚拟机的IO性能带来很大的影响。

发明内容
本发明的目的在于提供一种虚拟磁盘的冗余数据删除方法及系统,以解决现有技术中删除虚拟磁盘的冗余数据时对虚拟机的IO性能的影响。本发明的第一个方面是提供一种虚拟磁盘的冗余数据删除方法,包括对快速仿真器写时复制QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取所述至少两个QC0W2格式的虚拟磁盘的文件信息,所述至少两个虚拟磁盘的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据,与所述cluster的偏移地址对应的数据为所述cluster中存储的数据;其中,所述至少两个QC0W2格式的虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭;根据所述至少两个虚拟磁盘的文件信息确定所述至少两个虚拟磁盘中是否存在冗余的数据,若所述至少两个虚拟磁盘中存在冗余的数据,则确定冗余的数据、存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址;将所述冗余的数据存储在所述根磁盘中;根据所述存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址删除存储有所述冗余的数据的至少两个虚拟磁盘中的所述冗余的数据。本发明的另一个方面是提供一种虚拟磁盘的冗余数据删除系统,包括预处理模块,用于对快速仿真器写时复制QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取所述至少两个QC0W2格式的虚拟磁盘的文件信息,所述至少两个虚拟磁盘的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据,与所述cluster的偏移地址对应的数据为所述cluster中存储的数据;其中,所述至少两个QC0W2格式的虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭;冗余数据确定模块,用于根据所述至少两个虚拟磁盘的文件信息确定所述至少两个虚拟磁盘中是否存在冗余的数据,若所述至少两个虚拟磁盘中存在冗余的数据,则确定冗余的数据、存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址;存储模块,用于将所述冗余的数据存储在所述根磁盘中;冗余数据删除模块,用于根据所述存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址删除存储有所述冗余的数据的至少两个虚拟磁盘中的所述冗余的数据。采用上述本发明技术方案的有益效果是本发明通过在确定快速仿真器写时复制(QEMU Copy on Write,简称QC0W2)格式的同一根磁盘下的至少两个虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭时,即在虚拟磁盘完成备份以及存储数据之后,对所述至少两个虚拟磁盘进行冗余数据的识别和删除,从而避免了删除虚拟磁盘的冗余数据时对虚拟机的IO性能的影响。


图1为本发明实施例一提供的一种虚拟磁盘的冗余数据删除方法的流程示意图;图2为本发明实施例二提供的一种虚拟磁盘的冗余数据删除系统的结构示意图。
具体实施例方式首先,需要说明的是,虚拟磁盘作为虚拟机的存储文件有多种数据组织形式,即虚拟磁盘格式,最普通的是原始的直读直写RAW格式,即虚拟磁盘内部没有特殊组织和结构,只是将虚拟磁盘文件看成物理磁盘使用,这种格式预先分配给虚拟机所有的空间,但虚拟机可能不能完全利用,从而造成空间的大量浪费。而其他格式,如VMware虚拟机的磁盘格式 VMDKXVMWare Virtual Machine Disk Format)和 QEMU虚拟机的写时复制磁盘格式 QCOW(QEMU Copy on Write)都是内部有索引结构的虚拟磁盘格式,其大小随存储数据的增加而动态增加。在QCOW格式下,其同一根磁盘下的各子虚拟磁盘之间的重复数据也可以只保留一个副本,即将各子磁盘共有的公共数据存储在根磁盘中,每个虚拟机产生的不同的数据则存储在衍生出来相应的子磁盘中,每台虚拟机则拥有整个虚拟磁盘的逻辑视图。这样操作系统文件等共同数据就只保留一个副本,大大减小虚拟磁盘整体占用空间。因此,QC0W2格式的虚拟磁盘内部结构支持COW机制,在数据共享上较其他格式的虚拟磁盘有较大的优势。但这个数据共享过程是静态的,不可更改的,虚拟机在使用过程中产生的新数据只能存储在相应的子磁盘中,即使有相同的数据也无法再收回到根磁盘中。而目前针对虚拟磁盘的重复数据删除技术都没有考虑到虚拟磁盘格式的特殊性,而是直接将所有虚拟磁盘看成一个大的二进制文件处理,采用现有的在线重复数据删除方法,从而无法避免10性能下降的缺陷。
基于此,本发明提出了一种虚拟磁盘的冗余数据删除方法,该方法主要针对QC0W2格式的虚拟磁盘进行冗余数据删除,图1为本发明实施例一提供的一种虚拟磁盘的冗余数据删除方法的流程示意图,如图1所述,所述虚拟磁盘的冗余数据删除方法可以包括如下步骤步骤101,对QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取至少两个QC0W2格式的虚拟磁盘的文件信息;步骤102,根据至少两个虚拟磁盘的文件信息确定至少两个虚拟磁盘中是否存在冗余的数据;步骤103,若存在冗余的数据,则将冗余的数据存储在根磁盘中;步骤104,删除存储有冗余的数据的至少两个虚拟磁盘中的冗余的数据。由于QC0W2格式是一种特殊的磁盘格式,其内部主要包括文件头、LI表、引用计数表、L2表以及数据部分。其文件头包含了虚拟磁盘文件的基本性质,例如虚拟磁盘文件的版本信息;L1表和L2表是QC0W2格式的两级索引表,通过这两级索引表结构将数据组织起来,数据的查找也根据这两级索引表。不管是文件头、数据还是表,都是以cluster为单位存储的,按cluster对齐。其中,LI表中的每条表项存储一个L2表在虚拟磁盘文件中的偏移值,L2表中的每条表项存储一个数据簇cluster的偏移值;引用计数表则记录了每个cluster的使用情况,当某个cluster对应的引用计数表中的值为O时,证明该cluster已无用,但是QC0W2格式不提供删除的方法,只能标记为空闲(即在引用计数表中标记为0),当有新数据存储时则优先存储在这些空闲的cluster中。本发明实施例中,在对虚拟磁盘进行冗余数据删除前,首先需判断QC0W2格式的同一根磁盘下的至少两个虚拟磁盘分别对应的虚拟机的运行状态,并且只对运行状态为闲置、暂停或关闭的虚拟机所对应的虚拟磁盘进行冗余数据的删除操作,因此,可以保证对虚拟磁盘进行冗余数据的删除操作过程不会影响用户对虚拟机的使用。由于QC0W2格式的虚拟磁盘上所存储的文件在物理计算机的角度上看是一个二进制文件,其内部的数据以cluster为单位进行存储,因此,当确认QC0W2格式的同一根磁盘下的至少两个虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭时,再对该至少两个虚拟磁盘进行磁盘数据的分析处理,以获取至少两个虚拟磁盘的编号、与编号对应的虚拟磁盘中每个簇cluster的偏移地址和与cluster的偏移地址对应的数据等文件信息,其中,与cluster的偏移地址对应的数据为cluster中存储的数据。获取到上述至少两个虚拟磁盘的文件信息后,则可以根据至少两个虚拟磁盘的文件信息确定至少两个虚拟磁盘中是否存在冗余的数据,在本实施例中,通过对各虚拟磁盘的文件信息中数据cluster的比较而确定至少两个虚拟磁盘中是否存在冗余的数据,例如,如果各虚拟磁盘的文件信息中都存在相同的数据cluster或达到预设阈值个数的虚拟磁盘的文件信息中存在相同的数据cluster,则可以认为对应的虚拟磁盘中存在冗余的数据,即各虚拟磁盘的文件信息中存在的相同的数据cluster为对应的虚拟磁盘中冗余的数据,并根据文件信息确定与该冗余数据对应的至少两个虚拟磁盘的编号、每个存储有冗余的数据的虚拟磁盘中与冗余的数据对应的cluster的偏移地址,在本实施例中,可以将上述确定的冗余的数据、存储有冗余的数据的至少两个虚拟磁盘的编号、每个存储有冗余的数据的虚拟磁盘中与冗余的数据对应的cluster的偏移地址作为冗余数据的识别结果进行存储。并将冗余的数据在根磁盘中存储,然后通过根据文件信息确定的存储有冗余的数据的至少两个虚拟磁盘的编号、每个存储有冗余的数据的虚拟磁盘中与冗余的数据对应的cluster的偏移地址删除存储有冗余的数据的至少两个虚拟磁盘中的冗余的数据。从而实现了对冗余的数据的删除。在本发明实施例中,通过后处理冗余数据删除的方法,即在存储数据并完成备份之后,对运行状态为闲置、暂停或关闭的虚拟机所对应的虚拟磁盘上的冗余数据进行分析和删除,从而不会影响虚拟机的正常使用,并且也不会影响到虚拟机的IO性能;并在对数据进行分析和删除过程中,充分考虑到了 QC0W2格式的虚拟磁盘的特性,将磁盘数据按照原有的数据cluster进行划分比较,能够保持原有虚拟磁盘链的衍生关系,给用户透明的体验。进一步的,在上述实施例的基础上,在步骤103之后,还可以包括记录根磁盘中存储冗余的数据的cluster的偏移地址。由于QC0W2格式的虚拟磁盘的数据存储模式都是以cluster为单位对数据进行存储,而每一个数据cluster都有其存储的磁盘的对应偏移地址,因此,冗余的数据也是以cluster为单位在根磁盘中存储,在将冗余的数据在根磁盘中存储时,一并记录其在根磁盘中的偏移地址,同时在冗余数据的识别结果也进行相应的记录。进一步的,在上述实施例的基础上,在步骤104之后,还包括在每个存储有冗余的数据的虚拟磁盘的L2表中将与冗余的数据对应的cluster的偏移地址替换为根磁盘中存储冗余的数据的cluster的偏移地址,并添加用于表示冗余的数据的cluster的偏移地址指向根磁盘的标识。在上述任一实施例中,所述步骤101具体可以包括对至少两个虚拟磁盘分别进行解析,以获取各虚拟磁盘的两级索引表,其中,两级索引表包括LI表和L2表;分别遍历各虚拟磁盘的LI表,并记录LI表中所有非零项所对应的L2表的偏移地址;根据所有非零项所对应的L2表的偏移地址,遍历所有非零项所对应的L2表,并记录各L2表中所有非零项所对应的cluster的偏移地址;根据每个cluster的偏移地址,读取与cluster的偏移地址对应的数据。在上述任一实施例中,所述步骤102具体可以包括对至少两个虚拟磁盘的文件信息中与各cluster的偏移地址对应的数据分别进行消息摘要算法第五版MD5编码处理,以分别获取编码后的文件信息,各编码后的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据的MD5码;将至少两个虚拟磁盘编码后的文件信息进行比较,若有不小于预设磁盘数的虚拟磁盘编码后的文件信息中都存在相同的MD5码,则确定不小于预设磁盘数的虚拟磁盘中存在冗余的数据,冗余的数据为与相同MD5码对应的数据,预设磁盘数为不小于2的自然数。在本实施例中,为了能够在较短时间内完成冗余数据的识别和删除,而采用将各虚拟磁盘中与各cluster的偏移地址对应的数据分别进行MD5编码,然后对各虚拟磁盘中对应数据的MD5码进行比较,从而提高了数据识别效率。具体的,本实施例可以采用128位MD5算法,两个哈希码产生冲突的概率为2-128,假设同一根磁盘下N个虚拟磁盘上的数据cluster要比较,那么只有当数据cluster的字节达到264时才可能产生一个冲突,这种冲突情况在常规使用中基本不会出现。同时,本实施例考虑到冗余数据的回收率,而通过预设磁盘数的方式来判定是否存在冗余的数据,即只要达到预设磁盘数的磁盘中存在相同的数据就可以认为存在冗余的数据,其中,预设的磁盘数可以是一个大于2而小于或等于磁盘总数的自然数。具体的,本实施例可以通过红黑树数据结构实现一种基于红黑树的数据比较算法,从而通过该算法实现统计相同数据cluster出现的次数。红黑树是一种自平衡的二叉树,具有良好的查找和插入时间复杂度和统计性能,其每个结点标记为红色或者黑色,根据结点标记的规律,红黑树中从根结点到每个叶子结点的路径长度相差不到2倍。以下通过一个具体的实施例说明利用红黑树实现比较算法的步骤首先建立一颗红黑树,当前没有任何结点,然后对每个参与比较的各虚拟磁盘的文件信息进行遍历,对于每个数据cluster的MD5码,在树上查找key值与其相同的结点,若找到,则将这个数据cluster对应的偏移地址写入该节点的地址记录(address)中,增加该结点的次数(times);若没有找到,则将这个数据cluster的MD5码和对应的偏移地址封装成一个结点插入到树中。另外,根据冗余数据的回收率,还可以对这个算法进行优化,即当参与比较的记录虚拟磁盘信息的文件的数目较少,不可能出现新的满足条件的重复数据cluster的时候则停止插入操作;当发现树中的结点在之后的比较过程中也不可能达到冗余回收率时,删除该结点。最终从红黑树上得到满足条件的所有的重复的数据cluster以及与该数据cluster的相关信息,如该数据cluster所在虚拟磁盘的编号、与所述编号对应的虚拟磁盘中数据cluster的偏移地址等。因此,当冗余回收比例越高,比较的次数则越少,而当冗余数据的回收比例为100%的时候,算法的比较次数最少。由于同一根磁盘衍生出的虚拟磁盘对应的虚拟机具有统一的部署环境,按相同的顺序安装相同的软件和存储相同的数据时,数据都是顺序存放,因此,相同的数据在同一根磁盘下不同的虚拟磁盘中的逻辑地址也几乎相同,所以还可以采用将虚拟磁盘编码后的文件信息中相同的偏移地址对应的数据的MD5码进行比较,若有预设的磁盘数的文件信息中也都存在相同的MD5码,则也可以认为相应的虚拟磁盘中存在冗余的数据,因此,该方法可以有效的提高冗余数据的识别效率。优选地,当冗余数据的回收率为100%时,则表示要参与比较的所有虚拟磁盘编码后的文件信息中都存在相同的偏移地址,且与相同的偏移地址对应的数据的MD5码也相同,此时,才可以确定对应的虚拟磁盘中存在冗余的数据,其冗余的数据为与相同的偏移地址对应的数据。根据上述冗余数据的识别结果,对于确定为冗余数据的数据cluster,将其复制一份到根磁盘中,然后删除与冗余数据对应的各虚拟磁盘中的冗余的数据cluster。本实施例,将冗余数据复制到根磁盘的过程称为冗余数据回收过程,具体可以按照如下流程操作首先,对每个确定为冗余数据的数据cluster,遍历根磁盘的L2表,在L2表中找到值为O的表项,将确定为冗余数据的数据cluster拷贝到根磁盘的末尾,并将该表项的值修改为数据cluster所在的偏移地址;如果没有找到值为O的L2表项,说明目前没有空闲的L2表项,则在根磁盘的末尾创建一个L2表,将新创建的L2表的偏移地址写入遍历LI表时找到的第一个值为O的表项中,若LI表中没有找到值为O的表项,则在LI表的末尾创建一个新的LI表,将第一个表项中填入新建的L2表的偏移值,其他表项填零,然后将确定为冗余数据的数据cluster拷贝到根磁盘的末尾,在该新创建的L2表的第一个L2表项填写所述数据cluster的偏移地址。在对冗余数据进行删除时,则首先对上述实施例中存储的冗余数据的识别结果进行分析整理,即将冗余数据的识别结果中的记录按虚拟磁盘的编号分类组织,从而得到每个虚拟磁盘分别需要删除的冗余数据cluster、各冗余数据cluster所对应的偏移地址和各冗余数据cluster存储在根磁盘中对应的偏移地址,之后对于每个虚拟磁盘中所有需要删除的冗余数据cluster,按其在虚拟磁盘中的偏移地址由小到大进行排序,然后根据每个虚拟磁盘排序后的冗余数据cluster,逐个删除该虚拟磁盘中所有的冗余数据cluster,并且调整各虚拟磁盘的两级索引表,使虚拟磁盘的格式不被破坏。由于QC0W2格式的虚拟磁盘中的一个cluster的大小默认为64KB,而Linux常用的Ext3文件系统中每个块的大小默认为4KB,cluster的大小是块大小的整数倍,因此删除一个cluster的时候可直接删除对应块,既不会存在磁盘碎片的问题,又能够快速删除一个cluster。以下Ext3文件系统删除数据cluster为例说明删除数据cluster的具体方法由于在Ext3文件系统中,每个文件都由一个索引节点inode来描述,inode中包含文件数据存储的信息,即文件块索引列表,也就是指向数据块的指针,共15个,前12个指针直接指向数据块,称为直接指针;第13个指针称为一级间址(single indirect),其指向的数据块中存储的全是直接指针,这些直接指针指向存储文件数据的数据块;第14个指针为二级间址(double indirect),指向的数据块中存储的全是一级间址指针;第15个指针为三级间址(triple indirect),指向的数据块中存储的全是二级间址指针。因此,如果删除文件中的某个块的数据只要调整好inode中块指针以及文件大小、修改时间等内容,再释放删除的块即可。由于Linux系统的VFS结构,使得Ext3文件系统的功能通过VFS的接口实现,因此,本实施例中对VFS扩展了一个delete_block的接口,并在Ext3文件系统中实现该接口,并新增系统调用该接口实现对指定块的删除功能。实现这个功能的算法的主要思想是首先通过计算得到需要删除的块在文件块索引列表中的索引,通过索引找到指向该磁盘块的指针,释放该块的空间。然后将该块之后的索引指针向前移,最后一个指针的值赋零。直接指针可通过直接的赋值实现指针前移;非直接指针需要将指针指向的块内容读入一个指针数组中,将该数组内的指针依次向前移,之后再将处理好后的数组内容写回该块中;对于多级间址指针同样处理,找到最后一级的指针块,读入数组中,处理后写回磁盘。具体的,上述实施例中所述的调整各虚拟磁盘的两级索引表具体可以包括在此需要说明的是,在上述实施例中已介绍有关QC0W2格式的虚拟磁盘的特性,即在QC0W2格式的虚拟磁盘中,不管是数据还是表,都是以cluster为单位存储的,按cluster对齐,所以对于L2表来说,其本身也是一个cluster,如果某一 L2表的偏移地址在冗余的数据cluster的后面,则也需要对其偏移地址进行调整,因此,在本实施例中,根据冗余的数据cluster的偏移地址,首先需遍历LI表,若LI表中的表项所指向的偏移地址大于需要删除的簇的偏移地址,则将该LI表中的表项所指向的偏移地址减小一个簇的大小;若小于,则不用改动,然后遍历所有的L2表,如果L2表中的表项所指向的偏移地址大于该数据cluster对应的偏移地址,则将该L2表中的表项所指向的偏移地址减小一个簇的大小;若小于,则不用改动;若等于该数据cluster对应的偏移地址,则说明该L2表项为指向该簇的索引,此时,将该L2表项所对应的偏移地址替换为冗余的数据cluster在根磁盘中对应的偏移地址,然后删除该冗余的数据cluster。由于该数据cluster已经不是在本虚拟磁盘中,因此,需要对替换后的偏移地址进行特殊标识,用于标记冗余的数据cluster的偏移地址指向根磁盘。根据QC0W2格式的定义,其LI表和L2表的表项均占8字节,64位。每个表项的前两位是标记位,分别是元数据标记和加密标记,后面是实际的偏移值。一个虚拟磁盘文件的大小一般不会超过几个TB大小,描述偏移值所需的位数一般不会超过50位,因此,可以占用64位中的第三位作为标记,而对虚拟磁盘的使用不会产生影响。本发明实施例还引入了自动控制技术,即通过自动探测虚拟磁盘对应的虚拟机的运行状态决定是否启动以及对哪些虚拟磁盘启动冗余数据删除过程,并且在启动冗余数据删除后,即在进行冗余数据删除的过程中,如果探测到某个虚拟机需要运行的指令时,则可以控制与该虚拟机对应的虚拟磁盘迅速退出冗余数据删除过程,从而不会影响虚拟机的正常使用。图2为本发明实施例二提供的一种虚拟磁盘的冗余数据删除系统的结构示意图,如图2所示,虚拟磁盘的冗余数据删除系统可以包括预处理模块201,用于对QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取至少两个QC0W2格式的虚拟磁盘的文件信息,所述至少两个虚拟磁盘的文件信息分别包括虚拟磁盘的编号、与编号对应的虚拟磁盘中每个簇cluster的偏移地址和与cluster的偏移地址对应的数据,其中,与cluster的偏移地址对应的数据为所述cluster中存储的数据。在本发明实施例,至少两个QC0W2格式的虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭;冗余数据确定模块202,用于根据至少两个虚拟磁盘的文件信息确定至少两个虚拟磁盘中是否存在冗余的数据,若至少两个虚拟磁盘中存在冗余的数据,则确定冗余的数据、存储有冗余的数据的至少两个虚拟磁盘的编号、每个存储有冗余的数据的虚拟磁盘中与冗余的数据对应的cluster的偏移地址;存储模块203,用于将冗余的数据存储在根磁盘中;冗余数据删除模块204,用于根据存储有冗余的数据的至少两个虚拟磁盘的编号、每个存储有冗余的数据的虚拟磁盘中与冗余的数据对应的cluster的偏移地址删除存储有冗余的数据的至少两个虚拟磁盘中的冗余的数据。本实施例的虚拟磁盘的冗余数据删除系统可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。进一步的,上述虚拟磁盘的冗余数据删除系统还可以包括记录模块,用于记录根磁盘中存储冗余的数据的cluster的偏移地址;替换模块,用于在每个存储有冗余的数据的虚拟磁盘的L2表中将与冗余的数据对应的cluster的偏移地址替换为根磁盘中存储冗余的数据的cluster的偏移地址,并添加用于表示冗余的数据的cluster的偏移地址指向根磁盘的标识。具体的,预处理模块具体可以用于对至少两个虚拟磁盘分别进行解析,以获取各虚拟磁盘的两级索引表,所述两级索引表包括LI表和L2表;分别遍历各虚拟磁盘的LI表,并记录LI表中所有非零项所对应的L2表的偏移地址;根据所有非零项所对应的L2表的偏移地址,遍历所有非零项所对应的L2表,并记录各L2表中所有非零项所对应的cluster的偏移地址;根据每个cluster的偏移地址,读取与cluster的偏移地址对应的数据;冗余数据确定模块具体可以用于对至少两个虚拟磁盘的文件信息中与各cluster的偏移地址对应的数据分别进行消息摘要算法第五版MD5编码处理,以分别获取编码后的文件信息,各编码后的文件信息分别包括虚拟磁盘的编号、与编号对应的虚拟磁盘中每个簇cluster的偏移地址和与cluster的偏移地址对应的数据的MD5码;将至少两个虚拟磁盘编码后的文件信息进行比较,若有不小于预设磁盘数的虚拟磁盘编码后的文件信息中都存在相同的MD5码,则确定不小于预设磁盘数的虚拟磁盘中存在冗余的数据,其中,冗余的数据为与相同MD5码对应的数据,预设磁盘数为不小于2的自然数。本领域普通技术人员可以理解实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种虚拟磁盘的冗余数据删除方法,其特征在于,所述方法包括对快速仿真器写时复制QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取所述至少两个QC0W2格式的虚拟磁盘的文件信息,所述至少两个虚拟磁盘的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据,与所述cluster的偏移地址对应的数据为所述cluster中存储的数据;其中,所述至少两个QC0W2格式的虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭;根据所述至少两个虚拟磁盘的文件信息确定所述至少两个虚拟磁盘中是否存在冗余的数据,若所述至少两个虚拟磁盘中存在冗余的数据,则确定冗余的数据、存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址;将所述冗余的数据存储在所述根磁盘中;根据所述存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址删除存储有所述冗余的数据的至少两个虚拟磁盘中的所述冗余的数据。
2.根据权利要求1所述的方法,其特征在于,所述将所述冗余的数据存储在所述根磁盘中之后,还包括记录所述根磁盘中存储所述冗余的数据的cluster的偏移地址。
3.根据权利要求2所述的方法,其特征在于,所述根据所述存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址删除存储有所述冗余的数据的至少两个虚拟磁盘中的所述冗余的数据之后,还包括在每个存储有所述冗余的数据的虚拟磁盘的L2表中将与所述冗余的数据对应的cluster的偏移地址替换为所述根磁盘中存储所述冗余的数据的cluster的偏移地址,并添加用于表示所述冗余的数据的cluster的偏移地址指向根磁盘的标识。
4.根据权利要求1 3任一项所述的方法,其特征在于,所述对QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取所述至少两个QC0W2格式的虚拟磁盘的文件信息,包括对所述至少两个虚拟磁盘分别进行解析,以获取各虚拟磁盘的两级索引表,所述两级索引表包括LI表和L2表;分别遍历所述各虚拟磁盘的LI表,并记录LI表中所有非零项所对应的L2表的偏移地址;根据所述所有非零项所对应的L2表的偏移地址,遍历所述所有非零项所对应的L2表,并记录各L2表中所有非零项所对应的cluster的偏移地址;根据每个cluster的偏移地址,读取与所述cluster的偏移地址对应的数据。
5.根据权利要求1 3任一项所述的方法,其特征在于,所述根据所述至少两个虚拟磁盘的文件信息确定所述至少两个虚拟磁盘中是否存在冗余的数据,包括对所述至少两个虚拟磁盘的文件信息中与各cluster的偏移地址对应的数据分别进行消息摘要算法第五版MD5编码处理,以分别获取编码后的文件信息,所述各编码后的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据的MD5码;将所述至少两个虚拟磁盘编码后的文件信息进行比较,若有不小于预设磁盘数的虚拟磁盘编码后的文件信息中都存在相同的MD5码,则确定所述不小于预设磁盘数的虚拟磁盘中存在冗余的数据,所述冗余的数据为与所述相同MD5码对应的数据,所述预设磁盘数为不小于2的自然数。
6.根据权利要求5所述的方法,其特征在于,所述预设磁盘数等于所述至少两个虚拟磁盘的总个数。
7.根据权利要求6所述的方法,其特征在于,所述若有不小于预设磁盘数的虚拟磁盘编码后的文件信息中都存在相同的MD5码,则确定所述不小于预设磁盘数的虚拟磁盘中存在冗余的数据,所述冗余的数据为与所述相同MD5码对应的数据,包括若所述至少两个虚拟磁盘编码后的文件信息中都存在相同的偏移地址,且与所述相同的偏移地址对应的数据的MD5码也相同,则确定所述至少两个虚拟磁盘中存在冗余的数据,所述冗余的数据为与所述相同的偏移地址对应的数据。
8.—种虚拟磁盘的冗余数据删除系统,其特征在于,包括预处理模块,用于对快速仿真器写时复制QC0W2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取所述至少两个QC0W2格式的虚拟磁盘的文件信息,所述至少两个虚拟磁盘的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据,与所述cluster的偏移地址对应的数据为所述cluster中存储的数据;其中,所述至少两个QC0W2格式的虚拟磁盘分别对应的虚拟机的运行状态均为闲置、暂停或关闭;冗余数据确定模块,用于根据所述至少两个虚拟磁盘的文件信息确定所述至少两个虚拟磁盘中是否存在冗余的数据,若所述至少两个虚拟磁盘中存在冗余的数据,则确定冗余的数据、存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址;存储模块,用于将所述冗余的数据存储在所述根磁盘中;冗余数据删除模块,用于根据所述存储有所述冗余的数据的至少两个虚拟磁盘的编号、每个存储有所述冗余的数据的虚拟磁盘中与所述冗余的数据对应的cluster的偏移地址删除存储有所述冗余的数据的至少两个虚拟磁盘中的所述冗余的数据。
9.根据权利要求8所述的系统,其特征在于,还包括记录模块,用于记录所述根磁盘中存储所述冗余的数据的cluster的偏移地址;替换模块,用于在每个存储有所述冗余的数据的虚拟磁盘的L2表中将与所述冗余的数据对应的cluster的偏移地址替换为所述根磁盘中存储所述冗余的数据的cluster的偏移地址,并添加用于表示所述冗余的数据的cluster的偏移地址指向根磁盘的标识。
10.根据权利要求8或9所述的系统,其特征在于所述预处理模块具体用于对所述至少两个虚拟磁盘分别进行解析,以获取各虚拟磁盘的两级索引表,所述两级索引表包括LI表和L2表;分别遍历所述各虚拟磁盘的LI表,并记录LI表中所有非零项所对应的L2表的偏移地址;根据所述所有非零项所对应的L2表的偏移地址,遍历所述所有非零项所对应的L2表,并记录各L2表中所有非零项所对应的cluster的偏移地址;根据每个cluster的偏移地址,读取与所述cluster的偏移地址对应的数据;所述冗余数据确定模块具体用于对所述至少两个虚拟磁盘的文件信息中与各cluster的偏移地址对应的数据分别进行消息摘要算法第五版MD5编码处理,以分别获取编码后的文件信息,所述各编码后的文件信息分别包括虚拟磁盘的编号、与所述编号对应的虚拟磁盘中每个簇cluster的偏移地址和与所述cluster的偏移地址对应的数据的MD5码; 将所述至少两个虚拟磁盘编码后的文件信息进行比较,若有 不小于预设磁盘数的虚拟磁盘编码后的文件信息中都存在相同的MD5码,则确定所述不小于预设磁盘数的虚拟磁盘中存在冗余的数据,所述冗余的数据为与所述相同MD5码对应的数据,所述预设磁盘数为不小于2的自然数。
全文摘要
本发明提供一种虚拟磁盘的冗余数据删除方法及系统,所述方法包括对QCOW2格式的同一根磁盘下至少两个虚拟磁盘进行预处理,分别获取至少两个QCOW2格式的虚拟磁盘的文件信息;根据至少两个虚拟磁盘的文件信息确定至少两个虚拟磁盘中是否存在冗余的数据;若存在冗余的数据,则将冗余的数据存储在根磁盘中;删除存储有冗余的数据的至少两个虚拟磁盘中的冗余的数据。在本发明实施例中,通过后处理冗余数据删除的方法,对运行状态为闲置、暂停或关闭的虚拟机所对应的虚拟磁盘上的冗余数据进行分析和删除,从而不会影响虚拟机的正常使用,并且也不会影响到虚拟机的IO性能。
文档编号G06F12/02GK102999433SQ20121047743
公开日2013年3月27日 申请日期2012年11月21日 优先权日2012年11月21日
发明者沃天宇, 高丽君, 马殿富, 安琪 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1