共计 2902 个字符,预计需要花费 8 分钟才能阅读完成。
PVS 架构中的 VHD 虚拟磁盘怎么理解,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面丸趣 TV 小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1、差异虚拟硬盘
差异虚拟硬盘将差异虚拟硬盘本身内的母盘文件定位器存储起来,当驱动尝试打开差异硬盘时,将同时打开差异虚拟硬盘和母盘。母盘也可以是差异虚拟硬盘,在这种情况下,可能有一连串差异虚拟硬盘,最终终止于非差异虚拟硬盘。
母盘定位器表仅由差异虚拟硬盘来使用,如本文前面的“可扩展虚拟硬盘头部格式”中所述。差异虚拟硬盘是一种可扩展的 VHD,它的文件结构与可扩展 VHD 相同,只是在页脚区域中“类型”字段为 4,表示这是一个差异虚拟硬盘。由于差异虚拟硬盘不能独立运行,须依赖其母盘,因此在头部中的“母盘 UUID”、“母盘名称”及“母盘定位器”等字段存储着有关重要信息:母盘 UUID、母盘名称用于差异虚拟硬盘识别母盘;母盘定位器存储着差异虚拟硬盘在不同平台(Windows 或 Mac 等)上的母盘的定位编码信息,用于在不同平台上的迁移操作。
在 Windows 中,有两种类型的平台定位器:W2ku 和 W2ru。前者是母盘的绝对路径名,后者是母盘相对于差异虚拟硬盘的路径名。
例如,位于 Windows 的计算机上的根驱动器中的母盘映像将存储格式如下:
Type
Example
W2ku
c:\directory\parent.vhd
W2ru
.\directory\parent.vhd
相对路径名的优点是它允许差异虚拟硬盘和母盘移植到不同的位置。使用绝对路径名,每当移动母盘时,必须显式重新链接母盘和子硬盘。
当创建差异虚拟硬盘时,如果可能,应该初始化相应平台上的两种类型的平台定位器的路径名。
差异虚拟硬盘的写操作:
对于写操作,所有数据都将写入差异虚拟硬盘映像。对于写入特定块的所有扇区,块位图被标记为 dirty。
差异虚拟硬盘的读操作:
当驱动读取硬盘映像的扇区时,虚拟硬盘子系统检查差异虚拟硬盘中的块位图。然后硬盘子系统从差异虚拟硬盘中读取标记为 dirty 的扇区,并从母盘读取标记为 clean 的扇区。
例如,考虑在母盘映像和子硬盘映像中都保存扇区 4096 至 8191 的块。块的第一个扇区保存该块的位图。单个单元格表示位图中的一个位,黑点×××表示块中的特定扇区已被数据写入。
母盘数据块:
4096
4097
4098
4099
4100
4101
●
4102
●
4103
●
4104
4105
4106
4107
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
差异虚拟硬盘子数据块:
4096
4097
4098
4099
4100
4101
●
4102
●
4103
●
4104
4105
4106
4107
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
如果上层驱动发出从 4098 到 4104 的扇区的读取操作,则硬盘子系统将从母盘块读取扇区 4098 到 4101,并且将从差异虚拟硬盘子块中读取 4102 到 4104。
如果驱动针对扇区从 4102 到 4106 发出写操作,则整个数据将被写入差异虚拟硬盘子块,并且位图将被标记为 dirty,用于差异虚拟硬盘子块中的扇区 4105 和 4106。
差异虚拟硬盘子数据块:
4096
4097
4098
4099
4100
4101
●
4102
●
4103
●
4104
4105
4106
4107
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
针对扇区从 4102 到 4106 发出写操作:
4096
4097
4098
4099
4100
4101
●
4102
●
4103
●
4104
●
4105
●
4106
4107
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
dirty
dirty
Clean
Clean
Clean
Clean
Clean
Clean
dirty
dirty
dirty
dirty
dirty
综上,使用差异虚拟硬盘模式时,会同时打开差异虚拟硬盘和它的母盘。当对一个差异虚拟硬盘进行写操作时,会把所写入的数据存储在差异虚拟硬盘上,不对母盘改动;当对其进行读操作时,如果所读数据已经修改,则读取存储在差异虚拟硬盘上的改动数据,数据没有改动则读取母盘的原始数据。如果读取的数据包含了母盘的原始数据和差异虚拟硬盘上的改动数据,则先读取母盘的原始数据,然后在读取差异虚拟硬盘上的改动数据并将其组合为统一的数据。
2、VHD 虚拟硬盘的寻址过程
对于固定方式的 VHD 文件,虚拟硬盘的扇区与文件的扇区顺序对应,对固定方式 VHD 进行寻址,通过页脚区域查找对应扇区即可。
对于可扩展的 VHD,其数据块由块分配表动态分配,其虚拟硬盘和 VHD 文件的地址要经过层次的索引, 进而达到存储或读写数据的目的。
详细说明如下:
(1)读可扩展 VHD 文件的页脚区域,通过页脚区域的“类型”“数据偏移量”等字段,确定是否是可扩展 VHD 文件以及头部的位置在哪儿。
(2)读取头部,确定块大小,块分配表的位置和数量。
(3)找到块分配表,定位对应块分配条目,读取条目的值。
(4)根据分配表条目的值,确定其值(数据块的扇区位图地址)对应的数据块,读取扇区位图,确定数据区域的扇区使用情况,然后读取数据;若分配表条目的值为 0xFFFFFFFF,说明该数据块未写入任何数据。
(1)读差异 VHD 文件的页脚区域,通过页脚区域的“类型”“数据偏移量”等字段,确定是否是差异 VHD 文件以及头部的位置在哪儿。
(2)读取头部,通过头部中的“母盘 UUID”、“母盘名称”及“母盘定位器”等字段确定母盘位置,然后确定差异虚拟硬盘本身的块大小,块分配表的位置和数量。
(3)找到母盘,重复可扩展模式下的寻址过程,找到所需要读取的数据;同时,其差异虚拟硬盘本身找寻自己的块分配表,定位对应块分配条目,读取条目的值。
(4)根据分配表条目的值,确定其值(数据块的扇区位图地址)对应的数据块,读取扇区位图,确定数据区域的扇区使用情况,然后读取数据;若分配表条目的值为 0xFFFFFFFF,说明该数据块未写入任何数据。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注丸趣 TV 行业资讯频道,感谢您对丸趣 TV 的支持。