基于qcow2的虛擬磁盤使用空間的計算方法、虛擬設(shè)備的制造方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明屬于計算機
技術(shù)領(lǐng)域:
,更具體涉及一種基于qcow2的虛擬機的虛擬磁盤中使用空間的計算方法及一種虛擬設(shè)備?!?br>背景技術(shù):
】[0002]在云計算領(lǐng)域中,經(jīng)常要在一臺主機上創(chuàng)建多臺虛擬機,這樣可以將多臺虛擬機分配給不同的人使用,或者用其中的虛擬機做一些特殊工作,通常情況下主機使用的是一種虛擬化軟件,例如qemu程序來創(chuàng)建虛擬機,對于主機來說,每個虛擬機就是一個qemu程序,qemu程序負(fù)責(zé)虛擬cpu,虛擬磁盤,以及鼠標(biāo),鍵盤等一臺PC機不可缺少的部分,虛擬機使用者感知不到這臺PC是虛擬出來的。[0003]虛擬機是虛擬出來的PC機,里面同樣可以運行操作系統(tǒng),比如windows、linux系統(tǒng),同樣可以在系統(tǒng)中安裝各種軟件,可以像正常物理實體PC機一樣使用虛擬出來的磁盤。[0004]qemu虛擬機運行在主機上,主機為qemu虛擬機的運行提供了最底層的支持,比如可以提供一個主機上的qcow2(—種虛擬磁盤的格式)格式的文件,qemu虛擬機可以用該格式的文件虛擬出一塊磁盤給qemu虛擬機使用,這樣從qemu虛擬機中的操作系統(tǒng)看這是一塊磁盤,從主機操作系統(tǒng)中看這是一個文件,當(dāng)要獲取虛擬機中這塊虛擬磁盤的使用情況時,由于它是主機中的一個文件,因此可以使用常用的獲取文件大小的方法就可以了,比如通過fstat函數(shù)獲取文件有多少塊number,通過number*512bytes就能得到當(dāng)前虛擬機的虛擬磁盤已經(jīng)使用了多少空間。[0005]如果主機為qemu虛擬機提供的不是一個文件,而是共享存儲,或者說是主機的一個塊設(shè)備,而不是一個文件,該塊設(shè)備也是按照qcow2格式來組成虛擬機中的磁盤,這時,由于對于主機來說不是文件而是一個塊設(shè)備了,就不能使用上述方法計算虛擬機中磁盤的大小了。那么如何高效準(zhǔn)確地獲得由文件或其他設(shè)備虛擬形成的磁盤的使用空間的大小是目前急需要解決的技術(shù)問題?!?br/>發(fā)明內(nèi)容】[0006](一)要解決的技術(shù)問題[0007]本發(fā)明要解決的技術(shù)問題是如何高效準(zhǔn)確地獲得由文件或其他設(shè)備虛擬形成的磁盤的使用空間的大小。[0008](二)技術(shù)方案[0009]為了解決上述技術(shù)問題,本發(fā)明提供一種基于qC0W2的虛擬磁盤使用空間的計算方法,所述方法包括以下步驟:[0010]S1、根據(jù)簇的偏移位數(shù)計算簇的大??;[0011]S2、對于引用表對應(yīng)的每個引用塊,利用引用表中記錄的該引用塊的偏移地址找到對應(yīng)的引用塊;其中每個所述引用塊均包括多個表項;[0012]S3、統(tǒng)計所有引用塊中內(nèi)容不為空的所述表項的數(shù)量,并利用下面公式計算虛擬磁盤中使用的空間:虛擬磁盤中使用的空間=所有引用塊中內(nèi)容不為空的所述表項的數(shù)量*簇的大小。[0013]優(yōu)選地,所述步驟S1之后、S2之前,所述方法還包括以下步驟:[0014]根據(jù)引用表的基礎(chǔ)數(shù)量以及簇的偏移位數(shù)計算引用表對應(yīng)的引用塊的數(shù)量。[0015]優(yōu)選地,所述引用塊的數(shù)量利用如下公式計算:[0016]refcount_table_entry=refcount_table_clusters〈〈(cluster_bites_3)[0017]式中,refcount_table_entry為所述引用塊的數(shù)量,refcount_table_clusters為所述引用表的基礎(chǔ)數(shù)量,單位是個,cluster_bites為所述簇的偏移位數(shù),〈〈表示左移的意思。[0018]優(yōu)選地,所述步驟S2之后、S3之前,所述方法還包括以下步驟:[0019]對于每一個所述引用塊,根據(jù)所述引用塊的大小以及所述表項的預(yù)定大小計算每個所述引用塊中所述表項的數(shù)量。[0020]優(yōu)選地,所述表項的數(shù)量為所述引用塊的大小除以所述表項的預(yù)定大小得到的值。[0021]優(yōu)選地,所述步驟S2中利用引用表中記錄的該引用塊的偏移地址找到對應(yīng)的一個引用塊具體為:從所述偏移地址開始讀取引用塊預(yù)定大小的數(shù)據(jù)形成對應(yīng)的所述引用塊。[0022]優(yōu)選地,所述引用塊預(yù)定大小與所述簇的大小相等。[0023]優(yōu)選地,所述步驟S1中利用如下公式計算所述簇的大小:[0024]cluster__size=l〈〈cluster_bits[0025]式中,01118丨61'_8126為所述簇的大小,01118丨61'_13;^8為所述簇的偏移位數(shù),〈〈表示左移的意思。[0026]—種虛擬機設(shè)備,所述虛擬機設(shè)備用于計算虛擬磁盤中的使用空間,包括簇大小計算模塊、引用塊搜索模塊以及磁盤使用空間計算模塊;[0027]所述簇大小計算模塊用于根據(jù)簇的偏移位數(shù)計算簇的大??;[0028]所述引用塊搜索模塊用于利用引用表中記錄的偏移地址找到引用表對應(yīng)的多個引用塊;[0029]所述磁盤使用空間計算模塊用于統(tǒng)計所有引用塊中內(nèi)容不為空的所述表項的數(shù)量,并利用下面公式計算虛擬磁盤中使用的空間:虛擬磁盤中使用的空間=所有引用塊中內(nèi)容不為空的所述表項的數(shù)量*簇的大小。[0030]優(yōu)選地,還包括引用塊數(shù)量計算模塊;所述引用塊計算模塊用于利用下面公式,根據(jù)所述引用表占用的基礎(chǔ)數(shù)量以及簇的偏移的位數(shù)計算引用表中引用塊的數(shù)量:[0031]refcount_table_entry=refcount_table_clusters〈〈(cluster_bites_3)[0032]式中,refcount_table_entry為所述引用塊的數(shù)量,refcount_table_clusters為所述引用表的基礎(chǔ)數(shù)量,單位是個,cluster_bites為所述簇的偏移位數(shù),〈〈表示左移的意思。[0033]優(yōu)選地,還包括表項數(shù)量計算模塊,對于每一個所述引用塊,所述表項數(shù)量計算模塊用于根據(jù)所述引用塊的大小以及所述表項的預(yù)定大小計算每個所述引用塊中所述表項的數(shù)量。[0034]優(yōu)選地,所述簇大小計算模塊利用如下公式計算所述簇的大小:[0035]cluster__size=l〈〈cluster_bits[0036]式中,01118161'_8126為所述簇的大小,01118161'_13;^8為所述簇的偏移位數(shù),〈〈表示左移的意思。[0037](三)有益效果[0038]本發(fā)明提供了一種基于qC0W2的虛擬磁盤使用空間的計算方法以及應(yīng)用該方法計算虛擬磁盤使用空間的一種虛擬設(shè)備,本發(fā)明根據(jù)簇的偏移位數(shù)計算得到簇的大小,再根據(jù)引用表記錄的偏移地址找到對應(yīng)的引用塊,之后統(tǒng)計所有引用塊中內(nèi)容不為空的表項的數(shù)量,最后根據(jù)簇的大小以及表項的數(shù)量計算得到虛擬磁盤中使用的空間大小,上述方案不僅可以計算由文件虛擬形成的磁盤的使用空間的大小,而且可以計算出由其他設(shè)備虛擬形成的磁盤的使用空間的大小,同時可以保證計算的效率和準(zhǔn)確率?!靖綀D說明】[0039]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0040]圖1為本發(fā)明的基于qC0W2的虛擬磁盤使用空間的計算方法流程圖。【具體實施方式】[0041]下面結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步詳細(xì)描述。以下實施例用于說明本發(fā)明,但不能用來限制本發(fā)明的范圍。[0042]—種基于qC0W2的虛擬磁盤使用空間的計算方法,如圖1所示,所述方法包括以下步驟:[0043]S1、根據(jù)簇的偏移位數(shù)計算簇的大??;[0044]S2、對于引用表對應(yīng)的每個引用塊,利用引用表中記錄的該引用塊的偏移地址找到對應(yīng)的引用塊;其中每個所述引用塊均包括多個表項;[0045]此步驟中,引用表中包括多個引用塊地址表項,并且在每個引用塊地址表項中記錄對應(yīng)引用塊的偏移地址;[0046]S3、統(tǒng)計所有引用塊中內(nèi)容不為空的所述表項的數(shù)量,并利用下面公式計算虛擬磁盤中使用的空間:虛擬磁盤中使用的空間=所有引用塊中內(nèi)容不為空的所述表項的數(shù)量*簇的大小。[0047]上述方法適用于利用qcow2格式組成的虛擬磁盤,不僅可以計算由文件虛擬形成的磁盤的使用空間的大小,而且可以計算出由其他設(shè)備,如塊設(shè)備虛擬形成的磁盤的使用空間的大小,同時可以保證計算的效率和準(zhǔn)確率。[0048]進(jìn)一步地,在執(zhí)行步驟S1之前,所述方法還包括讀取信息的步驟:對于qcow2格式形成的虛擬磁盤來說,可以通過讀取其頭部信息獲得計算磁盤使用空間的相關(guān)數(shù)據(jù)信息,具體為:[0049]1、讀取每個簇的偏移位數(shù),用cluSter_bitS表示;其中各個簇的偏移位數(shù)是相等的;[°°50]2、讀取引用表的基礎(chǔ)數(shù)量,用refcount_table_clusters表示,單位是個;[°°51]3、讀取引用表在設(shè)備中的偏移地址refcount_tab1e_offset,用于找到引用表。[0052]進(jìn)一步地,所述步驟SI之后、S2之前,所述方法還包括以下步驟:[0053]對于引用表,根據(jù)所述引用表的基礎(chǔ)數(shù)量以及簇的偏移位數(shù)計算引用表中對應(yīng)的引用塊的數(shù)量。其中所述引用塊的數(shù)量利用如下公式計算:[0054]refcount_table_entry=refcount_table_clusters〈〈(cluster_bites_3)[0055]式中,refcount_table_entry為所述引用塊的數(shù)量對應(yīng)的二進(jìn)制數(shù)字,refcount_table_clusters為所述引用表的基礎(chǔ)數(shù)量,單位是個,cluster_bites為所述簇的偏移位數(shù),〈〈表示左移的意思。引用塊的數(shù)量的單位是個。[0056]假設(shè)代;1^011111:_七&1316_(31118七6^當(dāng)前第1頁1 2