本发明属于虚拟化与云计算技术领域,尤其涉及一种基于指令外部获取架构下的磁盘重定向方法。
技术背景
随着科学技术的不断进步,网络技术日益发达,虚拟化的应用逐渐普及。桌面虚拟化是指在作为数据中心的服务器上进行服务器虚拟化后,生成独立的虚拟桌面,再使用专有的虚拟桌面协议将虚拟桌面发送给终端设备的技术,用户可通过以太网输入用户名、密码和网管信息连接到虚拟机上,可通过网络访问自己的桌面系统。桌面虚拟化技术虽然为用户的移动办公带来了极大的便捷,但同时也带来了新的问题,如:如何将终端磁盘或者优盘中的数据,快速的重定向至云端的虚拟机中。
磁盘重定向技术可实现将终端磁盘或优盘中的数据重定向至虚拟机内,此一方面需先在虚拟机内创建与终端磁盘相同的虚拟磁盘,另一方面在虚拟机中操作虚拟磁盘时,实际是在虚拟机中先截获文件操作命令随后发送至终端,终端通过解析命令再对相应物理磁盘进行具体操作。而现有磁盘重定向技术中,往往在虚拟机中操作虚拟磁盘时,通过在文件系统层截获文件操作命令再发送至终端,此方式要求客户端与虚拟机内部的文件系统必须匹配,同时需要对不同的文件系统进行定制化开发,兼容性较差;申请号为201510575695.0的专利中提出了一种将终端磁盘重定向至云端服务器的方法,虽解决了文件系统的兼容性问题,但此方法无法应用于终端直连虚拟机方式的虚拟化架构,重定向的磁盘也无法被终端直连服务器的虚拟化架构中的虚拟机加载,如在kvm平台下,此方式重定向的磁盘无法被kvm虚拟机所使用,不适于基于kvm虚拟化的私有办公云架构。因此,如何解决上述问题是目前亟需解决的问题。
技术实现要素:
本发明提供一种基于指令外部获取架构下的磁盘重定向方法,旨在改善上述问题。
本发明提供一种基于指令外部获取架构下的磁盘重定向方法,所述方法包括:第一方面,在虚拟机内部创建虚拟分区,具体包括:(1)客户端与服务端建立网络连接后,客户端首先将需要重定向的磁盘分区进行锁定隐藏并获取该分区的物理信息,然后向服务端发送创建虚拟分区的命令;(2)服务端通过虚通道收到命令后进行解析,然后向磁盘驱动发送创建虚拟分区的请求;(3)虚拟机内部的磁盘驱动收到请求后,为虚拟分区分配资源创建虚拟分区,并将执行结果通过服务端应用程序发送到客户端;(4)客户端通过分析执行结果判断虚拟机内的虚拟分区是否可以进行i/o操作;第二方面,对虚拟分区文件进行操作,具体包括:(1)当用户在服务端对虚拟分区中文件进行操作时,虚拟机内的磁盘驱动会拦截操作请求,通过解析irp(i/orequestpackage)获取具体操作,然后创建命令并将其封装发给客户端;(2)客户端收到命令后,通过解析命令对对应物理分区进行具体操作,并实时将操作结果通过虚通道发送至虚拟机内。
上述本发明提供一种基于指令外部获取架构下的磁盘重定向方法,本申请通过在虚拟机内创建与终端磁盘相同的虚拟磁盘,对虚拟磁盘文件进行操作时利用虚拟磁盘驱动拦截文件操作命令并将命令发送至终端,终端解析命令后对相应物理磁盘进行具体操作,以达到在虚拟机内操作终端磁盘的效果;通过实现在磁盘级的数据重定向技术,可有效屏蔽上层文件系统的差异性,实现对不同文件系统的兼容;通过使用虚通道技术,可实现客户端至服务器再至虚拟机的数据流,从而解决了指令外部获取架构下重定向至服务器的虚拟磁盘无法被虚拟机加载的问题。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本发明较佳实施例中提供的服务器与用户终端进行交互的示意图;
图2为本发明的总体框架图;
图3为本发明第一实施例中提供的一种基于指令外部获取架构下的磁盘重定向方法的流程图;
图4为本发明第二实施例中提供的一种基于指令外部获取架构下的磁盘重定向方法的流程图;
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,是本发明较佳实施例中提供的服务端与客户端进行交互的示意图。所述指令内部获取是指客户端通过虚拟机的每个唯一ip地址直接连接虚拟机,连接后进行数据交互。所述指令外部获取是指客户端通过服务器的唯一ip地址连接服务器后,再通过服务器与虚拟机之间的虚通道进行数据交互。所述虚拟机100与服务器200通过虚通道进行数据交互,服务器200通过网络与一个或多个用户终端300进行通信连接,以进行数据通信或交互。所述服务器200可以是网络服务器、数据库服务器等。所述用户终端300可以是个人电脑(personalcomputer,pc)、平板电脑、智能手机、个人数字助理(personaldigitalassistant,pda)、智能穿戴设备等。
如图2所示,为本发明总体框架图,现对实现本发明总体框架图进行以下阐述。
为实现基于指令外部获取架构下的磁盘重定向方法,服务端与客户端通过网络协议建立连接后,用户选择需要重定向的磁盘,客户端获取该磁盘的基本信息并发送创建虚拟磁盘命令至服务端,服务器收到创建虚拟磁盘命令后,通过服务器与虚拟机的虚通道,将命令数据导入虚拟机,在虚拟机内生成和重定向的物理磁盘相同的虚拟磁盘;
当在服务端中操作虚拟磁盘中文件时,虚拟磁盘驱动拦截文件操作请求并解析,然后发送具体的文件操作命令至客户端,客户端通过解析文件操作命令,对相应磁盘进行具体操作,并实时将操作结果通过虚通道发送至虚拟机内。
请参阅图3,是本发明第一实施例中提供的一种基于指令外部获取架构下的磁盘重定向方法的流程图。本实施例中的磁盘重定向方法应用于基于kvm平台在虚拟机内部创建虚拟分区。下面将对图3所示的具体流程图进行详细阐述。
步骤301,获取客户端磁盘分区的物理信息,并将其与创建虚拟磁盘的命令进行封装包处理后发送至服务端;
其中,当用户指定物理分区进行重定向后,客户端将该物理分区进行锁定并隐藏,若该物理分区中某文件在终端上处于打开状态,则该文件不可再进行写、删除和重命名等操作,仅处于只读状态。
其中,所述客户端磁盘分区的物理信息包括磁盘类型、柱面数、柱面磁道、磁道扇区和扇区字节数等信息。
其中,所述封装包处理是指分别在服务端和客户端建立流式套接字,客户端用于连接服务端,服务端用于接收客户端连接,当服务端接收到客户端的连接后,创建会话线程,客户端将创建虚拟分区的命令封包后发往服务端,服务端的会话线程接收封装包后,进行解析后执行后续命令。
其中,源ip地址和目的ip地址以及源端口号和目的端口号的组合称为套接字,用于标识客户端请求的服务器。
步骤302,服务器收到封装包后通过虚通道将其转发至虚拟机内;
其中,所述虚通道是指服务器与虚拟机进行数据交互的虚拟通道。作为一种实施方式,这里的虚通道是指kvm的vmm(虚拟机监控器)层与虚拟机之间的虚通道。为实现虚通道,kvm-qmeu架构采用了virtio-serial技术,主要处理主机用户空间和虚拟机用户空间的数据传输。它主要包含两个部分:1.使用libvirt(一种实现linux虚拟化功能的api,支持kvm虚拟机监控程序)定义虚拟机时应包含添加virtio-serial的控制器设备,该设备就是qemu中模拟的名为virtio-pci的设备,该设备提供给虚拟机使用;2.虚拟机上安装一个字符设备驱动访问virtio-pci设备(名为“com.redhat.spice.0”的客户机接口,其为channel类型),代码示例:
<channeltype=′spicevmc′>
<targettype=′virtio′name=′com.redhat.spice.0′/>
<addresstype=′virtic-serial′controller=′0′bus=′0′port=′1′/>
</channel>
通过设置“address”将字符设备“com.redhat.spice.0”挂载在virtio-serial控制器上,将两者进行关联。
步骤303,服务端收到封装包后进行解析,然后向磁盘驱动发送创建虚拟分区的请求;
其中,服务端通过对封装包进行解析得到为创建虚拟分区的命令,然后向磁盘驱动发出请求。
步骤304,虚拟机内部的磁盘驱动收到请求后,为虚拟分区分配资源并创建虚拟分区,最后将执行结果通过服务端应用程序发送到客户端。
其中,虚拟分区的创建具体为虚拟磁盘驱动首先创建虚拟分区对象,其次将物理磁盘盘符关联到虚拟分区对象,然后将物理磁盘分区的基本信息关联到虚拟分区对象(基本信息包括物理磁盘分区大小、是否只读等),最后虚拟磁盘驱动创建i/o线程等,并将执行结果通过服务端应用程序返回给客户端。
其中,将执行结果通过服务端应用程序发送到客户端具体为首先通过虚通道将执行结果发送到服务器上,再由服务器将执行结果转发至客户端。
步骤305,客户端通过分析执行结果判断虚拟机内的虚拟分区是否可以进行i/o操作。
其中,客户端收到由服务器转发的执行结果后,对执行结果进行分析,若通过分析得到虚拟机内虚拟分区创建成功,则用户可以对虚拟分区中文件进行i/o操作;若通过分析得到虚拟机内虚拟分区创建失败,则用户不能对虚拟分区中文件进行i/o操作,且客户端终止当前磁盘重定向操作。
请参阅图4,是本发明第二实施例中提供的一种基于指令外部获取架构下的磁盘重定向方法的流程图。本实施例中的磁盘重定向方法应用于基于kvm平台在服务端对虚拟分区中文件进行操作。下面将对图4所示的具体流程图进行详细阐述。
步骤401,用户在服务端对虚拟分区中文件进行操作。
其中用户对虚拟分区中文件可以进行读文件、写文件、删除文件以及重命名文件等操作。
步骤402,虚拟机内的磁盘驱动拦截操作请求,通过解析后创建具体命令并将其发送至客户端。
其中虚拟磁盘驱动首先拦截用户对虚拟磁盘分区中文件的操作请求,其次通过解析i/orequestpackage获取到用户的具体操作指令,然后创建具体操作命令并将其封装,通过kvm的vmm(虚拟机监控器)层与虚拟机之间的虚通道将封装包发送至服务器,最后由服务器将封装包转发给客户端。
步骤403,客户端收到封装包后,通过解析命令执行相应操作,并实时将操作结果返回给虚拟机,完成文件操作。
其中,服务端先通过虚通道将封装包发往服务器,再由服务器将封装包转发至客户端。
其中,客户端通过解析命令后得到用户对虚拟分区中文件进行的具体操作,例如读写操作,客户端能够获取到读写的偏移位置和长度,客户端打开对应的物理磁盘,按扇区进行读写操作,操作完成后将读写结果封包发送到服务器,服务器再通过kvm的vmm层与虚拟机之间的虚通道将操作结果导入至虚拟机内部。
其中,虚拟机收到结果包后,将其下发到虚拟磁盘驱动,虚拟磁盘驱动解析结果包后,虚拟磁盘中文件与物理磁盘中文件进行状态同步后完成文件操作。
上述本发明提供一种基于指令外部获取架构下的磁盘重定向方法,本申请通过在虚拟机内创建与物理磁盘相同的虚拟磁盘,对虚拟磁盘文件进行操作时利用虚拟磁盘驱动拦截文件操作命令并将命令发送至终端,终端解析命令后对相应物理磁盘进行具体操作,以达到在虚拟机内操作终端磁盘的效果;通过实现在磁盘级的数据重定向技术,可有效屏蔽上层文件系统的差异性,实现对不同文件系统的兼容;通过使用虚通道技术,可实现客户端至服务器再至虚拟机的数据流,从而解决了指令外部获取架构下重定向至服务器的虚拟磁盘无法被虚拟机加载的问题。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。