基于qcow2的虚拟磁盘使用空间的计算方法、虚拟设备的制造方法

文档序号:9708158阅读:924来源:国知局
基于qcow2的虚拟磁盘使用空间的计算方法、虚拟设备的制造方法【
技术领域
】[0001]本发明属于计算机
技术领域
,更具体涉及一种基于qcow2的虚拟机的虚拟磁盘中使用空间的计算方法及一种虚拟设备。【
背景技术
】[0002]在云计算领域中,经常要在一台主机上创建多台虚拟机,这样可以将多台虚拟机分配给不同的人使用,或者用其中的虚拟机做一些特殊工作,通常情况下主机使用的是一种虚拟化软件,例如qemu程序来创建虚拟机,对于主机来说,每个虚拟机就是一个qemu程序,qemu程序负责虚拟cpu,虚拟磁盘,以及鼠标,键盘等一台PC机不可缺少的部分,虚拟机使用者感知不到这台PC是虚拟出来的。[0003]虚拟机是虚拟出来的PC机,里面同样可以运行操作系统,比如windows、linux系统,同样可以在系统中安装各种软件,可以像正常物理实体PC机一样使用虚拟出来的磁盘。[0004]qemu虚拟机运行在主机上,主机为qemu虚拟机的运行提供了最底层的支持,比如可以提供一个主机上的qcow2(—种虚拟磁盘的格式)格式的文件,qemu虚拟机可以用该格式的文件虚拟出一块磁盘给qemu虚拟机使用,这样从qemu虚拟机中的操作系统看这是一块磁盘,从主机操作系统中看这是一个文件,当要获取虚拟机中这块虚拟磁盘的使用情况时,由于它是主机中的一个文件,因此可以使用常用的获取文件大小的方法就可以了,比如通过fstat函数获取文件有多少块number,通过number*512bytes就能得到当前虚拟机的虚拟磁盘已经使用了多少空间。[0005]如果主机为qemu虚拟机提供的不是一个文件,而是共享存储,或者说是主机的一个块设备,而不是一个文件,该块设备也是按照qcow2格式来组成虚拟机中的磁盘,这时,由于对于主机来说不是文件而是一个块设备了,就不能使用上述方法计算虚拟机中磁盘的大小了。那么如何高效准确地获得由文件或其他设备虚拟形成的磁盘的使用空间的大小是目前急需要解决的技术问题。【
发明内容】[0006](一)要解决的技术问题[0007]本发明要解决的技术问题是如何高效准确地获得由文件或其他设备虚拟形成的磁盘的使用空间的大小。[0008](二)技术方案[0009]为了解决上述技术问题,本发明提供一种基于qC0W2的虚拟磁盘使用空间的计算方法,所述方法包括以下步骤:[0010]S1、根据簇的偏移位数计算簇的大小;[0011]S2、对于引用表对应的每个引用块,利用引用表中记录的该引用块的偏移地址找到对应的引用块;其中每个所述引用块均包括多个表项;[0012]S3、统计所有引用块中内容不为空的所述表项的数量,并利用下面公式计算虚拟磁盘中使用的空间:虚拟磁盘中使用的空间=所有引用块中内容不为空的所述表项的数量*簇的大小。[0013]优选地,所述步骤S1之后、S2之前,所述方法还包括以下步骤:[0014]根据引用表的基础数量以及簇的偏移位数计算引用表对应的引用块的数量。[0015]优选地,所述引用块的数量利用如下公式计算:[0016]refcount_table_entry=refcount_table_clusters〈〈(cluster_bites_3)[0017]式中,refcount_table_entry为所述引用块的数量,refcount_table_clusters为所述引用表的基础数量,单位是个,cluster_bites为所述簇的偏移位数,〈〈表示左移的意思。[0018]优选地,所述步骤S2之后、S3之前,所述方法还包括以下步骤:[0019]对于每一个所述引用块,根据所述引用块的大小以及所述表项的预定大小计算每个所述引用块中所述表项的数量。[0020]优选地,所述表项的数量为所述引用块的大小除以所述表项的预定大小得到的值。[0021]优选地,所述步骤S2中利用引用表中记录的该引用块的偏移地址找到对应的一个引用块具体为:从所述偏移地址开始读取引用块预定大小的数据形成对应的所述引用块。[0022]优选地,所述引用块预定大小与所述簇的大小相等。[0023]优选地,所述步骤S1中利用如下公式计算所述簇的大小:[0024]cluster__size=l〈〈cluster_bits[0025]式中,01118丨61'_8126为所述簇的大小,01118丨61'_13;^8为所述簇的偏移位数,〈〈表示左移的意思。[0026]—种虚拟机设备,所述虚拟机设备用于计算虚拟磁盘中的使用空间,包括簇大小计算模块、引用块搜索模块以及磁盘使用空间计算模块;[0027]所述簇大小计算模块用于根据簇的偏移位数计算簇的大小;[0028]所述引用块搜索模块用于利用引用表中记录的偏移地址找到引用表对应的多个引用块;[0029]所述磁盘使用空间计算模块用于统计所有引用块中内容不为空的所述表项的数量,并利用下面公式计算虚拟磁盘中使用的空间:虚拟磁盘中使用的空间=所有引用块中内容不为空的所述表项的数量*簇的大小。[0030]优选地,还包括引用块数量计算模块;所述引用块计算模块用于利用下面公式,根据所述引用表占用的基础数量以及簇的偏移的位数计算引用表中引用块的数量:[0031]refcount_table_entry=refcount_table_clusters〈〈(cluster_bites_3)[0032]式中,refcount_table_entry为所述引用块的数量,refcount_table_clusters为所述引用表的基础数量,单位是个,cluster_bites为所述簇的偏移位数,〈〈表示左移的意思。[0033]优选地,还包括表项数量计算模块,对于每一个所述引用块,所述表项数量计算模块用于根据所述引用块的大小以及所述表项的预定大小计算每个所述引用块中所述表项的数量。[0034]优选地,所述簇大小计算模块利用如下公式计算所述簇的大小:[0035]cluster__size=l〈〈cluster_bits[0036]式中,01118161'_8126为所述簇的大小,01118161'_13;^8为所述簇的偏移位数,〈〈表示左移的意思。[0037](三)有益效果[0038]本发明提供了一种基于qC0W2的虚拟磁盘使用空间的计算方法以及应用该方法计算虚拟磁盘使用空间的一种虚拟设备,本发明根据簇的偏移位数计算得到簇的大小,再根据引用表记录的偏移地址找到对应的引用块,之后统计所有引用块中内容不为空的表项的数量,最后根据簇的大小以及表项的数量计算得到虚拟磁盘中使用的空间大小,上述方案不仅可以计算由文件虚拟形成的磁盘的使用空间的大小,而且可以计算出由其他设备虚拟形成的磁盘的使用空间的大小,同时可以保证计算的效率和准确率。【附图说明】[0039]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0040]图1为本发明的基于qC0W2的虚拟磁盘使用空间的计算方法流程图。【具体实施方式】[0041]下面结合附图和实施例对本发明作进一步详细描述。以下实施例用于说明本发明,但不能用来限制本发明的范围。[0042]—种基于qC0W2的虚拟磁盘使用空间的计算方法,如图1所示,所述方法包括以下步骤:[0043]S1、根据簇的偏移位数计算簇的大小;[0044]S2、对于引用表对应的每个引用块,利用引用表中记录的该引用块的偏移地址找到对应的引用块;其中每个所述引用块均包括多个表项;[0045]此步骤中,引用表中包括多个引用块地址表项,并且在每个引用块地址表项中记录对应引用块的偏移地址;[0046]S3、统计所有引用块中内容不为空的所述表项的数量,并利用下面公式计算虚拟磁盘中使用的空间:虚拟磁盘中使用的空间=所有引用块中内容不为空的所述表项的数量*簇的大小。[0047]上述方法适用于利用qcow2格式组成的虚拟磁盘,不仅可以计算由文件虚拟形成的磁盘的使用空间的大小,而且可以计算出由其他设备,如块设备虚拟形成的磁盘的使用空间的大小,同时可以保证计算的效率和准确率。[0048]进一步地,在执行步骤S1之前,所述方法还包括读取信息的步骤:对于qcow2格式形成的虚拟磁盘来说,可以通过读取其头部信息获得计算磁盘使用空间的相关数据信息,具体为:[0049]1、读取每个簇的偏移位数,用cluSter_bitS表示;其中各个簇的偏移位数是相等的;[°°50]2、读取引用表的基础数量,用refcount_table_clusters表示,单位是个;[°°51]3、读取引用表在设备中的偏移地址refcount_tab1e_offset,用于找到引用表。[0052]进一步地,所述步骤SI之后、S2之前,所述方法还包括以下步骤:[0053]对于引用表,根据所述引用表的基础数量以及簇的偏移位数计算引用表中对应的引用块的数量。其中所述引用块的数量利用如下公式计算:[0054]refcount_table_entry=refcount_table_clusters〈〈(cluster_bites_3)[0055]式中,refcount_table_entry为所述引用块的数量对应的二进制数字,refcount_table_clusters为所述引用表的基础数量,单位是个,cluster_bites为所述簇的偏移位数,〈〈表示左移的意思。引用块的数量的单位是个。[0056]假设代;1^011111:_七&1316_(31118七6^当前第1页1 2 
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1