国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

動(dòng)態(tài)大小VHD虛擬磁盤文件長度探究

2024-04-29 23:48:04王德勁
信息系統(tǒng)工程 2024年2期
關(guān)鍵詞:計(jì)算公式

王德勁

摘要:為了避免使用動(dòng)態(tài)大小VHD技術(shù)的虛擬化設(shè)備由于VHD文件逐步增長到不可預(yù)估大小而撐爆物理磁盤,基于常見開發(fā)環(huán)境對動(dòng)態(tài)大小VHD虛擬磁盤文件長度做了深入研究,最終提出一個(gè)最大文件大小的計(jì)算公式。實(shí)踐表明,在虛擬化產(chǎn)品的開發(fā)階段做物理磁盤空間規(guī)劃時(shí)利用該公式做指導(dǎo),可以有效防止虛擬化產(chǎn)品在市場化應(yīng)用過程中出現(xiàn)的系統(tǒng)無法正常運(yùn)行問題。

關(guān)鍵詞:VHD技術(shù);虛擬化設(shè)備;文件大小;計(jì)算公式

一、前言

VHD(Virtual Hard Disk)是微軟發(fā)布的一種虛擬硬盤格式規(guī)范,這種虛擬化技術(shù)通過在物理硬盤上創(chuàng)建一個(gè)虛擬磁盤文件,模擬一個(gè)獨(dú)立的硬盤驅(qū)動(dòng)器。VHD可分為固定大小和動(dòng)態(tài)大小兩種類型。固定大小VHD在創(chuàng)建時(shí)分配磁盤空間,創(chuàng)建后不能更改空間大小,磁盤文件大小也是固定的。動(dòng)態(tài)大小VHD在創(chuàng)建時(shí)只分配實(shí)際使用的空間,只在需要時(shí)動(dòng)態(tài)擴(kuò)展。VHD技術(shù)在政府、醫(yī)療機(jī)構(gòu)、學(xué)校和企業(yè)得到了廣泛應(yīng)用[1]。

二、問題與挑戰(zhàn)

動(dòng)態(tài)大小VHD由于其磁盤文件大小隨著數(shù)據(jù)的寫入動(dòng)態(tài)增長,利用該特性可以最大限度共享物理磁盤空間,因此這種類型的VHD在諸如云桌面終端等虛擬化產(chǎn)品得到了廣泛運(yùn)用。但也因此特性,如果不能準(zhǔn)確評估出最大虛擬磁盤文件大小,在物理磁盤空間有限的情況下,如果不斷向虛擬磁盤寫入數(shù)據(jù),就有可能出現(xiàn)VHD文件撐爆物理磁盤,最終導(dǎo)致系統(tǒng)無法正常運(yùn)行的風(fēng)險(xiǎn)。

三、分析與驗(yàn)證

(一)問題引入

要計(jì)算出動(dòng)態(tài)大小VHD文件長度,就需要知道其文件構(gòu)成。通過將組成的各部分相加,最終計(jì)算出文件總大小。VHD文件結(jié)構(gòu)在Virtual Hard Disk Format Spec_10_18_06規(guī)范(以下簡稱規(guī)范)[2]文檔里面有說明,如圖1所示,可以對照規(guī)范來分析實(shí)際的VHD文件。

規(guī)范描述的動(dòng)態(tài)大小VHD文件結(jié)構(gòu)中的footer(首尾兩個(gè))、header,以及block data大小固定,分別為512字節(jié)、1024字節(jié)和2MB[3]。BAT和扇區(qū)位圖總大小不固定,存在512字節(jié)對齊情況。經(jīng)過與實(shí)際VHD文件對比分析,發(fā)現(xiàn)footer、header、block data大小與規(guī)范描述的一致,但BAT和位圖可能存在差異。BAT是塊分配表,用于存放數(shù)據(jù)塊在文件中的偏移。一個(gè)BAT條目占4個(gè)字節(jié),總BAT大小在創(chuàng)建虛擬磁盤時(shí)確定。位圖表示在動(dòng)態(tài)大小VHD中哪些扇區(qū)包含有效數(shù)據(jù)。經(jīng)過分析計(jì)算,BAT和位圖實(shí)際占用的字節(jié)數(shù)或地址空間的對齊值可能超過512字節(jié)這個(gè)值,到底超出多少是分析的重點(diǎn)。

規(guī)范中“動(dòng)態(tài)磁盤應(yīng)用”小節(jié)有這樣一句描述:當(dāng)向磁盤文件中寫入數(shù)據(jù)時(shí),動(dòng)態(tài)磁盤將會(huì)擴(kuò)展一個(gè)新的塊。這個(gè)新的塊既包含block data,也包括位圖。前者是固定大小,因此可通過對比分析法先確定位圖的對齊規(guī)則,然后通過類比分析法和假設(shè)分析法確定BAT的。

(二)問題分析

根據(jù)前文的分析思路,在Win10環(huán)境下,利用Windows磁盤管理器創(chuàng)建一個(gè)10MB的動(dòng)態(tài)大小VHD文件10MB_dym.vhd,以及它的備份文件10MB_dym_org.vhd。創(chuàng)建后兩個(gè)文件大小都為8192字節(jié),如圖2所示。掛載10MB_dym.vhd文件,再對其進(jìn)行磁盤初始化,卸載磁盤后其文件大小為2109440字節(jié)。

存放初始化信息,需要?jiǎng)?chuàng)建一個(gè)新的塊,這個(gè)新塊包括block data和位圖,大小為10MB_dym.vhd文件大小減去10MB_dym_org.vhd大小,即2109440減去8192字節(jié)。再將塊大小減去block data的大小,即可得到位圖大小,即為2109440–8192–2×1024×1024=4096字節(jié)。

位圖對齊大小確定后,再來確定BAT對齊大小。動(dòng)態(tài)大小VHD在剛創(chuàng)建時(shí)沒有數(shù)據(jù)塊被分配,只包含數(shù)據(jù)結(jié)構(gòu),即footer、header和BAT等信息。因此,可通過分析10MB_dym_org.vhd文件來進(jìn)一步確定BAT的大小。VHD文件大小減去footer和header部分,理論上剩余部分為BAT。計(jì)算方法為:

文件大小–2×footer大小–header大小,即8192–2×512–1024=6144字節(jié)。

計(jì)算得出的6144字節(jié)是否就是為BAT大?。啃枰鲞M(jìn)一步分析。圖3是輸出10MB_dym_org.vhd文件的十六進(jìn)制數(shù)據(jù),最左側(cè)是地址欄,中間部分是數(shù)據(jù),最右側(cè)劃線處是十六進(jìn)制數(shù)據(jù)對應(yīng)的ASCII碼。除最后一行輸出,其他行與行之間的星號表示上下兩行的數(shù)據(jù)與上一行完全相同。根據(jù)規(guī)范,圖中0x000-0x1FF區(qū)域是footer,0x200-0x5FF是header,文件最后0x1E00-0x1FFF是footer的備份。BAT位于header之后,該區(qū)域存放數(shù)據(jù)塊偏移值,這里稱為表項(xiàng),一個(gè)表項(xiàng)占用4字節(jié),未使用的表項(xiàng)全部初始化為0xFFFFFFFF。根據(jù)規(guī)范描述,BAT以512字節(jié)對齊。由于10MB由5個(gè)2MB的數(shù)據(jù)塊組成,因此BAT有5個(gè)表項(xiàng),共占用20字節(jié)。再以512字節(jié)對齊,理論上BAT的區(qū)域?yàn)?x600-0x7FF,但是實(shí)際看起來好像不是。0x600-0xFFF區(qū)域的數(shù)據(jù)都為全0xFFFFFFFF,從0x1000開始數(shù)據(jù)變?yōu)?x00000000,從數(shù)據(jù)變化情況來看,BAT區(qū)域范圍更像是0x600-0xFFF。

現(xiàn)在通過類比法和假設(shè)法分析BAT所在的區(qū)域。假設(shè)跟位圖一樣,BAT也是以4096字節(jié)對齊,那么0x600-0xFFF區(qū)域即為BAT的區(qū)域。但從0x1000到0x1E00這塊區(qū)域的數(shù)據(jù)又是什么?文件最后footer數(shù)據(jù)從0x1E00地址開始,其末尾字節(jié)地址加1即8192,正好是4096的2倍,是否意味著文件VHD文件大小也要以4096字節(jié)對齊,而在BAT和footer之間填充全0來達(dá)到這個(gè)目的?

(三)推論驗(yàn)證

假設(shè)上一小節(jié)的推測是正確的,下面再通過創(chuàng)建新的VHD文件來驗(yàn)證。使用Windows磁盤管理器創(chuàng)建一個(gè)15GB大小的動(dòng)態(tài)大小VHD文件15GB_dym.vhd,以及它的備份文件15GB_dym_org.vhd。初始化15GB_dym.vhd,文件大小如圖4所示。

被初始化文件比備份文件多一個(gè)塊,塊大小為2MB +4096=2101248字節(jié),也即2138112減去36864字節(jié),這再一次說明位圖以4096字節(jié)對齊。再來分析BAT和文件大小對齊字節(jié),15GB動(dòng)態(tài)大小VHD文件的BAT所需的字節(jié)數(shù)為15GB/2MB ×4 = 30720。BAT的起始地址為0x600,按照30720計(jì)算的結(jié)尾地址為0x600+30720–1=32255。下一個(gè)區(qū)域的首地址為32256,32256÷4096=7.875,不是對齊大小4096的整數(shù)倍。要實(shí)現(xiàn)4096對齊,需要在前面填充8×4096–32256=512Bytes。由此,BAT的結(jié)尾地址為0x600+30720+512–1=32767,即0x7FFF,地址范圍為0x600–0x7FFF,如圖5箭頭指向的BAT所示。文件末尾的footer為512字節(jié),無法構(gòu)成4096的整數(shù)倍,也需要做填充,需填充的字節(jié)數(shù)為4096–512=3584。填充區(qū)域?yàn)?x8000–(0x8000+3584–1),即0x8000–0x8DFF,如圖5箭頭所指填充區(qū)域所示。由此分析,推測的結(jié)論在15GB VHD文件中成立。

四、文件長度算法

根據(jù)以上分析結(jié)論,結(jié)合動(dòng)態(tài)大小VHD文件結(jié)構(gòu),可以得到動(dòng)態(tài)VHD文件最大大小計(jì)算公式。

VHDFileSize=2×footerSize+headerSize+BATSize+TotalBlockSize+filePadSize

其中,公式中各變量大小及含義如下所示:

footerSize:footer結(jié)構(gòu)大小,大小為512字節(jié)。

headerSize:header結(jié)構(gòu)大小,大小為1024字節(jié)。

BATSize:BAT結(jié)構(gòu)大小,等于VHDDiskSize/blockDataSize×4+((BATOffset+VHDDiskSize/blockDataSize×4)%4096)?(4096-(BATOffset+ VHDDiskSize/blockDataSize×4)%4096):0。

其中,VHDDiskSize為在創(chuàng)建VHD時(shí),設(shè)置的磁盤空間大小,單位為MB。blockDataSize表示塊中block data的大小,為2MB。BATOffset為BAT在VHD文件中的地址偏移,固定為0x600,十進(jìn)制為1536。故BATSize計(jì)算公式可進(jìn)一步簡化為:2×VHDDiskSize+((1536+2×VHDDiskSize)%4096?(4096-(1536+2× VHDDiskSize)%4096):0

TotalBlockSize:總塊大小,等于VHDDiskSize/blockDataSize×4096+1024×1024×VHDDiskSize,因blockDataSize為2MB,故計(jì)算公式進(jìn)一步簡化為2048×VHDDiskSize+1024×1024×VHDDiskSize,即1050624×VHDDiskSize,單位為字節(jié)。

filePadSize:文件大小4096字節(jié)對齊填充的字節(jié)數(shù),為3584。

綜合上面各等式,VHDFileSize的計(jì)算公式可進(jìn)一步歸納為。

VHDFileSize=5632+1050626×VHDDiskSize+((1536+2×VHDDiskSize)%4096?(4096-(1536+2×VHDDiskSize)%4096):0

可以看出,簡化之后的公式中動(dòng)態(tài)大小VHD文件最大大小最后只與VHDDiskSize有關(guān)。

下面以10MB_dym.vhd為例做計(jì)算驗(yàn)證。將其掛載并格式化成NTFS文件系統(tǒng),將磁盤空間填滿后,在磁盤管理器和此電腦界面顯示的狀態(tài)如圖6所示。圖中,磁盤管理器顯示磁盤可用空間只有7MB,實(shí)際可使用的空間更小,因?yàn)橛胁糠挚臻g需要預(yù)留給磁盤初始化信息和文件系統(tǒng)使用。將VHDDiskSize=10代入上述公式計(jì)算此VHD文件的最大大小值為:

VHDFileSize=5632+1050626×10+((1536+2*10) %4096? (4096 - (1536 + 2× 10)%4096):0=10514432字節(jié)。

實(shí)際大小值為8413184字節(jié),與公式得出的結(jié)果不一致。圖7所示為該文件的二進(jìn)制數(shù)據(jù),其中BAT區(qū)域有4個(gè)字節(jié)被使用,即用了4個(gè)塊,還有一個(gè)塊沒有使用。如果加上此塊所占用的空間,則文件大小為8413184+2×1024×1024+4096=10514432,與上面用公式計(jì)算出的值完全一致。

前面的推導(dǎo)過程所創(chuàng)建的VHD磁盤大小都為2MB的倍數(shù),公式在計(jì)算過程也能整除。如果所創(chuàng)建的VHD磁盤大小不為2MB的倍數(shù),計(jì)算文件最大大小時(shí)上面公式還能否使用?使用Windows磁盤管理器創(chuàng)建一個(gè)9MB大小的動(dòng)態(tài)大小VHD文件,分析其二進(jìn)制數(shù)據(jù)可知其BAT數(shù)目5,block data的值為2MB。說明磁盤管理器分配了10MB(5×2MB)的空間給這個(gè)9MB的動(dòng)態(tài)VHD,這與創(chuàng)建10MB大小的VHD磁盤一致。對于非2MB倍數(shù)的VHD,其文件最大大小比與其磁盤大小加1MB的動(dòng)態(tài)大小VHD要小,故在進(jìn)行最大占用空間分析評估時(shí),依然采用上述公式。

五、環(huán)境影響

上述分析的動(dòng)態(tài)大小VHD都是在Win10系統(tǒng)上使用Windows磁盤管理器創(chuàng)建的。經(jīng)過測試分析,使用其他常用工具創(chuàng)建的,如bootice、vhdx_onekey_2013,VHD文件結(jié)構(gòu)未變。

Linux下也有一款開源的VHD管理工具vhd-util,使用它創(chuàng)建的動(dòng)態(tài)大小VHD與Win10環(huán)境工具創(chuàng)建的相比,footer與header沒有變化,磁盤空間分配規(guī)則也沒有變化,變化的是增加了tdbatmap字段[4],且VHD文件是以512字節(jié)對齊。對于如果將vhd-util創(chuàng)建的動(dòng)態(tài)大小VHD放到Windows下掛載和使用,tdbatmap會(huì)被重新用作位圖,BAT、位圖,以及最終的文件大小仍然以512字節(jié)對齊。

六、結(jié)語

VHDX(Virtual Hard Disk v2)是新一代VHD技術(shù)[5],具有更大的磁盤容量和更好的性能,但由于VHD技術(shù)應(yīng)用較成熟,且很多虛擬化產(chǎn)品后臺管理系統(tǒng)是Linux,目前Linux下主要的開源VHD管理工具為vhd-util,該工具還無法支持對VHDX的管理,因此目前市場上大多數(shù)虛擬化產(chǎn)品依然使用VHD技術(shù)。另外,VHDX也存在跟VHD一樣的虛擬磁盤文件增長問題。本文針對此問題進(jìn)行了深入探究,并得到了在Win10系統(tǒng)環(huán)境下計(jì)算動(dòng)態(tài)大小VHD磁盤文件最大大小的公式。盡管本文的分析只基于主流的系統(tǒng)開發(fā)環(huán)境或工具,沒有全面覆蓋。即便如此,所得出的計(jì)算公式足以滿足常規(guī)產(chǎn)品開發(fā)需要,所使用的分析方法也能為其他系統(tǒng)環(huán)境分析提供很好的指導(dǎo)作用。

參考文獻(xiàn)

[1]張丹玨.基于VHD技術(shù)的通用計(jì)算機(jī)考試系統(tǒng)的應(yīng)用研究[J].現(xiàn)代電子技術(shù).2017,40(03):121-123.

[2]Virtual Hard Disk Format Spec_10_18_06.do[EB/OL].https://www.microsoft.com/en-US/download/2006,10,11.

[3]連建永,顧忠明,黃道穎,等.VHD文件結(jié)構(gòu)解析[J]電腦開發(fā)與應(yīng)用.2014,27(08):62-66.

[4]vhd-util[EB/OL].https://github.com/emonty/vhd-util 2017.5.23

[5] [MS-VHDX]: Virtual Hard Disk v2 (VHDX) File Format[EB/OL]. https://learn.microsoft.com/zh-cn/openspecs/windows_protocols/ms-vhdx/2022.10.1

作者單位:福州職業(yè)技術(shù)學(xué)院信息工程系

責(zé)任編輯:周航

猜你喜歡
計(jì)算公式
電機(jī)溫升計(jì)算公式的推導(dǎo)和應(yīng)用
2019離職補(bǔ)償金計(jì)算公式一覽表
CF-901型放射性氣溶膠取樣泵計(jì)算公式修正
談擬柱體的體積
蒸發(fā)冷卻空調(diào)機(jī)組耗水量計(jì)算公式的推導(dǎo)與分析
泥石流整體沖壓力簡化計(jì)算公式
惠斯通電橋的計(jì)算公式及性質(zhì)分析
河南科技(2014年22期)2014-02-27 14:18:40
復(fù)合絕緣子爬電距離計(jì)算公式推導(dǎo)及應(yīng)用
河南科技(2014年22期)2014-02-27 14:18:16
采用初等代數(shù)推導(dǎo)路基計(jì)算公式的探討
關(guān)于節(jié)能評估中n值計(jì)算公式及修正
宜君县| 永德县| 凤城市| 磐石市| 青龙| 勃利县| 墨江| 建瓯市| 加查县| 凌源市| 茌平县| 南木林县| 平湖市| 上杭县| 万盛区| 定西市| 探索| 应用必备| 含山县| 灵璧县| 石首市| 泗阳县| 五台县| 吴堡县| 西充县| 赣榆县| 灵丘县| 大安市| 长顺县| 珲春市| 孟连| 淮阳县| 乌拉特前旗| 静乐县| 平顶山市| 布拖县| 汉阴县| 亚东县| 贵定县| 个旧市| 开封县|