999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2024-04-29 23:48:04王德勁
信息系統(tǒng)工程 2024年2期

王德勁

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

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

一、前言

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

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

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

三、分析與驗證

(一)問題引入

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

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

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

(二)問題分析

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

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

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

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

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

現(xiàn)在通過類比法和假設法分析BAT所在的區(qū)域。假設跟位圖一樣,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來達到這個目的?

(三)推論驗證

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

被初始化文件比備份文件多一個塊,塊大小為2MB +4096=2101248字節(jié),也即2138112減去36864字節(jié),這再一次說明位圖以4096字節(jié)對齊。再來分析BAT和文件大小對齊字節(jié),15GB動態(tài)大小VHD文件的BAT所需的字節(jié)數(shù)為15GB/2MB ×4 = 30720。BAT的起始地址為0x600,按照30720計算的結(jié)尾地址為0x600+30720–1=32255。下一個區(qū)域的首地址為32256,32256÷4096=7.875,不是對齊大小4096的整數(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ū)域為0x8000–(0x8000+3584–1),即0x8000–0x8DFF,如圖5箭頭所指填充區(qū)域所示。由此分析,推測的結(jié)論在15GB VHD文件中成立。

四、文件長度算法

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

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時,設置的磁盤空間大小,單位為MB。blockDataSize表示塊中block data的大小,為2MB。BATOffset為BAT在VHD文件中的地址偏移,固定為0x600,十進制為1536。故BATSize計算公式可進一步簡化為:2×VHDDiskSize+((1536+2×VHDDiskSize)%4096?(4096-(1536+2× VHDDiskSize)%4096):0

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

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

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

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

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

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

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

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

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

五、環(huán)境影響

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

六、結(jié)語

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

參考文獻

[1]張丹玨.基于VHD技術(shù)的通用計算機考試系統(tǒ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ā)與應用.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ù)學院信息工程系

責任編輯:周航

主站蜘蛛池模板: av午夜福利一片免费看| 亚洲码一区二区三区| 久久综合九色综合97网| 亚洲第一视频网| 久久亚洲国产视频| 精品久久久久成人码免费动漫 | 国产视频资源在线观看| 亚洲激情99| 成人一区专区在线观看| 久草热视频在线| 日韩不卡高清视频| 国产精品无码久久久久AV| 国产自在自线午夜精品视频| 色妺妺在线视频喷水| 日本欧美在线观看| 伊人久久婷婷| 久久香蕉国产线看观看亚洲片| 久久精品人妻中文系列| 成人蜜桃网| 在线观看国产黄色| 欧美国产日韩另类| 谁有在线观看日韩亚洲最新视频| 欧美区一区| 色噜噜狠狠色综合网图区| 国产夜色视频| 精品一区国产精品| av色爱 天堂网| 久久伊人久久亚洲综合| 亚洲an第二区国产精品| 热99精品视频| 狠狠色噜噜狠狠狠狠奇米777| 精品国产免费观看一区| 久久99国产乱子伦精品免| 国产日韩精品欧美一区喷| 亚洲码一区二区三区| 日本伊人色综合网| 四虎AV麻豆| 91最新精品视频发布页| 国产福利大秀91| 四虎精品免费久久| 欧美午夜在线观看| 夜夜高潮夜夜爽国产伦精品| 99久久人妻精品免费二区| 久久久成年黄色视频| 91青青在线视频| 国产成人精品第一区二区| 亚洲精品桃花岛av在线| 国产综合另类小说色区色噜噜| 色综合天天综合中文网| 欧美伦理一区| 亚洲欧美国产高清va在线播放| a色毛片免费视频| 中文字幕亚洲乱码熟女1区2区| 欧美 亚洲 日韩 国产| 欧美一级色视频| 夜夜拍夜夜爽| 午夜啪啪网| 国产成人精品一区二区不卡| 国产午夜福利在线小视频| 亚洲国产精品日韩av专区| 免费一级毛片在线观看| 欧美激情一区二区三区成人| 全部免费特黄特色大片视频| 韩国自拍偷自拍亚洲精品| 久热99这里只有精品视频6| 久久6免费视频| 欧美国产精品不卡在线观看| 日韩少妇激情一区二区| 手机精品视频在线观看免费| 精品欧美一区二区三区在线| 国产精品美乳| av无码久久精品| 99热这里只有免费国产精品| 九九热精品视频在线| 欧美一级特黄aaaaaa在线看片| 欧美精品xx| 国产精品 欧美激情 在线播放 | 久久人人妻人人爽人人卡片av| 亚洲精品无码av中文字幕| 国产成人乱无码视频| 日韩无码白| 精品剧情v国产在线观看|