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

動態大小VHD虛擬磁盤文件長度探究

2024-04-29 23:48:04王德勁
信息系統工程 2024年2期

王德勁

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

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

一、前言

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

二、問題與挑戰

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

三、分析與驗證

(一)問題引入

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

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

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

(二)問題分析

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

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

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

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

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

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

(三)推論驗證

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

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

四、文件長度算法

根據以上分析結論,結合動態大小VHD文件結構,可以得到動態VHD文件最大大小計算公式。

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

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

footerSize:footer結構大小,大小為512字節。

headerSize:header結構大小,大小為1024字節。

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

其中,VHDDiskSize為在創建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,單位為字節。

filePadSize:文件大小4096字節對齊填充的字節數,為3584。

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

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

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

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

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

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

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

五、環境影響

上述分析的動態大小VHD都是在Win10系統上使用Windows磁盤管理器創建的。經過測試分析,使用其他常用工具創建的,如bootice、vhdx_onekey_2013,VHD文件結構未變。

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

六、結語

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

參考文獻

[1]張丹玨.基于VHD技術的通用計算機考試系統的應用研究[J].現代電子技術.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文件結構解析[J]電腦開發與應用.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

作者單位:福州職業技術學院信息工程系

責任編輯:周航

主站蜘蛛池模板: 无码AV动漫| 国产免费网址| 91精品国产福利| 国内精品免费| 亚洲中文字幕无码mv| 亚洲天堂视频在线观看免费| 亚洲视频无码| 中日韩一区二区三区中文免费视频| 天堂在线视频精品| 丝袜高跟美脚国产1区| 欧美中出一区二区| 在线另类稀缺国产呦| 欧美亚洲国产日韩电影在线| 91丝袜美腿高跟国产极品老师| 国产乱人乱偷精品视频a人人澡| 国产高清又黄又嫩的免费视频网站| 99这里精品| 波多野结衣视频网站| 成人久久精品一区二区三区 | 亚洲aaa视频| 四虎国产精品永久一区| 免费看a级毛片| 亚洲欧美另类日本| 波多野结衣中文字幕一区二区| 日韩精品无码免费专网站| 亚洲国产精品美女| 亚洲天堂日本| 免费播放毛片| 日韩精品一区二区三区大桥未久| 26uuu国产精品视频| 欧美亚洲激情| 岛国精品一区免费视频在线观看| 亚洲成A人V欧美综合| 国产高颜值露脸在线观看| 国产精品护士| 国产精品人成在线播放| 四虎精品免费久久| 日韩精品专区免费无码aⅴ | 五月婷婷伊人网| 欧美一级专区免费大片| 中文字幕人成人乱码亚洲电影| a级毛片一区二区免费视频| 国产男人的天堂| 丝袜高跟美脚国产1区| 亚洲欧美人成人让影院| 国产呦精品一区二区三区网站| 毛片久久网站小视频| 9966国产精品视频| 97久久超碰极品视觉盛宴| 欧美精品伊人久久| 亚洲国产成人精品无码区性色| 日韩精品亚洲一区中文字幕| 91麻豆精品国产高清在线| 无码国产伊人| 看av免费毛片手机播放| 欧美性猛交一区二区三区| 无码一区18禁| 看你懂的巨臀中文字幕一区二区| 亚洲全网成人资源在线观看| 国产swag在线观看| 久久6免费视频| 亚洲国产成人无码AV在线影院L| 国产00高中生在线播放| 91福利免费| 色综合五月婷婷| 国产午夜一级毛片| 国产午夜一级淫片| 国产在线啪| 欧美一级在线| 国产女同自拍视频| 日韩视频福利| 2020国产免费久久精品99| 一本久道热中字伊人| 无码AV动漫| 手机看片1024久久精品你懂的| 国产美女一级毛片| 人妖无码第一页| 91精品网站| 国产最爽的乱婬视频国语对白| 久久国产精品无码hdav| 91无码人妻精品一区二区蜜桃| 久久婷婷六月|