xen虚拟化自动识别windows虚拟机新增磁盘的实现方法与流程

文档序号:21407561发布日期:2020-07-07 14:41阅读:676来源:国知局
xen虚拟化自动识别windows虚拟机新增磁盘的实现方法与流程

本发明涉及云计算技术领域,一种基于xen虚拟化的windows虚拟机自动识别新增磁盘的方法。



背景技术:

在xen虚拟化中,向windows虚拟机新增磁盘,新增的磁盘不能直接使用。用户在windows系统里无法看到新增的磁盘。需要用户到虚拟机的磁盘管理器执行分配盘符,创建分区,格式化等的操作,新添加的磁盘才可以使用。这就给用户在使用上带来不方便,用户体验不太好。需要一种当新增磁盘到虚拟机时能自动创建逻辑磁盘,创建分区和格式化磁盘的机制。

windows虚拟机在使用过程中新增磁盘时需要执行如下操作:

1、虚拟化软件在宿主机创建磁盘文件;

2、把新创建的磁盘文件挂载到虚拟机;

3、用户进入虚拟机,在磁盘管理里分配盘符,创建分区并格式化等。

实现了类似功能的公开专利有:

专利号:cn201510940163.2,专利名称:《一种快速格式化与使用虚拟机磁盘的方法》。但本专利的实现方法有异于专利cn201510940163.2。而且更具备先进性。专利cn201510940163.2的技术方案是:

步骤1,在宿主机上面创建虚拟机磁盘格式文件;

步骤2,利用虚拟化工具将所创建的磁盘文件连接挂载到宿主机上面的一个块设备;

步骤3,利用块设备格式化工具格式化所述的块设备;

步骤4,卸载格式化后的块设备;

步骤5,将格式化后的虚拟机磁盘文件挂载给虚拟机使用。

此方案需要先把创建的磁盘文件连接挂载到缩主机,然后借助第三方的块设备格式化工具来格式化块设备,格式完后还需要卸载格式化后的块设备,再挂载给虚拟机。此技术方案的实现过程相对繁琐,而且需要借助mkfs,ntfs等外部工具。



技术实现要素:

为了克服现有技术的不足,本发明的目的在于提供一种在windows虚拟机里能自动识别并创建分区、格式化磁盘的方法,本发明能解决windows虚拟机新增磁盘无法直接使用,导致用户使用体验差,使用过程繁琐的问题。

本发明采用在xentools里新增磁盘处理模块的方法实现自动识别新增的磁盘。技术方案实现包括如下步骤:

步骤1,在windows虚拟机所使用的xentools里增加磁盘处理模块;

步骤2,磁盘处理模块向系统注册硬件事件回调;

步骤3,在宿主机上创建虚拟机磁盘文件;

步骤4,把磁盘文件挂载给虚拟机;

步骤5,虚拟机里的磁盘处理模块收到来自windows系统的新增磁盘通知;

步骤6,磁盘处理模块创建逻辑磁盘,创建分区,更新磁盘信息;

步骤7,磁盘处理模块格式化磁盘。

所述的xentools是xen虚拟化里安装到虚拟机的优化工具包,包括虚拟磁盘驱动,虚拟网络驱动,agent服务等。用于优化i/o性能、收集虚拟机信息和执行开关机等的高级控制。

所述的磁盘处理模块是自开发,集成在agent服务里的一个程序模块。

所述的向系统注册硬件事件回调是指利用windowsapi接口registerdevicenotification向系统注册硬件事件回调。

所述的宿主机是xen虚拟化中控制域dom0。

所述的磁盘文件是指在控制域创建的vdi格式的文件。

所述的挂载磁盘文件给虚拟机,可以是调用xen的接口xevbd-reate和xevbd-plug命令挂载。

本发明的有益效果在于:

1、提供一种新的、简单方便的在windows虚拟机自动识别新增磁盘的方法;

2、提高用户在使用云计算虚拟化过程中的用户体验。

附图说明

图1为本发明的流程图。

具体实施方式

下面,结合附图以及具体实施方式对本发明做进一步的描述:

请参见图1,图1为本发明提供的一种基于xen虚拟化的windows虚拟机自动识别新增磁盘实现方法的流程图。所述的方法包括:

1、添加自主开发的磁盘处理模块到xentools的agent服务。

所述的xentools是xen虚拟化里安装到虚拟机的优化工具包,包括虚拟磁盘驱动,虚拟网络驱动,agent服务等。用于优化i/o性能、收集虚拟机信息和执行开关机等的高级控制。

所述的agent服务是指安装在windows内部,随着windows系统启动而运行的后台服务,通过他可以对虚拟机进行管理。

2、磁盘处理模块向系统注册磁盘挂载通知的回调。向windows注册磁盘挂载通知回调可通过调用windowsapi已有的接口registerdevicenotification实现。

3、管理员在宿主机创建虚拟机磁盘文件并挂载到windows虚拟机。其方法可以通过调用xen现有的接口xevdi-create、xevbd-create、xevbd-plug。例如:

#xevdi-createname-label=newdisksr-uuid=8bf0e17f-4b41-484c-aab5-c7f696fbe9a5virtual-size=4gib。返回值:c5bc42d7-1329-486f-8cf3-dfeb42dd1533。

#xevbd-createvdi-uuid=c5bc42d7-1329-486f-8cf3-dfeb42dd1533device=2vm-uuid=e032b9d6-2658-45ad-b684-038b52165d6d。返回值:170311eb-e359-4b4a-9eeb-415ec1432e5a。

#xevbd-pluguuid=170311eb-e359-4b4a-9eeb-415ec1432e5a。

如上命令创建了名为netdisk的磁盘文件,并把此磁盘文件挂载到uuid为e032b9d6-2658-45ad-b684-038b52165d6d的虚拟机。

4、当新磁盘挂载到windows虚拟机时,磁盘处理模块就会收到windows系统发来的设备挂载通知。通知包含的标志类型如下:控制类型为:win32.service_control_deviceevent;事件类型为:win32.dbt_devicearrival;设备类型为:win32.dbt_devtyp_deviceinterface。如果通知的控制、事件和设备类型符合以上所述,则表明此通知是磁盘或卷的挂载通知。

收到挂载通知后判断是磁盘挂载通知还是卷挂载通知。可通过系统传进来的参数win32.dev_broadcast_deviceinterface_1结构里的dbcc_classguid来判断此通知是磁盘的挂载通知还是卷的挂载通知。若dbcc_classguid等于disk类的guid"53f56307-b6bf-11d0-94f2-00a0c91efb8b",则此通知是磁盘挂载通知;若dbcc_classguid等于volume类的guid"53f5630d-b6bf-11d0-94f2-00a0c91efb8b",则此通知是卷挂载通知。

所述的控制类型、事件类型、设备类型均为windows的api已有接口registerdevicenotification回调里所包含的参数。

所述的类型win32.service_control_deviceevent、win32.dbt_devicearrival、win32.dbt_devtyp_deviceinterface均为windows系统原有的定义。

所述的参数win32.dev_broadcast_deviceinterface_1为windows系统原有的数据结构。

所述的dbcc_classguid为windows系统原有数据结构win32.dev_broadcast_deviceinterface_1里的一个变量。

所述的disk类的guid"53f56307-b6bf-11d0-94f2-00a0c91efb8b"是windows系统中对磁盘类定义的guid。

所述的volume类的guid"53f5630d-b6bf-11d0-94f2-00a0c91efb8b"是windows系统中对卷定义的guid。

5、磁盘处理模块收到磁盘挂载通知后,判断此磁盘是否新磁盘。若是新磁盘则创建逻辑磁盘,创建分区,记录分区信息,然后通知系统更新磁盘信息。判断磁盘是否为新磁盘的方法,可通过查询磁盘现有分区的的方式实现。若磁盘没分区信息则为新磁盘。

6、创建了分区,更新磁盘信息后,磁盘处理模块会再次收到设备挂载通知,此时的通知会是卷挂载通知。收到通知后执行格式化操作。判断方法也是通过:控制类型为:win32.service_control_deviceevent;事件类型为:win32.dbt_devicearrival;设备类型为:win32.dbt_devtyp_deviceinterface。这三个类型判断并且卷的信息为步骤5所记录的分区信息,以保证此卷的挂载是步骤5创建分区,更新磁盘信息后所触发的。

对于本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1