ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

虚拟磁盘格式2:VHD

2022-05-06 20:03:26  阅读:258  来源: 互联网

标签:Differencing 定位器 磁盘格式 扇区 虚拟 偏移 磁盘 VHD


参考文档:Virtual Hard Disk Image Format Specification

VHD是一种微软支持的虚拟磁盘格式,结构如下图所示

当虚拟磁盘文件大小超过了文件系统文件大小的限制,可以将虚拟磁盘文件分割为多个文件,第一个文件包含磁盘头等,扩展名为.vhd,最后一个文件包含磁盘尾,除第一个文件外,扩展名都以.v01,.v02等命名

本文以“新建虚拟硬盘.vhd”为例,它是一个Differencing磁盘,父磁盘是同目录下的my.vhd

种类

VHD虚拟磁盘有三种类型:

格式

所有采用大端存储

磁盘头

各字段意义如下:

偏移 意义
0-7 磁盘头标识,值为“cxsparse”
8-F 下一个结构的偏移,如未被使用,值设为FFFFFFFF
10-17 块表的偏移
18-1B 头版本号
1C-1F 目前的最大块数,最大块表项数,等于磁盘大小除以块的大小
20-23 块的大小,值必须为2的幂次
24-27 磁盘头的校验和
28-37 父磁盘的唯一标识,Differencing类型磁盘会存储
38-3B 父磁盘的时间戳,从2000.1.1 12:00:00 AM in UTC/GMT以来的秒数
3C-3F 保留
40-23F 共512B,父磁盘文件的unicode值

之后的字段仅用于Differencing类型磁盘,每24B一项,共8项,每一项存储一个父磁盘的定位器,用于定位Differencing类型磁盘的父磁盘的位置,每一项的结构如下

偏移 意义
0-3 表示定位器的路径格式,W2ru:windows下的相对路径,W2ku:windows下的绝对路径
4-7 存储父磁盘定位器所需的扇区数
8-B 父磁盘定位器的字节数
B-F 保留
10-17 父磁盘定位器的偏移地址

在例子“新建虚拟硬盘.vhd”中前512B为磁盘尾副本,直接看磁盘头,数据如下:

红框处为磁盘头标识,值为“cxsparse”
红线处为块表的地址,这里为20 00,即8192B
蓝色划线处为最大块数,值为15,因为现在磁盘文件30M,一个块2MB,所以目前最大块数为15
黄色划线处为每块大小,值为2097152B,也就是2MB
黑框及以后为父磁盘文件的unicode值,这里可以看到其确为父磁盘my.vhd的路径
从粉框开始为Differencing类型磁盘的专属字段,只看第一个24B即第一项
粉框处为定位器的路径格式,这里为W2ku,表示windows下的绝对路径
绿框表示存储父磁盘定位器所需的扇区数为4096
紫框表示父磁盘定位器的字节数为60B
紫线处表示父磁盘定位器偏移为4096B
跳转到4096B处,如下图所示,发现确实为绝对路径。而且确实使用了60B

接下来的24B为相对路径格式存储的父磁盘定位器,跳转到其偏移,数据如下图所示

磁盘尾

各字段意义如下:

偏移 意义
0-7 指明磁盘创造者的唯一标识,值为“conectix”的ASCII
8-B 表示磁盘的特殊类型,1:临时磁盘,关机时就删除,2:默认保留值
C-F 文件版本号
10-17 数据的偏移,从虚拟文件开头到下一个结构的偏移,对于固定类型磁盘,值为FFFFFFFF
18-1B 时间戳,从2000.1.1 12:00:00 AM in UTC/GMT以来的秒数
1C-1F 创建该虚拟磁盘的应用标识
20-23 创建该虚拟磁盘的应用的版本
24-27 创建该虚拟磁盘的操作系统标识,Wi2k:windows
28-2F 磁盘原始大小,以字节为单位(值仅供参考)
30-37 磁盘现在大小,以字节为单位,磁盘创建时与磁盘原始大小相同,之后随着扩展而改变
38-39 磁盘柱面数
3A 磁盘磁道数
3B 每磁道扇区数
3C-3F 磁盘种类,2:固定磁盘,3:动态磁盘,4:Differencing磁盘
40-43 校验和
44-53 磁盘唯一标识
54 保存状态标识,如果值为1,表示磁盘处于保存状态,不能进行压缩扩展
55- 保留,共427B

磁盘中第一个扇区数据如下所示,是磁盘尾的副本

磁盘最后一个扇区如下所示,是磁盘尾,数据都相同

红框处为磁盘创造者标识
红线处为从虚拟文件开头到下一个结构的偏移,为512,所以该磁盘尾大小为512B,磁盘头从512B处开始
黑线处为创建该虚拟磁盘的操作系统标识,值为Wi2k,也就是windows系统
绿线处为磁盘原始大小和现在大小,值都为480B
连续三个黑框表示磁盘柱面数,磁道数,扇区数分别为:903,4,17(这里似乎不对,暂不明白)
蓝线处值4,表示类型为Differencing磁盘

块表和数据块

块表中每一项对应一个块,存储这个块的偏移地址(相对于整个磁盘),未被使用的块表中的项全部初始化为F

数据块中包含一个扇区位图和数据。对于动态类型磁盘,扇区位图表明哪个扇区存储有数据(1填充)。对于differencing类型磁盘,哪个扇区在differencing磁盘中(1填充),哪个扇区在父磁盘中(0填充)。在文档中说存在,但是实际例子中没有找到扇区位图,这里存在疑问

从上知块表在偏移8192处,数据如下,只使用一个块,值为159,即该数据块从159扇区处开始,即159*512=81408

数据块如下

标签:Differencing,定位器,磁盘格式,扇区,虚拟,偏移,磁盘,VHD
来源: https://www.cnblogs.com/Qi-Lin/p/16230180.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有