原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://tasnrh.blog.51cto.com/4141731/1874774

Citrix PVS架构和产品中,位于最后端的存储硬盘采用的是虚拟化时代,微软开发的虚拟硬盘VHD/VHDXVHD/VHDX格式是一种公开可用的映像格式规范,允许将硬盘封装到单个文件中,以供操作系统作为虚拟硬盘以物理硬盘的方式使用。这些虚拟硬盘能够托管本地文件系统(NTFSFATexFATUDFS),同时支持标准硬盘和文件操作。VHD文件的最开始用于Windows7Windows Server 2008Virtual ServerWindows Virtual PC以及Hyper-V。随后Citrix PVS也使用了VHD虚拟硬盘。随着微软Windows Server 2012的发布以及新文件系统的开发,VHD格式需要适应这些变化。于是就在Windows Server 2012 中引入了一个新版本的 VHD 格式,称为 VHDX。新的VHDX支持最新的ReFS文件系统以及具有更大的存储容量。它还在电源故障期间提供数据损坏保护并且优化动态硬盘和差异硬盘的结构对齐方式,以防止在新的大型扇区在物理硬盘上性能降级。

我们今天来介绍下VHD/VHDX虚拟硬盘的相关技术:

1、它是如何与操作系统通信?

2VHD/VHDX虚拟硬盘的架构是什么,和物理的硬盘相比,VHD/VHDX虚拟硬盘有何不同? 

一、VHD/VHDX虚拟硬盘如何与操作系统通信?



VHD/VHDX我们可以说她是一个映像文件,也可以说是一个虚拟硬盘。因为她们本身对于文件系统,表示的是一个映像文件,对于硬盘系统,表示的是一个硬盘。因此微软的VHD/VHDX虚拟硬盘我们可以给出一个定义是:使用一个映像文件来模拟物理硬盘并且存储数据。

在我们的操作系统里面,文件系统会识别VHD/VHDX映像文件为.vhd.vhdx的文件。然后操作系统里面集成或安装的虚拟硬盘驱动系统通过加载VHD/VHDX映像文件操作,把映像文件虚拟成一个本地硬盘分区,像正常的物理分区一样进行读写操作。而卸载虚拟硬盘之后,该虚拟硬盘分区消失,唯一留下的就是映像文件。虚拟硬盘消失之后,系统就无法访问其中的文件,也不能对虚拟硬盘内存储的文件进行任何操作。

那么Citrix PVS架构下,Windows操作系统如果来识别和管理VHX/VHDX虚拟硬盘呢?

我们先来说VHD

Windows中对于VHD虚拟硬盘是通过VHDAPI来管理、挂载和创建的。其架构图如下所示:

PVS架构之VHD虚拟磁盘 一_Windows7

 

基于VDSVHD APIs

在图中,基于用户模式下,通过VDSWindows VHD API我们可以来管理、挂载、创建和销毁VHD虚拟硬盘。VDS就是Virtual Disk Service,中文简称虚拟磁盘服务,是一种Microsoft Windows服务,可根据最终用户,脚本和应用程序的请求执行查询和配置操作。该服务通过以下方式扩展Windows Server操作系统的现有存储功能:

  • Windows中现有的卷和磁盘管理功能提供API。其中就包含对于VHD虚拟硬盘功能提供相应API

  • 在单个API下统一卷管理和硬件冗余独立磁盘阵列(RAID)管理。

但是VDS不执行以下存储管理功能:

  • 硬件子系统管理,如温度监控或磁盘阵列性能统计的监控。

  • 存储区域网络(SAN)架构管理,例如基于主机的适配器(HBA)连接的存储分区。

为了进一步了解应用程序或者操作系统如何来调用VDS提供的VHD API,我们来看一下VDS的架构。

VDS定义三个接口:应用层和服务之间的单个接口,以及数据层中的服务和提供商程序之间的两个接口。下图显示了VDS的架构:


PVS架构之VHD虚拟磁盘 一_微软_02

N层架构使得VDS能够与文件系统功能协调,同步提供程序活动和在应用程序之间进行仲裁。在应用和提供者之间,VDS向应用提供统一的功能,即使一些底层提供者可能缺乏这样的一致性。

该服务实现了常用功能:格式化卷,添加和删除驱动器盘符或挂载文件夹,以及管理未分配的磁盘(没有分区信息的磁盘)。VDS还会向已注册的应用程序返回事件通知。

也就是说,在Citrix PVS架构下,PVS控制台可以通过调用WindowsVDSVHD API来管理存储于PVS物理硬盘上的VHD虚拟硬盘。

VirtDisk.dll组件

我们说操作系统通过调用存储系统的VDS VHD API来实现对于VHD虚拟硬盘的管理操作,但是具体的VHD API函数则存储于也是位于用户模式下VirtDisk.dll里面,该DLLVHD管理API的通用库。

内核模式驱动程序

以上的两个组件是位于用户模式下的组件,是可以供开发者进行开发自定义的模块。而位于内核模式的驱动程序,则不易被修改。在内核模式下,有三个组件:

  • VDrvRoot.sys :根虚拟驱动器枚举。

  • FsDepends.sys :嵌套卷依赖关系管理。

  • Vhdmp.sys VHD解析器和依赖属性提供程序。

用户模式下VirtDisk.dll通过向下调用内核模式下的这三个驱动程序实现真正的VHD映像文件操作。

这三个驱动是虚拟设备驱动,把一个映像文件虚拟成一个磁盘设备,对虚拟设备直接进行操作;同时它们又是一个过滤驱动,它修改IRP流【应用程序的各种操作通过内核的I/O管理器转变为各种IRP请求。虚拟磁盘驱动相应文件系统驱动程序的IRP对虚拟磁盘进行相应的读写操作。】,使IRP在传递过程中两次经过文件系统。把对文件的位置请求,经过处理,指定到真实的磁盘位置,并把命令和数据传递下去。由于虚拟磁盘驱动主要在内核态修改IRP流,所以用户态的读写流程保持不变,而内核态的IRP流要两次经过文件系统:第一次经过文件系统是操作虚拟磁盘内的文件,第二次经过文件系统是操作映像文件。

 

说完VHD,我们来介绍VHDX

VHDX格式由于是在WindowsServer 2012中才会被支持,而Windows Server2012对于存储功能的管理相较与2008是有所区别的。比如说在2008中不支持的硬件子系统管理,如温度监控或磁盘阵列性能统计的监控以及存储区域网络(SAN)架构管理,例如基于主机的适配器(HBA)连接的存储分区。在Windows Server 2012中均受到支持。我们可以这样理解,Wind我是 Server 2008就是一个标准的操作系统,而Windows Server 2012即是一个标准的操作系统又是一款存储操作系统。什么是存储操作系统呢?就和传统的存储控制器一样,其运行于存储控制器中,具有管理NASSAN功能的操作系统。即我们可以将Windows Server 2012安装到服务器中,并将该服务器当做存储控制器使用。

Windows Server 2012中,Windows Storage Management API取取代了VDS(Virtual Disk Service)的角色和位置。也就是说在Windows Server 2012以及R2中,对于VHDX虚拟硬盘的管理是通过WindowsStorage Management API来进行的。CitrixPVS控制台通过调用WindowsStorage Management API来最终进行VHDX文件的管理。具体的读写流程和VHD是一样的,只是相对应的服务有所区别而已。


 

本文出自 “我拿流年乱了浮生” 博客,请务必保留此出处http://tasnrh.blog.51cto.com/4141731/1874774