一种基于虚拟磁盘映像逻辑分割的按需软件分发方法

文档序号:6607754阅读:168来源:国知局
专利名称:一种基于虚拟磁盘映像逻辑分割的按需软件分发方法
技术领域
本发明涉及计算机系统结构领域中的软件分发方法,尤其指一种基于虚拟磁盘逻 辑分割的按需软件分发方法。
背景技术
计算机软硬件和网络技术的高速发展,使得构建大规模计算环境成为可能,并 已广泛应用于网格计算、电子商务、网络教学等领域。大规模计算环境具有分布、异构和 规模大的特性,使得系统管理变得非常困难。大规模计算环境中的软件分发(Software Provision)就是一个突出的难点问题。在大规模计算环境中,需要为每个客户端安装和配 置多种软件,并需要实时或定时更新。一般采用基于每用户安装的软件分发方法,这种方法 是指逐一为每个用户安装操作系统以及多种应用软件,这种方法容易出错、难以自动实施, 并需要巨大的人力物力开销,已不适应大规模计算环境的快速部署要求。近年来,系统虚拟机(System Virtual Machine)因其透明性、隔离性、封装性、可 管理性的特性,成为研究和应用的热点。而基于虚拟机实现快速高效的软件分发方法成为 满足快速部署要求的一种解决方案。典型的虚拟机系统主要由底层硬件平台、虚拟机管理 器VMM (Virtual Machine Monitor)、客户操作系统(Guest OS)以及运行在其中的应用组 成。VMM是虚拟机的关键组件,它为上层客户操作系统提供虚拟化的硬件平台,并对客户操 作系统的状态具有完全封装的能力。VMM通常由动态二进制翻译器(DBT)、虚拟块设备驱动 (VBD)、用户交互(UIM)等模块组成,用户可通过用户交互接口(UII)调用用户交互模块的 功能,以查询和设置虚拟机的状态以及控制虚拟机的运行。基于虚拟机的软件分发方法首先通过VMM将虚拟机中客户操作系统的整个状态 封装到宿主机上的虚拟磁盘映像文件中,然后将虚拟磁盘映像文件传输到用户机器上,最 后用户通过VMM直接运行虚拟磁盘映像中的客户操作系统和已安装配置好的软件,不必重 新安装和配置软件。这种分发方法大大降低了管理员和用户的负担,并能加速分发过程。然而,目前这种基于虚拟机实现快速软件分发的方法仍然存在如下局限性1)安 装有操作系统和各种软件的虚拟磁盘映像文件大小通常在几个GB以上,直接传输整个虚 拟磁盘映像文件会导致较高的通信开销;2)不同用户有不同的软件需求,给每个用户分发 安装有所有软件的虚拟磁盘映像会带来磁盘空间的浪费和无谓的传输开销;3)如果虚拟 磁盘中的软件被更新,则不得不重新分发更新后的整个虚拟磁盘映像文件。斯坦福大学的C. Sapuntzakis等提出了基于COW(Copy-On-Write)机制的虚拟磁 盘映像物理分割方法来优化虚拟机在低速网络上的迁移。这种方法利用COW机制,将传统 的单个大尺寸虚拟磁盘映像物理分割成多个较小尺寸的虚拟磁盘映像(cow磁盘),每个 COW磁盘安装有多种软件,然后通过向用户分发较小尺寸的COW磁盘以降低虚拟机在网络 上迁移的开销。对于被更新的软件,只需向用户分发安装有新版本软件的COW磁盘即可。这 种方法仍然存在如下不足^COW磁盘分发开销为了避免生成较多的COW磁盘而导致较低的磁盘访问性能,COW磁盘中通常安装有较多种类的软件从而生成较大尺寸的COW磁盘,进而导致较高的COW 磁盘分发开销。^COW磁盘映像管理由于软件更新,不断有新的COW磁盘生成。频繁或长期的软 件更新会导致生成大量的COW磁盘映像,给虚拟磁盘映像的管理带来不便。软件更新软件更新导致COW磁盘不断地增多,从而使得虚拟磁盘的访问性能也 不断降低,因此难以支持持久(频繁或长期)的软件更新。由于软件更新而生成的大量老 版本COW磁盘在宿主机上占用的空间并未释放,因此会造成磁盘空间的浪费。

发明内容
本发明要解决的技术问题在于在满足用户软件使用种类和性能需求的前提下, 进一步降低虚拟机环境下软件部署的开销,简化虚拟磁盘映像的管理和避免磁盘空间的浪 费,支持持久的软件更新,满足大规模虚拟机环境动态构建和快速部署的需求。本发明的技术方案为采用客户/服务器的系统结构,服务器端存储所有虚拟机 的虚拟磁盘映像,并通过分别记录每种软件安装时占用的磁盘块,将传统的单个虚拟磁盘 映像在逻辑上分割成多个磁盘块集合;然后服务器端的软件分发服务程序和用户端的客户 程序根据用户的软件需求,通过客户/服务器模式的交互按需地向用户端分发软件对应的 磁盘块集合,以降低软件分发的开销,加快软件部署的速度。具体步骤为第一步,对虚拟机管理器VMM进行功能扩展,并将扩展后的VMM部署到服务器端和 客户端。1. 1在VMM的用户交互模块中扩展对安装到虚拟磁盘中的每种软件进行编号和命 名的模块。对软件进行编号和命名的规则如下(1)软件编号用于表示软件安装顺序的整数编号。操作系统软件是首先安装的 软件,VMM为其分配的默认软件编号为1 ;后续的编号按照安装的顺序依次由VMM分配给其 它软件。(2)运行态编号255 在虚拟机的非安装软件期间,VMM使用运行态编号255。(3)当前软件编号VMM在虚拟机运行过程中会维护一个当前软件编号。当正在 安装某种软件时,该软件对应的编号即为当前软件编号;否则,当前软件编号为运行态编号 255。当前软件编号需要变化时,VMM可自动分配或通过用户交互接口手工设置当前软件编号。(4)待用软件编号对于被卸载的软件,其软件编号成为待用软件编号。VMM为新 安装的软件分配软件编号时,优先从待用软件编号中按从小到大的顺序分配。(5)软件别名除了软件编号外,还可通过用户交互接口为每种安装的软件设置 一个便于记忆的别名以便于对软件进行操作。对于被卸载的软件,对应的软件别名会被置空。具体扩展方法如下1. 1. 1在用户交互模块中增加软件编号和别名管理子模块,该子模块对软件编号 和别名进行分配、设置、修改、删除和查询等操作。1. 1.2在用户交互接口中增加软件编号和别名管理命令,这些命令调用软件编号
6和别名管理子模块来实现对应的软件编号和别名管理功能。1. 1.3在用户交互接口中增加软件管理命令,这些命令用于设置软件管理方式 (安装/更新/卸载)以及每种模式下的相关参数。这些命令也会调用软件编号和别名 管理子模块的功能来执行软件编号和别名的自动管理功能,包括软件编号的自动分配和设 置,以及软件别名的置空等。1. 2在VMM的块设备驱动模块中扩展对软件块位图SBB (Software Block Bitmap) 和全局块分布位图⑶B(Global block Distribution Bitmap)、用户端缓存初始化功能、按 需取块功能的支持。具体扩展方法如下1. 2. 1在块设备驱动模块中增加软件块位图SBB读写子模块。软件块位图SBB是 宿主机上的一个文件,用于记录虚拟磁盘上安装的每种软件占用的磁盘块。其中每个字节 的每个位(bit)按顺序对应虚拟磁盘上的一个块,0表示对应的块未被占用,1表示被占用。 在每种软件安装过程开始时,块设备驱动模块根据其软件编号,生成一个对应的SBB ;软件 块位图读写子模块将软件安装过程中被写的磁盘块在SBB中对应的位置位。1. 2. 2在块设备驱动模块中增加全局块分布位图GDB读写子模块。全局块分布位 图GDB是宿主机上的一个文件,用于记录虚拟磁盘上的每个磁盘块所属软件的软件编号。 其中每个字节按照顺序对应虚拟磁盘上的一个块,字节的值即是占用该块的软件对应的软 件编号。GDB在创建虚拟机的虚拟磁盘时生成。在软件安装过程中被写的每个磁盘块,全局 块分布位图读写子模块将当前软件编号写入GDB中被写块对应的位置。1. 2. 3在块设备驱动模块中增加用户端缓存初始化子模块。该子模块在用户端 虚拟机启动过程中通过用户端的客户程序scLclient从服务器端获取可用软件的信息, 初始化每种软件在用户端的缓存状态,派生工作虚拟磁盘WVD (Work Virtual Disk),详见 3·5· Io1. 2. 4在块设备驱动模块中增加按需取块子模块。虚拟机在用户端运行过程中, 当虚拟机请求的块未在本地缓存或已被更新,按需取块子模块向宿主机中运行的客户程 序scLclient发出取块请求,sd_client再将取块请求转发给服务器端的服务程序sd_ server, sd_server从虚拟磁盘映像中读取请求的块,然后发送给sd_Client,sd_cIient最 后将接收到的块交给按需取块子模块,以满足虚拟机的读请求。1. 2. 5在块设备驱动模块中增加SHAl列表文件管理子模块。SHAl (Secure Hash Algorithm)列表文件记录每种软件所占用的磁盘块的160位SHAl哈希值,用于避免软件分 发过程中重传已经在用户端缓存的块。该子模块执行创建、删除、更新和查询软件的SHAl 列表文件的功能。第二步,服务器端对单个虚拟磁盘映像进行逻辑分割。逻辑分割是指将软件安装 到单个虚拟磁盘映像中,并通过每种软件对应的软件块位图文件SBB将单个虚拟磁盘从逻 辑上分成多个磁盘块集合,每个磁盘块集合中包含软件占用的磁盘块。具体步骤如下2. 1创建虚拟磁盘利用扩展的虚拟机管理器创建虚拟机的单个虚拟磁盘映像 文件,并生成空的全局块分布位图GDB。虚拟磁盘映像文件的文件头中包含全局块位图 GBB (Global Block Bitmap),每个磁盘块在GBB中对应一个位(bit),如果该块被占用,则对 应的位被置1。2. 2安装客户操作系统
(1)初始化用户交互接口调用软件管理命令设置软件管理方式为软件安装,软 件编号和别名管理子模块初始化当前软件编号为1,设置默认别名为os,创建客户操作系 统的软件块位图SBB。(2)安装客户操作系统在新创建的虚拟磁盘映像上启动虚拟机,安装客户操作 系统;安装过程中,VMM的块设备驱动模块每写一个块之后,首先将GBB中该块对应的位置 1,再调用SBB读写子模块将SBB中该块对应的位置1,最后调用GDB读写子模块将操作系统 的软件编号1写入全局块分布位图GDB中该块对应的位置。(3)操作系统安装结束后,用户交互接口调用软件管理命令通知VMM客户操作系 统安装过程结束,软件编号和别名管理子模块切换当前软件编号至运行态编号255。(4)重启或关闭虚拟机。2. 3安装、更新、卸载应用软件客户操作系统安装完之后再逐一安装用户需要的 软件。每种软件安装过程中,通过用户交互接口调用软件管理命令设置软件安装的开始和 结束时间点。软件编号根据软件安装的顺序,由VMM的软件编号和别名管理子模块自动递 增和分配;软件别名在软件安装开始之前通过用户交互接口手动设置。每种软件的安装包 含如下步骤(1)初始化用户交互接口调用软件管理命令设置软 件管理方式为软件安装,软 件编号和别名管理子模块分配软件编号并将该软件编号作为当前软件编号;调用软件编号 和别名管理命令设置对应的软件别名;块设备驱动模块创建该软件对应的SBB。(2)安装软件在虚拟机中启动软件安装程序,开始安装软件;安装软件过程中, 每写一个块,块设备驱动模块首先将GBB中该块对应的位置1,再调用SBB读写子模块将 SBB中该块对应的位置1,最后调用GDB读写子模块将当前软件编号写入GDB中该块对应的 位置。(3)结束软件安装结束后,用户交互接口调用软件管理命令通知VMM软件安装过 程结束,软件编号和别名管理子模块切换当前软件编号至运行态编号255。软件更新是虚拟机环境下一项常规的软件管理任务。软件更新分为全量更新和增 量更新两种类型。全量更新是利用软件完整的新版本对软件进行全面的更新;增量更新是 对已安装的旧版本软件进行部分更新。软件更新的具体步骤如下(1)初始化用户交互接口调用软件管理命令设置软件管理方式为软件更新,并 设置更新模式;调用软件编号和别名管理命令设置被更新软件的软件别名、查询软件别名 对应的软件编号,并将该软件编号作为当前软件编号。若为全量更新模式,块设备驱动模块 清空该软件编号对应的SBB。(2)更新软件在虚拟机中启动软件更新程序进行软件更新;软件更新过程中,每 写一个块,块设备驱动模块首先将GBB中该块对应的位置1,再调用SBB读写子模块将SBB 中该块对应的位置1,最后调用 读写子模块将当前软件编号写入GDB中该块对应的位置。(3)结束软件更新过程结束后,用户交互接口调用软件管理命令通知VMM软件更 新过程结束,软件编号和别名管理子模块切换当前软件编号至运行态编号255。卸载软件的具体步骤如下(1)初始化用户交互接口调用软件管理命令设置软件管理方式为软件卸载,并调用软件编号和别名管理命令设置要卸载软件的软件别名;软件编号和别名管理子模块查 询软件别名对应的软件编号,并将该软件编号作为当前软件编号。(2)卸载软件在虚拟机中启动软件卸载程序,开始卸载软件。(3)结束软件卸载过程结束后,用户交互接口调用软件管理命令通知VMM软件卸 载过程结束,软件编号和别名管理子模块将对应的软件编号加入待用软件编号集合,并置 空对应的软件别名,删除被卸载软件对应的SBB,切换当前软件编号至运行态编号255。2. 4生成软件的SHAl列表文件在服务器端,除了生成每种软件的SBB之外,还为 每种软件生成一个SHAl列表文件。在软件分发过程中,软件对应的SHAl列表文件也会部 分或全部缓存到用户端,称之为影子(Shadow)SHAl列表文件。SHAl列表文件包含如下内 容(1)时标软件安装的时间标志。将用户端的影子SHAl列表文件中的时标和服务 器端对应的的SHAl列表文件中的时标进行对比,判断用户端缓存的软件是否是最新版本。(2)空标志在服务器端,该标志无效;在用户端,表示对应的软件是否完全未缓存。(3)完整性标志在服务器端,该标志无效;在用户端,该标志用于表示软件的最 新版本是否完全缓存到用户端。(4)总块数软件占用的总块数。(5)有效块数在服务器端,等于总块数;在用户端,是缓存的最新版本的块数;当 用户端的有效块数和总块数相等时,将完整性标志置1。(6)有效块位图在服务器端,该字段无效;在用户端,位图中被置的位,表明对应 的块是时标所对应版本的最新块。(7)块SHAl值序列记录软件所占用的每个块的SHAl哈希值的序列。当服务器端的某种软件被更新,对应的SHAl列表文件也需要重新生成。SHAl列表 文件的生成方法是(1) VMM的块设备驱动模块中的SHAl列表文件管理子模块创建空的SHAl列表文 件。(2)对于SBB中每个置位的块,SHAl列表文件管理子模块读取虚拟磁盘中相应的 块并计算其SHAl值,然后将计算结果写入SHAl列表文件中该块对应的位置。(3) SHAl列表文件管理子模块设置SHAl列表文件中的时标、总块数和有效块数字 段。第三步,按需进行软件分发。服务器端根据每种软件的软件块位图SBB,将用户所 需软件占用的磁盘块传输到用户端,从而实现软件的按需分发。本发明开发的软件分发服 务程序scLserver和客户程序scLclient通过客户/服务器模式的交互,协同完成软件的 按需分发过程。scLserver运行在服务器端,scLclient运行在用户端。具体分发步骤如 下3. 1用户端的客户程序scLclient将服务器端的全局块分布位图⑶B拷贝到用户端。3. 2用户端的scLclient查询服务器端的可用软件,服务器端的服务程序sd_ server返回可用软件的软件别名列表。
9
3. 3用户端的scLclient向服务器端的scLserver提交用户的软件需求(即软件 别名列表),同时scLclient将用户端缓存的所请求软件的影子SHAl列表文件中的时标、空 标志、完整性标志发送给scLserver。3.4服务器端的8(1_%1^吐根据用户所请求软件的588,将用户所请求软件占用的 磁盘块发送给用户端的scLclient ;scLclient将接收到的磁盘块保存到用户端的影子虚 拟磁盘SVD (Shadow Virtual Disk)中,供用户端虚拟机使用。影子虚拟磁盘是用户端缓存 了服务器端虚拟磁盘中部分磁盘块的虚拟磁盘映像。具体步骤如下3. 4. 1服务器端的scLserver定位用户所请求软件的SBB和SHAl列表文件,向用 户端的scLclient发送用户所请求软件的SHAl列表文件中的的时标、总块数。3. 4. 2根据用户端影子SHAl列表文件中的相关标志,scLclient和服务器端的sd_ server通过完全推送模式或交互式推送模式将用户所请求软件占用的磁盘块传输到用户 端。若scLclient发现用户端的影子SHAl列表文件中的空标志位置位,即请求的软件 在用户端完全未缓存,则scLserver和scLclient通过完全推送模式将软件占用的磁盘块 传送到用户端。完全推送模式是指scLserver除了将软件占用的磁盘块发送给scLclient 之外,sd_server和sd_client之间无其它交互动作。具体步骤如下(1) sd_server和sd_client初始化进入完全推送模式。(2) scLserver根据所请求软件的SBB,从虚拟磁盘映像中读取SBB中被置位的块 以及从对应的SHAl列表文件中读取块的SHAl值,然后发送给scLclient。(3) scLclient将接收到的每个块保存到本地的SVD中,将影子GBB中该块对应的 位置1,将该块的SHAl值保存到软件对应的影子SHAl列表文件中该块对应的位置,将影子 SHAl列表文件中的有效块位图中该块对应的位置1,递增影子SHAl列表文件中的有效块 数。(4) scLclient清除用户端影子SHAl列表文件中的空标志。若scLclient发现用户端的影子SHAl列表文件中的完整性标志和空标志都未置 位,即请求的软件在用户端部分缓存,则scLserver和scLclient通过交互式推送模式,将 那些未缓存或已更新的块传输到用户端。交互式推送模式是指scLserver除了将软件占用 的磁盘块发送给scLclient之外,scLserver和scLclient之间还通过交互来避免传输已 经在用户端缓存的磁盘块。具体步骤如下(1) sd_server和sd_client初始化进入交互式推送模式。(2) scLserver将所请求软件的SBB中被置位的块号发送给scLclient。(3) scLclient将scLserver发送的块号和软件的影子SHAl列表文件中的有效块 位图中对应的位分别进行异或操作,将异或操作的结果发给scLserver ;(4)sd_server将异或操作结果中置1的块(即未在用户端缓存的块)直接发送给 sd—client ο(5)若影子SHAl列表文件中的时标和服务器端对应的SHAl列表文件中的时标不 匹配,则scLclient将同或操作的结果以及结果中置1的块的SHAl值一起被发送给sd_ server。scLserver将scLclient发送的同或操作结果中置1的块的SHAl值和服务器端的 对应块的SHAl值进行比较。若块的SHAl值不同,则scLserver重新从服务器端的虚拟磁盘映像中读取块以及从对应的SHAl列表文件中读取块的SHAl值,然后发送给scLclient ; 否则,不发送。(6) scLclient将接收到的块保存到本地的SVD中,将影子GBB中接收块对应的位 置1,将接收块的SHAl值保存到对应的影子SHAl列表文件中,将影子SHAl列表文件中的有 效块位图中对应的位置1,更新影子SHAl列表文件中的有效块数。3. 4. 3每分发完一种软件,用户端的scLclient将软件对应的影子SHAl列表文件 中的时标和总块数设置成和服务器端相同,并将完整性标志置1。3. 5在用户端,用户启动虚拟机,使用已在本地缓存的软件。具体步骤如下3. 5. IVMM的块设备驱动模块中的用户端缓存初始化子模块首先执行用户端缓存 初始化过程(1) scLclient从服务器端获取所有可用软件的软件别名、时标、总块数。(2)若一种软件对应的影子SHAl列表文件在用户端不存在,则块设备驱动模块创 建对应的影子SHAl列表文件并将其空标志置1,删除被卸载软件的SHAl列表文件。(3)块设备驱动模块逐一检查每种软件的影子SHAl列表文件。检查其中的时标字 段和服务器端是否相同,若时标不相同,将影子SHAl列表文件的时标和总块数设置成和服 务器端相同,清除完整性标志和有效块数,清空有效块位图。若空标志置位,且有效块数大 于总块数的10%,清除空标志。(4)若存在时标不同的软件或WVD不存在,则从SVD以COW(Copy-on-Write)模式 派生工作虚拟磁盘WVD (Work Virtual Disk)。3. 5. 2VMM从WVD启动虚拟机,用户从虚拟机中使用已在本地缓存或未缓存的软 件。虚拟机运行过程中,块设备驱动模块中的按需取块子模块从服务器端获取虚拟机 请求但未在本地缓存或在服务器端已经被更新的块。具体过程如下(1)按需取块子模块将块号作为参数向scLclient发出取块请求,sd_client向服 务器端的scLserver转发取块请求。(2) scLserver收到取块请求后,从虚拟磁盘映像中读取请求的块,从⑶B中查询 该块所属软件的软件编号,再从所属软件对应的SHAl列表文件中读取块的SHAl值,最后将 读取的块、所属软件的软件编号、块SHAl值发送给用户端的scLclient。(3)sd_client将接收到的块交给按需取块子模块,然后将该块写入SVD,将影子 GBB中该块对应的位置1,将该块的SHAl值写入所属软件对应的影子SHAl列表文件中,将 影子SHAl列表文件中有效块位图中该块对应的位置1,递增有效块数。(4)若影子SHAl列表文件中的有效块数和软件的总块数相等,sd_client将完整 性标志置1 ;若空标志置位,且有效块数大于总块数的10%,清除空标志。虚拟机运行过程中,当请求读虚拟磁盘上的块η时,块设备驱动模块读取块的具 体过程如下(1)当VMM接收到虚拟机对块η的请求后,块设备驱动模块查询WVD的块位图中对 应的位是否置位,若已置位,则直接从WVD中读取块η ;否则,查询影子GBB中对应的位是否 置位。WVD的块位图是和GBB相同的数据结构,用于记录虚拟机在用户端运行过程中写入 WVD中的块。每个块在块位图中对应一个位(bit),如果WVD包含该块,则对应的位被置1,
11否则为0。(2)若未置位,则块设备驱动模块通过按需取块的方法获取块η ;否则,块设备驱 动模块查询GDB该块所属的软件,设为Α。(3)块设备驱动模块查询软件A的影子SHAl列表文件中的完整性标志。若完整性 标志置位,则块设备驱动模块直接从SVD中读取块η ;否则,块设备驱动模块查询软件A的 影子SHAl列表文件中有效块位图中块η对应的位是否置位。(4)若已置位,则块设备驱动模块直接从SVD中读取块η ;否则,块设备驱动模块从 A的影子SHAl列表文件中读取块η的SHAl值,并通过sd_client和服务器端该块的SHAl 值进行比较。(5)若SHAl值相同,则块设备驱动模块直接从SVD中读取块n,将A的影子SHAl 列表文件中有效块位图中相应的位置1,递增有效块数;若SHAl值不相同,则块设备驱动模 块通过按需取块的方法重新获取块η。在虚拟机运行过程中,所有的写操作针对WVD进行。当VMM接收到虚拟机对块η 的写请求后,块设备驱动模块将块η写入WVD,然后将WVD的块位图中相应的位置1。与现有技术相比,采用本发明可以达到如下技术效果1.本发明对虚拟机管理器VMM进行了扩展,以支持针对单个大尺寸虚拟磁盘映像 的逻辑分割和软件的按需分发。VMM中扩展的用户交互模块对安装到虚拟磁盘中的每种软 件按照安装顺序分配唯一的软件编号和软件别名,并利用软件编号和别名对安装在虚拟磁 盘中的软件进行管理。VMM中扩展的块设备驱动模块通过引入了软件块位图SBB,以记录每 种软件占用磁盘块的信息,从而实现在单个软件的基本粒度上对单个虚拟磁盘映像的逻辑 分割,避免了基于COW磁盘的物理分割方法带来的在性能、虚拟机映像管理和软件管理方 面的问题。块设备驱动模块中扩展的按需取块子模块使得VMM能够在虚拟磁盘未完全缓存 到用户端的情况下,保证虚拟机的正常运行。2.本发明利用扩展的虚拟机管理器VMM,在服务器端通过记录每种软件所占用的 磁盘块的软件块位图文件SBB以实现对传统的单个虚拟磁盘映像的逻辑分割。在虚拟机安 装过程中,用户交互模块按照软件安装的顺序自动分配软件编号,通过用户交互接口设置 对应的软件别名、软件安装的开始和结束时间点。软件安装过程中,块设备驱动模块将软件 占用的磁盘块的信息记录在软件的块位图文件SBB中。当进行软件更新时,用户交互模块 切换当前软件编号至被更新软件对应的软件编号,然后执行正常的软件更新过程。当卸载 软件时,执行正常的卸载过程之后,用户交互模块删除对应的SBB。3.本发明利用全局块分布位图⑶B和软件的SBB,通过服务器端服务程序sd_ server和用户端客户程序scLclient的交互,能够仅仅将用户所需软件占用的磁盘块(SBB 中置位的块)传送到用户端,从而实现按需地软件分发。通过比较软件在服务器端的SHAl 列表文件和在用户端的影子SHAl列表文件,能够避免传输那些已在用户端缓存且未被更 新的块,从而降低软件分发的开销。4.本发明在用户端利用按需取块和本地缓存相结合的方式透明地为用户虚拟机 提供磁盘访问服务。在使用从服务器端获取的软件之前,首先派生工作虚拟磁盘WVD以保 存虚拟机运行期间对虚拟磁盘的修改。在虚拟机启动过程中,VMM的块设备驱动模块检查 和初始化用户端缓存的状态。在虚拟机运行过程中,块设备驱动模块直接从SVD中读取最新版本的块;否则,块设备驱动模块中的按需取块子模块从服务器端获取用户端未缓存或 者已被更新的块。综上所述,本发明利用扩展的虚拟机管理器,通过分别记录每种软件安装时占用 的磁盘块将传统的单个大尺寸的虚拟磁盘映像在逻辑上分割成多个小尺寸的磁盘块集合, 然后按需地分发给用户,以降低软件分发的开销,加快软件部署的速度。实验表明,本发明 支持虚拟机环境下低开销的,按需的软件分发。


图1是典型虚拟机系统的主要组件图。图2是本发明对VMM的用户交互模块扩展的主要子模块。图3是本发明对VMM的块设备驱动模块扩展的主要子模块。图4是本发明的总流程图。图5是本发明第二步服务器端单个虚拟磁盘映像逻辑分割的流程图。图6是本发明第三步中基于虚拟磁盘映像逻辑分割的按需软件分发流程图。图7是本发明用户端按需使用软件的流程图。
具体实施例方式以下结合附图对本发明做进一步详细说明。图4是本发明的总流程图。主要包括以下4个步骤1.对虚拟机管理器VMM进行功能扩展。对VMM的扩展包括在VMM的用户交互模块 中扩展的软件编号和别名管理子模块、软件编号和别名管理命令和软件管理命令。在VMM 的块设备驱动模块中扩展了软件块位图读写子模块、全局块分布位图读写子模块、用户端 缓存初始化子模块、按需取块子模块以及SHAl列表文件管理子模块。软件编号和别名管理 子模块对安装到虚拟磁盘中的软件按照安装顺序分配软件编号和软件别名;利用软件编号 和软件别名,VMM的用户交互接口对安装在虚拟磁盘中的软件执行安装/更新/卸载等管 理任务。VMM的块设备驱动模块通过引入软件块位图SBB,以记录每种软件占用磁盘块的信 息,从而实现在单个软件的基本粒度上对单个虚拟磁盘映像的逻辑分割。块设备驱动模块 中的按需取块子模块能够在虚拟磁盘未完全缓存到用户端的情况下,保证虚拟机的正常运 行。2.在服务器端对单个虚拟磁盘映像进行逻辑分割。利用扩展的虚拟机管理器 VMM,在服务器端虚拟机安装过程中通过记录每种软件安装时占用的磁盘块实现对单个虚 拟磁盘映像的逻辑分割。在虚拟机安装过程中,首先安装客户操作系统,VMM的用户交互模 块分配的软件编号默认为1。在后续其它每种软件的安装过程中,用户交互模块按照安装的 顺序自动分配软件编号,通过用户交互接口设置对应的软件别名、软件安装的开始和结束 时间点。软件安装过程中,块设备驱动模块将软件占用的磁盘块记录在软件的SBB中,并用 软件编号更新全局块分布位图GDB。软件更新时,用户交互模块首先切换当前软件编号至被 更新软件的软件编号,然后执行正常的软件更新过程。卸载软件时,执行正常的卸载过程之 后,用户交互模块删除对应的SBB。虚拟机安装完成之后,块设备驱动模块为每种软件生成 包含其占用磁盘块SHAl值的的SHAl列表文件,以避免软件分发过程中重传已经在用户端缓存的块。3.按需软件分发。利用全局块分布位图GDB和软件的SBB,服务器端服务程序sd_ server和用户端客户程序sd_client,通过完全推送和交互式推送两种模式,将用户所需 软件占用的磁盘块传送到用户端,从而实现按需地软件分发。通过比较块的SHAl值以避免 传输那些已在用户端缓存的块,从而降低软件分发的开销。4.用户端按需使用软件。在用户端,VMM的块设备驱动模块通过按需取块和本地 缓存相结合的方式透明地为用户虚拟机提供磁盘访问服务。首先派生工作虚拟磁盘WVD以 保存虚拟机运行期间对虚拟磁盘的修改。在虚拟机运行过程中,VMM的块设备驱动模块直 接从SVD中读取已在用户端缓存且是最新版本的块;否则,块设备驱动模块中的按需取块 子模块从服务器端获取未在本地缓存或者已被更新的块。图5是本发明中服务器端单个虚拟磁盘映像逻辑分割的流程图。主要过程为1.创建虚拟磁盘。2.安装客户操作系统首先通过VMM的用户交互接口设置软件编号为1,软件别名 为os ;VMM的块设备驱动模块创建客户操作系统的SBB ;启动虚拟机,开始安装客户操作系 统;安装过程中块设备驱动模块更新GBB、⑶B和SBB ;安装完成之后,通过VMM的用户交互 接口设置当前软件编号为255 ;重启虚拟机。3.通过VMM的用户交互接口通知VMM开始软件安装/更新/卸载过程。4.软件安装/更新/卸载。在服务器端执行软件安装/更新/卸载的软件管理任 务的同时,通过分别记录每种软件安装时占用的磁盘块,实现对单个虚拟磁盘的基于单个 软件粒度的逻辑分割。软件安装过程如下(I)VMM的用户交互接口调用软件编号和管理子模块设置软件的别名,并为安装的 软件分配软件编号。(2) VMM的块设备驱动模块创建软件的SBB。(3)在虚拟机中执行软件安装过程,同时块设备驱动模块更新GBB,SBB和⑶B。软 件更新过程如下(1)通过VMM的用户交互接口设置被更新软件的软件别名以及软件的更新模式
(全量更新/增量更新)。(2)若是全量更新,则VMM的块设备驱动模块首先清空SBB。(3)更新软件,同时块设备驱动模块更新GBB,SBB以及⑶B。软件卸载过程如下(1)通过VMM的用户交互接口设置被卸载软件的软件别名。(2)卸载软件。(3)通过VMM的用户交互接口设置被卸载软件的软件编号为待用软件编号并置空 软件别名,块设备驱动模块删除被卸载软件的SBB。5.软件安装/更新/卸载过程结束后,VMM的用户交互接口调用软件管理命令通 知VMM软件安装/更新/卸载过程结束,软件编号和别名管理子模块切换当前软件编号至 255。6.如果还有软件安装/更新/卸载任务,转步骤3。
14
7.生成被安装/更新软件的SHAl列表文件。图6是本发明中基于虚拟磁盘映像逻辑分割的按需软件分发流程图。主要过程 为1.⑶B传输用户端客户程序scLclient将服务器端的⑶B传输到用户端。2.查询服务器端可用软件用户端的scLclient向服务器端服务程序scLserver 查询可用软件,sd_server向scLclient返回可用软件的软件别名列表。3.用户端的scLclient向服务器端的scLserver提交软件请求;同时sd_cIient 还将用户端缓存的用户所请求软件的影子SHAl列表文件中的时标、空标志和完整性标志 发送给 sd_server04.服务器端的scLserver定位用户所请求软件的SBB和SHAl列表文件,向sd_ client发送用户所请求软件的时标、总块数。5.对请求的每一种软件,scLclient检查其在用户端是否缓存过。若一种软件在 用户端完全未缓存,即其SHAl列表文件中的空标志置位,则scLserver和scLclient通过 完全推送模式将用户所请求软件占用的磁盘块发送给用户端;否则,通过交互式推送模式 只发送未在用户端缓存或被更新的块。完全推送模式服务程序scLserver根据软件的SBB,从虚拟磁盘映像中读取软 件占用的的块以及从对应的SHAl列表文件中读取块的SHAl值,然后发送给客户程序sd_ client ο交互式推送模式包含如下步骤(1) sd_server和sd_client初始化进入交互式推送模式。(2) scLserver根据软件的SBB,将软件占用块的块号发送给scLclient。(3) scLclient根据服务器端发送的块号和软件的影子SHAl列表文件中的有效块 位图,判断哪些块未在用户端缓存,并通知scLserver。(4) scLserver将未在用户端缓存的块直接发送给scLclient。(5)若软件的影子SHAl列表文件中的时标和服务器端对应的时标不匹配,则sd_ client将该软件在用户端缓存块的SHAl值发送给scLserver。(6) scLserver比较已缓存块的SHAl值和服务器端的是否相同。若一个块的SHAl 值不同,则重新从服务器端的虚拟磁盘中读取该块,并发送给用户端;否则,不发送。6. scLclient将接收到的块保存到SVD中,将块的SHAl值保存到对应的影子SHAl 列表文件中,更新GBB和影子SHAl列表文件中的有效块位图、有效块数。7.每传输完一种软件,scLclient将对应的影子SHAl列表文件中的时标和总块数 设置成和服务器端相同,并将完整性标志置1。8.继续分发下一种用户请求的软件,转步骤5。图7是本发明用户端按需使用软件的流程图。主要过程为1.用户端启动虚拟机,VMM的块设备驱动模块通过scLclient从服务器端获取所 有可用软件的软件别名、时标、总块数。2.块设备驱动模块检查每种软件对应的影子SHAl列表文件是否存在;若不存在, 则创建影子SHAl列表文件,并将空标志置1 ;删除被卸载软件对应的SHAl列表文件。3.块设备驱动模块检查每个影子SHAl列表文件的时标和服务器端是否相同;若时标不同,将影子SHAl列表文件的时标和总块数设置成和服务器端相同,清除完整性标 志和有效块数,清空有效块位图;若空标志置位,且有效块数大于总块数的10%,清除空标
ο4.若存在时标不同的软件或WVD不存在,则块设备驱动模块派生新的WVD。5.在虚拟机运行过程中,若是写块,则块设备驱动模块直接将块写入WVD ;若是读 块,则首先查询WVD中对应的位是否置位;若已置位,则直接从WVD中读取块。6.若WVD中对应的位未置位,则块设备驱动模块查询GBB中对应的位是否置位。 若未置位,则块设备驱动模块中的按需取块子模块从服务器端获取块,转步骤12。7.若GBB中对应的位已置位,则块设备驱动模块查询⑶B该块所属的软件。8.块设备驱动模块查询所属软件的SHAl列表文件中的完整性标志。若完整性标 志置位,则块设备驱动模块直接从SVD中读取该块。9.若完整性标志未置位,则块设备驱动模块查询SHAl列表文件中有效块位图中 对应的位。若已置位,则块设备驱动模块直接从SVD中读取块。10.若有效块位图中对应的位未置位,则块设备驱动模块通过scLclient将影子 SHAl列表文件中该块对应的SHAl值和服务器端该块的SHAl值进行比较。若SHAl值相同, 则块设备驱动模块直接从SVD中读取该块。11.若块的SHAl值不同,则块设备驱动模块的按需取块子模块从服务器端获取 块。12.用户端的scLclient将从服务器端获取的块的SHAl值写入本地的影子SHAl 列表文件中,并置位有效块位图中对应的位,递增有效块数。13.若还有读/写请求,转步骤5。
1权利要求
一种基于虚拟磁盘映像逻辑分割的按需软件分发方法,其特征在于采用客户/服务器的系统结构,服务器端存储所有虚拟机的虚拟磁盘映像,并通过分别记录每种软件安装时占用的磁盘块将传统的单个虚拟磁盘映像在逻辑上分割成多个磁盘块集合;然后服务器端的软件分发服务程序和用户端的客户程序根据用户的软件需求,通过客户/服务器模式的交互按需地向用户端分发软件对应的磁盘块集合,具体步骤为第一步,对虚拟机管理器VMM(Virtual Machine Monitor)进行功能扩展,并将扩展后的VMM部署到服务器端和客户端;1.1在VMM的用户交互模块中扩展对安装到虚拟磁盘中的每种软件进行编号和命名的模块;1.2在VMM的块设备驱动模块中扩展对软件块位图SBB(Software Block Bitmap)和全局块分布位图GDB(Global block Distribution Bitmap)、用户端缓存初始化功能、按需取块功能的支持;第二步,服务器端对单个虚拟磁盘映像进行逻辑分割;逻辑分割是指将软件安装到单个虚拟磁盘映像中,并通过每种软件对应的软件块位图文件SBB将单个虚拟磁盘从逻辑上分成多个磁盘块集合,每个磁盘块集合中包含软件占用的磁盘块,步骤如下2.1创建虚拟磁盘利用扩展的虚拟机管理器创建虚拟机的单个虚拟磁盘映像文件,并生成空的全局块分布位图GDB;2.2安装客户操作系统;2.3安装、更新、卸载应用软件;2.4生成软件的SHA1列表文件在服务器端,为每种软件生成一个SHA1列表文件;第三步,按需进行软件分发;服务器端根据每种软件的软件块位图SBB,将用户所需软件占用的磁盘块传输到用户端,从而实现软件的按需分发,步骤如下3.1用户端的客户程序sd_client将服务器端的全局块分布位图GDB拷贝到用户端;3.2用户端的sd_client查询服务器端的可用软件,服务器端的服务程序sd_server返回可用软件的软件别名列表;3.3用户端的sd_client向服务器端的sd_server提交用户的软件需求,即软件别名列表,同时sd_client将用户端缓存的所请求软件的影子SHA1列表文件中的时标、空标志、完整性标志发送给sd_server;3.4服务器端的sd_server根据用户所请求软件的SBB,将用户所请求软件占用的磁盘块发送给用户端的sd_client;sd_client将接收到的磁盘块保存到用户端的影子虚拟磁盘SVD(Shadow Virtual Disk)中,供用户端虚拟机使用。
2.根据权利要求1所述的一种基于虚拟磁盘映像逻辑分割的按需软件分发方法,其特 征在于在VMM的用户交互模块中扩展对安装到虚拟磁盘中的每种软件进行编号和命名的 模块,具体扩展方法如下(1)在用户交互模块中增加软件编号和别名管理子模块,该子模块对软件编号和别名 进行分配、设置、修改、删除和查询操作;(2)在用户交互接口中增加软件编号和别名管理命令,这些命令调用软件编号和别名 管理子模块来实现对应的软件编号和别名管理功能;(3)在用户交互接口中增加软件管理命令,这些命令用于设置软件管理方式和每种模式下的相关参数,以及调用软件编号和别名管理子模块的功能来执行软件编号和别名的自 动管理功能。
3.根据权利要求1所述的一种基于虚拟磁盘映像逻辑分割的按需软件分发方法,其特 征在于在VMM的块设备驱动模块中扩展对软件块位图SBB (Software Block Bitmap)和全 局块分布位图⑶B (Global block Distribution Bitmap)、用户端缓存初始化功能、按需取 块功能的支持,具体扩展方法如下(1)在块设备驱动模块中增加软件块位图SBB读写子模块,软件块位图SBB是宿主机上 的一个文件,用于记录虚拟磁盘上安装的每种软件占用的磁盘块;(2)在块设备驱动模块中增加全局块分布位图GDB读写子模块,全局块分布位图GDB是 宿主机上的一个文件,用于记录虚拟磁盘上的每个磁盘块所属软件的软件编号;(3)在块设备驱动模块中增加用户端缓存初始化子模块;(4)在块设备驱动模块中增加按需取块子模块;(5)在块设备驱动模块中增加SHAl列表文件管理子模块。
4.根据权利要求1所述的一种基于虚拟磁盘映像逻辑分割的按需软件分发方法,其特 征在于软件安装、更新、卸载过程如下软件安装过程如下(1)VMM的用户交互接口调用软件编号和管理子模块设置软件的别名,并为安装的软件 分配软件编号;(2)VMM的块设备驱动模块创建软件的SBB ;(3)在虚拟机中执行软件安装过程,同时块设备驱动模块更新GBB,SBB和GDB;软件更新过程如下(1)通过VMM的用户交互接口设置被更新软件的软件别名以及软件的更新模式,全量 更新/增量更新;(2)若是全量更新,则VMM的块设备驱动模块首先清空SBB;(3)更新软件,同时块设备驱动模块更新GBB,SBB以及⑶B;软件卸载过程如下(1)通过VMM的用户交互接口设置被卸载软件的软件别名;(2)卸载软件;(3)通过VMM的用户交互接口设置被卸载软件的软件编号为待用软件编号并置空软件 别名,块设备驱动模块删除被卸载软件的SBB。
5.根据权利要求1所述的一种基于虚拟磁盘映像逻辑分割的按需软件分发方法,其特 征在于完全推送模式、交互式推送模式步骤为完全推送模式步骤服务程序scLserver根据软件的SBB,从虚拟磁盘映像中读取软件占用的的块以及从 对应的SHAl列表文件中读取块的SHAl值,然后发送给客户程序scLclient ;交互式推送模式包含如下步骤(1)sd_server和sd_client初始化进入交互式推送模式;(2)scLserver根据软件的SBB,将软件占用块的块号发送给scLclient ;(3)scLclient根据服务器端发送的块号和软件的影子SHAl列表文件中的有效块位图,判断哪些块未在用户端缓存,并通知scLserver ;(4)scLserver将未在用户端缓存的块直接发送给sd_cIient ;(5)若软件的影子SHAl列表文件中的时标和服务器端对应的时标不匹配,则sd_ client将该软件在用户端缓存块的SHAl值发送给scLserver ;(6)sd_server比较已缓存块的SHAl值和服务器端的是否相同。若一个块的SHAl值不 同,则重新从服务器端的虚拟磁盘中读取该块,并发送给用户端;否则,不发送。
全文摘要
本发明公开了一种基于虚拟磁盘映像逻辑分割的按需软件分发方法。采用客户/服务器的系统结构,服务器端存储所有虚拟机的虚拟磁盘映像,并通过分别记录每种软件安装时占用的磁盘块将传统的单个虚拟磁盘映像在逻辑上分割成多个磁盘块集合;然后服务器端的软件分发服务程序和用户端的客户程序根据用户的软件需求,通过客户/服务器模式的交互按需地向用户端分发软件对应的磁盘块集合,以降低软件分发的开销,加快软件部署的速度。
文档编号G06F9/455GK101916172SQ201010254398
公开日2010年12月15日 申请日期2010年8月17日 优先权日2010年8月17日
发明者肖侬, 蔡志平, 陈斌 申请人:中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1