著录项信息
专利名称 | 一种基于虚拟磁盘映像逻辑分割的按需软件分发方法 |
申请号 | CN201010254398.3 | 申请日期 | 2010-08-17 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2010-12-15 | 公开/公告号 | CN101916172A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F3/06 | IPC分类号 | G;0;6;F;3;/;0;6;;;G;0;6;F;9;/;4;5;5查看分类表>
|
申请人 | 中国人民解放军国防科学技术大学 | 申请人地址 | 湖南省长沙市砚瓦池正街47号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国人民解放军国防科学技术大学 | 当前权利人 | 中国人民解放军国防科学技术大学 |
发明人 | 肖侬;蔡志平;陈彬 |
代理机构 | 湖南省国防科技工业局专利中心 | 代理人 | 冯青 |
摘要
本发明公开了一种基于虚拟磁盘映像逻辑分割的按需软件分发方法。采用客户/服务器的系统结构,服务器端存储所有虚拟机的虚拟磁盘映像,并通过分别记录每种软件安装时占用的磁盘块将传统的单个虚拟磁盘映像在逻辑上分割成多个磁盘块集合;然后服务器端的软件分发服务程序和用户端的客户程序根据用户的软件需求,通过客户/服务器模式的交互按需地向用户端分发软件对应的磁盘块集合,以降低软件分发的开销,加快软件部署的速度。
一种基于虚拟磁盘映像逻辑分割的按需软件分发方法\n技术领域\n[0001] 本发明涉及计算机系统结构领域中的软件分发方法,尤其指一种基于虚拟磁盘逻辑分割的按需软件分发方法。\n背景技术\n[0002] 计算机软硬件和网络技术的高速发展,使得构建大规模计算环境成为可能,并已广泛应用于网格计算、电子商务、网络教学等领域。大规模计算环境具有分布、异构和规模大的特性,使得系统管理变得非常困难。大规模计算环境中的软件分发(Software Provision)就是一个突出的难点问题。在大规模计算环境中,需要为每个客户端安装和配置多种软件,并需要实时或定时更新。一般采用基于每用户安装的软件分发方法,这种方法是指逐一为每个用户安装操作系统以及多种应用软件,这种方法容易出错、难以自动实施,并需要巨大的人力物力开销,已不适应大规模计算环境的快速部署要求。\n[0003] 近年来,系统虚拟机(System Virtual Machine)因其透明性、隔离性、封装性、可管理性的特性,成为研究和应用的热点。而基于虚拟机实现快速高效的软件分发方法成为满足快速部署要求的一种解决方案。典型的虚拟机系统主要由底层硬件平台、虚拟机管理器VMM(Virtual Machine Monitor)、客户操作系统(Guest OS)以及运行在其中的应用组成。VMM是虚拟机的关键组件,它为上层客户操作系统提供虚拟化的硬件平台,并对客户操作系统的状态具有完全封装的能力。VMM通常由动态二进制翻译器(DBT)、虚拟块设备驱动(VBD)、用户交互(UIM)等模块组成,用户可通过用户交互接口(UII)调用用户交互模块的功能,以查询和设置虚拟机的状态以及控制虚拟机的运行。\n[0004] 基于虚拟机的软件分发方法首先通过VMM将虚拟机中客户操作系统的整个状态封装到宿主机上的虚拟磁盘映像文件中,然后将虚拟磁盘映像文件传输到用户机器上,最后用户通过VMM直接运行虚拟磁盘映像中的客户操作系统和已安装配置好的软件,不必重新安装和配置软件。这种分发方法大大降低了管理员和用户的负担,并能加速分发过程。\n[0005] 然而,目前这种基于虚拟机实现快速软件分发的方法仍然存在如下局限性:1)安装有操作系统和各种软件的虚拟磁盘映像文件大小通常在几个GB以上,直接传输整个虚拟磁盘映像文件会导致较高的通信开销;2)不同用户有不同的软件需求,给每个用户分发安装有所有软件的虚拟磁盘映像会带来磁盘空间的浪费和无谓的传输开销;3)如果虚拟磁盘中的软件被更新,则不得不重新分发更新后的整个虚拟磁盘映像文件。\n[0006] 斯坦福大学的C.Sapuntzakis等提出了基于COW(Copy-On-Write)机制的虚拟磁盘映像物理分割方法来优化虚拟机在低速网络上的迁移。这种方法利用COW机制,将传统的单个大尺寸虚拟磁盘映像物理分割成多个较小尺寸的虚拟磁盘映像(COW磁盘),每个COW磁盘安装有多种软件,然后通过向用户分发较小尺寸的COW磁盘以降低虚拟机在网络上迁移的开销。对于被更新的软件,只需向用户分发安装有新版本软件的COW磁盘即可。这种方法仍然存在如下不足:\n[0007] ●COW磁盘分发开销:为了避免生成较多的COW磁盘而导致较低的磁盘访问性能,COW磁盘中通常安装有较多种类的软件从而生成较大尺寸的COW磁盘,进而导致较高的COW磁盘分发开销。\n[0008] ●COW磁盘映像管理:由于软件更新,不断有新的COW磁盘生成。频繁或长期的软件更新会导致生成大量的COW磁盘映像,给虚拟磁盘映像的管理带来不便。\n[0009] 软件更新:软件更新导致COW磁盘不断地增多,从而使得虚拟磁盘的访问性能也不断降低,因此难以支持持久(频繁或长期)的软件更新。由于软件更新而生成的大量老版本COW磁盘在宿主机上占用的空间并未释放,因此会造成磁盘空间的浪费。\n发明内容\n[0010] 本发明要解决的技术问题在于:在满足用户软件使用种类和性能需求的前提下,进一步降低虚拟机环境下软件部署的开销,简化虚拟磁盘映像的管理和避免磁盘空间的浪费,支持持久的软件更新,满足大规模虚拟机环境动态构建和快速部署的需求。\n[0011] 本发明的技术方案为:采用客户/服务器的系统结构,服务器端存储所有虚拟机的虚拟磁盘映像,并通过分别记录每种软件安装时占用的磁盘块,将传统的单个虚拟磁盘映像在逻辑上分割成多个磁盘块集合;然后服务器端的软件分发服务程序和用户端的客户程序根据用户的软件需求,通过客户/服务器模式的交互按需地向用户端分发软件对应的磁盘块集合,以降低软件分发的开销,加快软件部署的速度。\n[0012] 具体步骤为:\n[0013] 第一步,对虚拟机管理器VMM进行功能扩展,并将扩展后的VMM部署到服务器端和客户端。\n[0014] 1.1在VMM的用户交互模块中扩展对安装到虚拟磁盘中的每种软件进行编号和命名的模块。对软件进行编号和命名的规则如下:\n[0015] (1)软件编号:用于表示软件安装顺序的整数编号。操作系统软件是首先安装的软件,VMM为其分配的默认软件编号为1;后续的编号按照安装的顺序依次由VMM分配给其它软件。\n[0016] (2)运行态编号255:在虚拟机的非安装软件期间,VMM使用运行态编号255。\n[0017] (3)当前软件编号:VMM在虚拟机运行过程中会维护一个当前软件编号。当正在安装某种软件时,该软件对应的编号即为当前软件编号;否则,当前软件编号为运行态编号\n255。当前软件编号需要变化时,VMM可自动分配或通过用户交互接口手工设置当前软件编号。\n[0018] (4)待用软件编号:对于被卸载的软件,其软件编号成为待用软件编号。VMM为新安装的软件分配软件编号时,优先从待用软件编号中按从小到大的顺序分配。\n[0019] (5)软件别名:除了软件编号外,还可通过用户交互接口为每种安装的软件设置一个便于记忆的别名以便于对软件进行操作。对于被卸载的软件,对应的软件别名会被置空。\n[0020] 具体扩展方法如下:\n[0021] 1.1.1在用户交互模块中增加软件编号和别名管理子模块,该子模块对软件编号和别名进行分配、设置、修改、删除和查询等操作。\n[0022] 1.1.2在用户交互接口中增加软件编号和别名管理命令,这些命令调用软件编号和别名管理子模块来实现对应的软件编号和别名管理功能。\n[0023] 1.1.3在用户交互接口中增加软件管理命令,这些命令用于设置软件管理方式(安装/更新/卸载)以及每种模式下的相关参数。这些命令也会调用软件编号和别名管理子模块的功能来执行软件编号和别名的自动管理功能,包括软件编号的自动分配和设置,以及软件别名的置空等。\n[0024] 1.2在VMM的块设备驱动模块中扩展对软件块位图SBB(Software Block Bitmap)和全局块分布位图GDB(Global block Distribution Bitmap)、用户端缓存初始化功能、按需取块功能的支持。具体扩展方法如下:\n[0025] 1.2.1在块设备驱动模块中增加软件块位图SBB读写子模块。软件块位图SBB是宿主机上的一个文件,用于记录虚拟磁盘上安装的每种软件占用的磁盘块。其中每个字节的每个位(bit)按顺序对应虚拟磁盘上的一个块,0表示对应的块未被占用,1表示被占用。\n在每种软件安装过程开始时,块设备驱动模块根据其软件编号,生成一个对应的SBB;软件块位图读写子模块将软件安装过程中被写的磁盘块在SBB中对应的位置位。\n[0026] 1.2.2在块设备驱动模块中增加全局块分布位图GDB读写子模块。全局块分布位图GDB是宿主机上的一个文件,用于记录虚拟磁盘上的每个磁盘块所属软件的软件编号。\n其中每个字节按照顺序对应虚拟磁盘上的一个块,字节的值即是占用该块的软件对应的软件编号。GDB在创建虚拟机的虚拟磁盘时生成。在软件安装过程中被写的每个磁盘块,全局块分布位图读写子模块将当前软件编号写入GDB中被写块对应的位置。\n[0027] 1.2.3在块设备驱动模块中增加用户端缓存初始化子模块。该子模块在用户端虚拟机启动过程中通过用户端的客户程序sd_client从服务器端获取可用软件的信息,初始化每种软件在用户端的缓存状态,派生工作虚拟磁盘WVD(Work Virtual Disk),详见\n3.5.1。\n[0028] 1.2.4在块设备驱动模块中增加按需取块子模块。虚拟机在用户端运行过程中,当虚拟机请求的块未在本地缓存或已被更新,按需取块子模块向宿主机中运行的客户程序sd_client发出取块请求,sd_client再将取块请求转发给服务器端的服务程序sd_server,sd_server从虚拟磁盘映像中读取请求的块,然后发送给sd_client,sd_client最后将接收到的块交给按需取块子模块,以满足虚拟机的读请求。\n[0029] 1.2.5在块设备驱动模块中增加SHA1列表文件管理子模块。SHA1(Secure Hash Algorithm)列表文件记录每种软件所占用的磁盘块的160位SHA1哈希值,用于避免软件分发过程中重传已经在用户端缓存的块。该子模块执行创建、删除、更新和查询软件的SHA1列表文件的功能。\n[0030] 第二步,服务器端对单个虚拟磁盘映像进行逻辑分割。逻辑分割是指将软件安装到单个虚拟磁盘映像中,并通过每种软件对应的软件块位图文件SBB将单个虚拟磁盘从逻辑上分成多个磁盘块集合,每个磁盘块集合中包含软件占用的磁盘块。具体步骤如下:\n[0031] 2.1创建虚拟磁盘:利用扩展的虚拟机管理器创建虚拟机的单个虚拟磁盘映像文件,并生成空的全局块分布位图GDB。虚拟磁盘映像文件的文件头中包含全局块位图GBB(Global Block Bitmap),每个磁盘块在GBB中对应一个位(bit),如果该块被占用,则对应的位被置1。\n[0032] 2.2安装客户操作系统\n[0033] (1)初始化:用户交互接口调用软件管理命令设置软件管理方式为软件安装,软件编号和别名管理子模块初始化当前软件编号为1,设置默认别名为os,创建客户操作系统的软件块位图SBB。\n[0034] (2)安装客户操作系统:在新创建的虚拟磁盘映像上启动虚拟机,安装客户操作系统;安装过程中,VMM的块设备驱动模块每写一个块之后,首先将GBB中该块对应的位置\n1,再调用SBB读写子模块将SBB中该块对应的位置1,最后调用GDB读写子模块将操作系统的软件编号1写入全局块分布位图GDB中该块对应的位置。\n[0035] (3)操作系统安装结束后,用户交互接口调用软件管理命令通知VMM客户操作系统安装过程结束,软件编号和别名管理子模块切换当前软件编号至运行态编号255。\n[0036] (4)重启或关闭虚拟机。\n[0037] 2.3安装、更新、卸载应用软件:客户操作系统安装完之后再逐一安装用户需要的软件。每种软件安装过程中,通过用户交互接口调用软件管理命令设置软件安装的开始和结束时间点。软件编号根据软件安装的顺序,由VMM的软件编号和别名管理子模块自动递增和分配;软件别名在软件安装开始之前通过用户交互接口手动设置。每种软件的安装包含如下步骤:\n[0038] (1)初始化:用户交互接口调用软件管理命令设置软件管理方式为软件安装,软件编号和别名管理子模块分配软件编号并将该软件编号作为当前软件编号;调用软件编号和别名管理命令设置对应的软件别名;块设备驱动模块创建该软件对应的SBB。\n[0039] (2)安装软件:在虚拟机中启动软件安装程序,开始安装软件;安装软件过程中,每写一个块,块设备驱动模块首先将GBB中该块对应的位置1,再调用SBB读写子模块将SBB中该块对应的位置1,最后调用GDB读写子模块将当前软件编号写入GDB中该块对应的位置。\n[0040] (3)结束:软件安装结束后,用户交互接口调用软件管理命令通知VMM软件安装过程结束,软件编号和别名管理子模块切换当前软件编号至运行态编号255。\n[0041] 软件更新是虚拟机环境下一项常规的软件管理任务。软件更新分为全量更新和增量更新两种类型。全量更新是利用软件完整的新版本对软件进行全面的更新;增量更新是对已安装的旧版本软件进行部分更新。软件更新的具体步骤如下:\n[0042] (1)初始化:用户交互接口调用软件管理命令设置软件管理方式为软件更新,并设置更新模式;调用软件编号和别名管理命令设置被更新软件的软件别名、查询软件别名对应的软件编号,并将该软件编号作为当前软件编号。若为全量更新模式,块设备驱动模块清空该软件编号对应的SBB。\n[0043] (2)更新软件:在虚拟机中启动软件更新程序进行软件更新;软件更新过程中,每写一个块,块设备驱动模块首先将GBB中该块对应的位置1,再调用SBB读写子模块将SBB中该块对应的位置1,最后调用GDB读写子模块将当前软件编号写入GDB中该块对应的位置。\n[0044] (3)结束:软件更新过程结束后,用户交互接口调用软件管理命令通知VMM软件更新过程结束,软件编号和别名管理子模块切换当前软件编号至运行态编号255。\n[0045] 卸载软件的具体步骤如下:\n[0046] (1)初始化:用户交互接口调用软件管理命令设置软件管理方式为软件卸载,并调用软件编号和别名管理命令设置要卸载软件的软件别名;软件编号和别名管理子模块查询软件别名对应的软件编号,并将该软件编号作为当前软件编号。\n[0047] (2)卸载软件:在虚拟机中启动软件卸载程序,开始卸载软件。\n[0048] (3)结束:软件卸载过程结束后,用户交互接口调用软件管理命令通知VMM软件卸载过程结束,软件编号和别名管理子模块将对应的软件编号加入待用软件编号集合,并置空对应的软件别名,删除被卸载软件对应的SBB,切换当前软件编号至运行态编号255。\n[0049] 2.4生成软件的SHA1列表文件:在服务器端,除了生成每种软件的SBB之外,还为每种软件生成一个SHA1列表文件。在软件分发过程中,软件对应的SHA1列表文件也会部分或全部缓存到用户端,称之为影子(Shadow)SHA1列表文件。SHA1列表文件包含如下内容:\n[0050] (1)时标:软件安装的时间标志。将用户端的影子SHA1列表文件中的时标和服务器端对应的的SHA1列表文件中的时标进行对比,判断用户端缓存的软件是否是最新版本。\n[0051] (2)空标志:在服务器端,该标志无效;在用户端,表示对应的软件是否完全未缓存。\n[0052] (3)完整性标志:在服务器端,该标志无效;在用户端,该标志用于表示软件的最新版本是否完全缓存到用户端。\n[0053] (4)总块数:软件占用的总块数。\n[0054] (5)有效块数:在服务器端,等于总块数;在用户端,是缓存的最新版本的块数;当用户端的有效块数和总块数相等时,将完整性标志置1。\n[0055] (6)有效块位图:在服务器端,该字段无效;在用户端,位图中被置的位,表明对应的块是时标所对应版本的最新块。\n[0056] (7)块SHA1值序列:记录软件所占用的每个块的SHA1哈希值的序列。\n[0057] 当服务器端的某种软件被更新,对应的SHA1列表文件也需要重新生成。SHA1列表文件的生成方法是:\n[0058] (1)VMM的块设备驱动模块中的SHA1列表文件管理子模块创建空的SHA1列表文件。\n[0059] (2)对于SBB中每个置位的块,SHA1列表文件管理子模块读取虚拟磁盘中相应的块并计算其SHA1值,然后将计算结果写入SHA1列表文件中该块对应的位置。\n[0060] (3)SHA1列表文件管理子模块设置SHA1列表文件中的时标、总块数和有效块数字段。\n[0061] 第三步,按需进行软件分发。服务器端根据每种软件的软件块位图SBB,将用户所需软件占用的磁盘块传输到用户端,从而实现软件的按需分发。本发明开发的软件分发服务程序sd_server和客户程序sd_client通过客户/服务器模式的交互,协同完成软件的按需分发过程。sd_server运行在服务器端,sd_client运行在用户端。具体分发步骤如下:\n[0062] 3.1用户端的客户程序sd_client将服务器端的全局块分布位图GDB拷贝到用户端。\n[0063] 3.2用户端的sd_client查询服务器端的可用软件,服务器端的服务程序sd_server返回可用软件的软件别名列表。\n[0064] 3.3用户端的sd_client向服务器端的sd_server提交用户的软件需求(即软件别名列表),同时sd_client将用户端缓存的所请求软件的影子SHA1列表文件中的时标、空标志、完整性标志发送给sd_server。\n[0065] 3.4服务器端的sd_server根据用户所请求软件的SBB,将用户所请求软件占用的磁盘块发送给用户端的sd_client;sd_client将接收到的磁盘块保存到用户端的影子虚拟磁盘SVD(Shadow Virtual Disk)中,供用户端虚拟机使用。影子虚拟磁盘是用户端缓存了服务器端虚拟磁盘中部分磁盘块的虚拟磁盘映像。具体步骤如下:\n[0066] 3.4.1服务器端的sd_server定位用户所请求软件的SBB和SHA1列表文件,向用户端的sd_client发送用户所请求软件的SHA1列表文件中的的时标、总块数。\n[0067] 3.4.2根据用户端影子SHA1列表文件中的相关标志,sd_client和服务器端的sd_server通过完全推送模式或交互式推送模式将用户所请求软件占用的磁盘块传输到用户端。\n[0068] 若sd_client发现用户端的影子SHA1列表文件中的空标志位置位,即请求的软件在用户端完全未缓存,则sd_server和sd_client通过完全推送模式将软件占用的磁盘块传送到用户端。完全推送模式是指sd_server除了将软件占用的磁盘块发送给sd_client之外,sd_server和sd_client之间无其它交互动作。具体步骤如下:\n[0069] (1)sd_server和sd_client初始化进入完全推送模式。\n[0070] (2)sd_server根据所请求软件的SBB,从虚拟磁盘映像中读取SBB中被置位的块以及从对应的SHA1列表文件中读取块的SHA1值,然后发送给sd_client。\n[0071] (3)sd_client将接收到的每个块保存到本地的SVD中,将影子GBB中该块对应的位置1,将该块的SHA1值保存到软件对应的影子SHA1列表文件中该块对应的位置,将影子SHA1列表文件中的有效块位图中该块对应的位置1,递增影子SHA1列表文件中的有效块数。\n[0072] (4)sd_client清除用户端影子SHA1列表文件中的空标志。\n[0073] 若sd_client发现用户端的影子SHA1列表文件中的完整性标志和空标志都未置位,即请求的软件在用户端部分缓存,则sd_server和sd_client通过交互式推送模式,将那些未缓存或已更新的块传输到用户端。交互式推送模式是指sd_server除了将软件占用的磁盘块发送给sd_client之外,sd_server和sd_client之间还通过交互来避免传输已经在用户端缓存的磁盘块。具体步骤如下:\n[0074] (1)sd_server和sd_client初始化进入交互式推送模式。\n[0075] (2)sd_server将所请求软件的SBB中被置位的块号发送给sd_client。\n[0076] (3)sd_client将sd_server发送的块号和软件的影子SHA1列表文件中的有效块位图中对应的位分别进行异或操作,将异或操作的结果发给sd_server;\n[0077] (4)sd_server将异或操作结果中置1的块(即未在用户端缓存的块)直接发送给sd_client。\n[0078] (5)若影子SHA1列表文件中的时标和服务器端对应的SHA1列表文件中的时标不匹配,则sd_client将同或操作的结果以及结果中置1的块的SHA1值一起被发送给sd_server。sd_server将sd_client发送的同或操作结果中置1的块的SHA1值和服务器端的对应块的SHA1值进行比较。若块的SHA1值不同,则sd_server重新从服务器端的虚拟磁盘映像中读取块以及从对应的SHA1列表文件中读取块的SHA1值,然后发送给sd_client;\n否则,不发送。\n[0079] (6)sd_client将接收到的块保存到本地的SVD中,将影子GBB中接收块对应的位置1,将接收块的SHA1值保存到对应的影子SHA1列表文件中,将影子SHA1列表文件中的有效块位图中对应的位置1,更新影子SHA1列表文件中的有效块数。\n[0080] 3.4.3每分发完一种软件,用户端的sd_client将软件对应的影子SHA1列表文件中的时标和总块数设置成和服务器端相同,并将完整性标志置1。\n[0081] 3.5在用户端,用户启动虚拟机,使用已在本地缓存的软件。具体步骤如下:\n[0082] 3.5.1VMM的块设备驱动模块中的用户端缓存初始化子模块首先执行用户端缓存初始化过程:\n[0083] (1)sd_client从服务器端获取所有可用软件的软件别名、时标、总块数。\n[0084] (2)若一种软件对应的影子SHA1列表文件在用户端不存在,则块设备驱动模块创建对应的影子SHA1列表文件并将其空标志置1,删除被卸载软件的SHA1列表文件。\n[0085] (3)块设备驱动模块逐一检查每种软件的影子SHA1列表文件。检查其中的时标字段和服务器端是否相同,若时标不相同,将影子SHA1列表文件的时标和总块数设置成和服务器端相同,清除完整性标志和有效块数,清空有效块位图。若空标志置位,且有效块数大于总块数的10%,清除空标志。\n[0086] (4)若存在时标不同的软件或WVD不存在,则从SVD以COW(Copy-on-Write)模式派生工作虚拟磁盘WVD(Work Virtual Disk)。\n[0087] 3.5.2VMM从WVD启动虚拟机,用户从虚拟机中使用已在本地缓存或未缓存的软件。\n[0088] 虚拟机运行过程中,块设备驱动模块中的按需取块子模块从服务器端获取虚拟机请求但未在本地缓存或在服务器端已经被更新的块。具体过程如下:\n[0089] (1)按需取块子模块将块号作为参数向sd_client发出取块请求,sd_client向服务器端的sd_server转发取块请求。\n[0090] (2)sd_server收到取块请求后,从虚拟磁盘映像中读取请求的块,从GDB中查询该块所属软件的软件编号,再从所属软件对应的SHA1列表文件中读取块的SHA1值,最后将读取的块、所属软件的软件编号、块SHA1值发送给用户端的sd_client。\n[0091] (3)sd_client将接收到的块交给按需取块子模块,然后将该块写入SVD,将影子GBB中该块对应的位置1,将该块的SHA1值写入所属软件对应的影子SHA1列表文件中,将影子SHA1列表文件中有效块位图中该块对应的位置1,递增有效块数。\n[0092] (4)若影子SHA1列表文件中的有效块数和软件的总块数相等,sd_client将完整性标志置1;若空标志置位,且有效块数大于总块数的10%,清除空标志。\n[0093] 虚拟机运行过程中,当请求读虚拟磁盘上的块n时,块设备驱动模块读取块的具体过程如下:\n[0094] (1)当VMM接收到虚拟机对块n的请求后,块设备驱动模块查询WVD的块位图中对应的位是否置位,若已置位,则直接从WVD中读取块n;否则,查询影子GBB中对应的位是否置位。WVD的块位图是和GBB相同的数据结构,用于记录虚拟机在用户端运行过程中写入WVD中的块。每个块在块位图中对应一个位(bit),如果WVD包含该块,则对应的位被置1,否则为0。\n[0095] (2)若未置位,则块设备驱动模块通过按需取块的方法获取块n;否则,块设备驱动模块查询GDB该块所属的软件,设为A。\n[0096] (3)块设备驱动模块查询软件A的影子SHA1列表文件中的完整性标志。若完整性标志置位,则块设备驱动模块直接从SVD中读取块n;否则,块设备驱动模块查询软件A的影子SHA1列表文件中有效块位图中块n对应的位是否置位。\n[0097] (4)若已置位,则块设备驱动模块直接从SVD中读取块n;否则,块设备驱动模块从A的影子SHA1列表文件中读取块n的SHA1值,并通过sd_client和服务器端该块的SHA1值进行比较。\n[0098] (5)若SHA1值相同,则块设备驱动模块直接从SVD中读取块n,将A的影子SHA1列表文件中有效块位图中相应的位置1,递增有效块数;若SHA1值不相同,则块设备驱动模块通过按需取块的方法重新获取块n。\n[0099] 在虚拟机运行过程中,所有的写操作针对WVD进行。当VMM接收到虚拟机对块n的写请求后,块设备驱动模块将块n写入WVD,然后将WVD的块位图中相应的位置1。\n[0100] 与现有技术相比,采用本发明可以达到如下技术效果:\n[0101] 1.本发明对虚拟机管理器VMM进行了扩展,以支持针对单个大尺寸虚拟磁盘映像的逻辑分割和软件的按需分发。VMM中扩展的用户交互模块对安装到虚拟磁盘中的每种软件按照安装顺序分配唯一的软件编号和软件别名,并利用软件编号和别名对安装在虚拟磁盘中的软件进行管理。VMM中扩展的块设备驱动模块通过引入了软件块位图SBB,以记录每种软件占用磁盘块的信息,从而实现在单个软件的基本粒度上对单个虚拟磁盘映像的逻辑分割,避免了基于COW磁盘的物理分割方法带来的在性能、虚拟机映像管理和软件管理方面的问题。块设备驱动模块中扩展的按需取块子模块使得VMM能够在虚拟磁盘未完全缓存到用户端的情况下,保证虚拟机的正常运行。\n[0102] 2.本发明利用扩展的虚拟机管理器VMM,在服务器端通过记录每种软件所占用的磁盘块的软件块位图文件SBB以实现对传统的单个虚拟磁盘映像的逻辑分割。在虚拟机安装过程中,用户交互模块按照软件安装的顺序自动分配软件编号,通过用户交互接口设置对应的软件别名、软件安装的开始和结束时间点。软件安装过程中,块设备驱动模块将软件占用的磁盘块的信息记录在软件的块位图文件SBB中。当进行软件更新时,用户交互模块切换当前软件编号至被更新软件对应的软件编号,然后执行正常的软件更新过程。当卸载软件时,执行正常的卸载过程之后,用户交互模块删除对应的SBB。\n[0103] 3.本发明利用全局块分布位图GDB和软件的SBB,通过服务器端服务程序sd_server和用户端客户程序sd_client的交互,能够仅仅将用户所需软件占用的磁盘块(SBB中置位的块)传送到用户端,从而实现按需地软件分发。通过比较软件在服务器端的SHA1列表文件和在用户端的影子SHA1列表文件,能够避免传输那些已在用户端缓存且未被更新的块,从而降低软件分发的开销。\n[0104] 4.本发明在用户端利用按需取块和本地缓存相结合的方式透明地为用户虚拟机提供磁盘访问服务。在使用从服务器端获取的软件之前,首先派生工作虚拟磁盘WVD以保存虚拟机运行期间对虚拟磁盘的修改。在虚拟机启动过程中,VMM的块设备驱动模块检查和初始化用户端缓存的状态。在虚拟机运行过程中,块设备驱动模块直接从SVD中读取最新版本的块;否则,块设备驱动模块中的按需取块子模块从服务器端获取用户端未缓存或者已被更新的块。\n[0105] 综上所述,本发明利用扩展的虚拟机管理器,通过分别记录每种软件安装时占用的磁盘块将传统的单个大尺寸的虚拟磁盘映像在逻辑上分割成多个小尺寸的磁盘块集合,然后按需地分发给用户,以降低软件分发的开销,加快软件部署的速度。实验表明,本发明支持虚拟机环境下低开销的,按需的软件分发。\n附图说明\n[0106] 图1是典型虚拟机系统的主要组件图。\n[0107] 图2是本发明对VMM的用户交互模块扩展的主要子模块。\n[0108] 图3是本发明对VMM的块设备驱动模块扩展的主要子模块。\n[0109] 图4是本发明的总流程图。\n[0110] 图5是本发明第二步服务器端单个虚拟磁盘映像逻辑分割的流程图。\n[0111] 图6是本发明第三步中基于虚拟磁盘映像逻辑分割的按需软件分发流程图。\n[0112] 图7是本发明用户端按需使用软件的流程图。\n具体实施方式\n[0113] 以下结合附图对本发明做进一步详细说明。\n[0114] 图4是本发明的总流程图。主要包括以下4个步骤:\n[0115] 1.对虚拟机管理器VMM进行功能扩展。对VMM的扩展包括在VMM的用户交互模块中扩展的软件编号和别名管理子模块、软件编号和别名管理命令和软件管理命令。在VMM的块设备驱动模块中扩展了软件块位图读写子模块、全局块分布位图读写子模块、用户端缓存初始化子模块、按需取块子模块以及SHA1列表文件管理子模块。软件编号和别名管理子模块对安装到虚拟磁盘中的软件按照安装顺序分配软件编号和软件别名;利用软件编号和软件别名,VMM的用户交互接口对安装在虚拟磁盘中的软件执行安装/更新/卸载等管理任务。VMM的块设备驱动模块通过引入软件块位图SBB,以记录每种软件占用磁盘块的信息,从而实现在单个软件的基本粒度上对单个虚拟磁盘映像的逻辑分割。块设备驱动模块中的按需取块子模块能够在虚拟磁盘未完全缓存到用户端的情况下,保证虚拟机的正常运行。\n[0116] 2.在服务器端对单个虚拟磁盘映像进行逻辑分割。利用扩展的虚拟机管理器VMM,在服务器端虚拟机安装过程中通过记录每种软件安装时占用的磁盘块实现对单个虚拟磁盘映像的逻辑分割。在虚拟机安装过程中,首先安装客户操作系统,VMM的用户交互模块分配的软件编号默认为1。在后续其它每种软件的安装过程中,用户交互模块按照安装的顺序自动分配软件编号,通过用户交互接口设置对应的软件别名、软件安装的开始和结束时间点。软件安装过程中,块设备驱动模块将软件占用的磁盘块记录在软件的SBB中,并用软件编号更新全局块分布位图GDB。软件更新时,用户交互模块首先切换当前软件编号至被更新软件的软件编号,然后执行正常的软件更新过程。卸载软件时,执行正常的卸载过程之后,用户交互模块删除对应的SBB。虚拟机安装完成之后,块设备驱动模块为每种软件生成包含其占用磁盘块SHA1值的的SHA1列表文件,以避免软件分发过程中重传已经在用户端缓存的块。\n[0117] 3.按需软件分发。利用全局块分布位图GDB和软件的SBB,服务器端服务程序sd_server和用户端客户程序sd_client,通过完全推送和交互式推送两种模式,将用户所需软件占用的磁盘块传送到用户端,从而实现按需地软件分发。通过比较块的SHA1值以避免传输那些已在用户端缓存的块,从而降低软件分发的开销。\n[0118] 4.用户端按需使用软件。在用户端,VMM的块设备驱动模块通过按需取块和本地缓存相结合的方式透明地为用户虚拟机提供磁盘访问服务。首先派生工作虚拟磁盘WVD以保存虚拟机运行期间对虚拟磁盘的修改。在虚拟机运行过程中,VMM的块设备驱动模块直接从SVD中读取已在用户端缓存且是最新版本的块;否则,块设备驱动模块中的按需取块子模块从服务器端获取未在本地缓存或者已被更新的块。\n[0119] 图5是本发明中服务器端单个虚拟磁盘映像逻辑分割的流程图。主要过程为:\n[0120] 1.创建虚拟磁盘。\n[0121] 2.安装客户操作系统:首先通过VMM的用户交互接口设置软件编号为1,软件别名为os;VMM的块设备驱动模块创建客户操作系统的SBB;启动虚拟机,开始安装客户操作系统;安装过程中块设备驱动模块更新GBB、GDB和SBB;安装完成之后,通过VMM的用户交互接口设置当前软件编号为255;重启虚拟机。\n[0122] 3.通过VMM的用户交互接口通知VMM开始软件安装/更新/卸载过程。\n[0123] 4.软件安装/更新/卸载。在服务器端执行软件安装/更新/卸载的软件管理任务的同时,通过分别记录每种软件安装时占用的磁盘块,实现对单个虚拟磁盘的基于单个软件粒度的逻辑分割。\n[0124] 软件安装过程如下:\n[0125] (1)VMM的用户交互接口调用软件编号和管理子模块设置软件的别名,并为安装的软件分配软件编号。\n[0126] (2)VMM的块设备驱动模块创建软件的SBB。\n[0127] (3)在虚拟机中执行软件安装过程,同时块设备驱动模块更新GBB,SBB和GDB。软件更新过程如下:\n[0128] (1)通过VMM的用户交互接口设置被更新软件的软件别名以及软件的更新模式(全量更新/增量更新)。\n[0129] (2)若是全量更新,则VMM的块设备驱动模块首先清空SBB。\n[0130] (3)更新软件,同时块设备驱动模块更新GBB,SBB以及GDB。\n[0131] 软件卸载过程如下:\n[0132] (1)通过VMM的用户交互接口设置被卸载软件的软件别名。\n[0133] (2)卸载软件。\n[0134] (3)通过VMM的用户交互接口设置被卸载软件的软件编号为待用软件编号并置空软件别名,块设备驱动模块删除被卸载软件的SBB。\n[0135] 5.软件安装/更新/卸载过程结束后,VMM的用户交互接口调用软件管理命令通知VMM软件安装/更新/卸载过程结束,软件编号和别名管理子模块切换当前软件编号至\n255。\n[0136] 6.如果还有软件安装/更新/卸载任务,转步骤3。\n[0137] 7.生成被安装/更新软件的SHA1列表文件。\n[0138] 图6是本发明中基于虚拟磁盘映像逻辑分割的按需软件分发流程图。主要过程为:\n[0139] 1.GDB传输:用户端客户程序sd_client将服务器端的GDB传输到用户端。\n[0140] 2.查询服务器端可用软件:用户端的sd_client向服务器端服务程序sd_server查询可用软件,sd_server向sd_client返回可用软件的软件别名列表。\n[0141] 3.用户端的sd_client向服务器端的sd_server提交软件请求;同时sd_client还将用户端缓存的用户所请求软件的影子SHA1列表文件中的时标、空标志和完整性标志发送给sd_server。\n[0142] 4.服务器端的sd_server定位用户所请求软件的SBB和SHA1列表文件,向sd_client发送用户所请求软件的时标、总块数。\n[0143] 5.对请求的每一种软件,sd_client检查其在用户端是否缓存过。若一种软件在用户端完全未缓存,即其SHA1列表文件中的空标志置位,则sd_server和sd_client通过完全推送模式将用户所请求软件占用的磁盘块发送给用户端;否则,通过交互式推送模式只发送未在用户端缓存或被更新的块。\n[0144] 完全推送模式:服务程序sd_server根据软件的SBB,从虚拟磁盘映像中读取软件占用的的块以及从对应的SHA1列表文件中读取块的SHA1值,然后发送给客户程序sd_client。\n[0145] 交互式推送模式包含如下步骤:\n[0146] (1)sd_server和sd_client初始化进入交互式推送模式。\n[0147] (2)sd_server根据软件的SBB,将软件占用块的块号发送给sd_client。\n[0148] (3)sd_client根据服务器端发送的块号和软件的影子SHA1列表文件中的有效块位图,判断哪些块未在用户端缓存,并通知sd_server。\n[0149] (4)sd_server将未在用户端缓存的块直接发送给sd_client。\n[0150] (5)若软件的影子SHA1列表文件中的时标和服务器端对应的时标不匹配,则sd_client将该软件在用户端缓存块的SHA1值发送给sd_server。\n[0151] (6)sd_server比较已缓存块的SHA1值和服务器端的是否相同。若一个块的SHA1值不同,则重新从服务器端的虚拟磁盘中读取该块,并发送给用户端;否则,不发送。\n[0152] 6.sd_client将接收到的块保存到SVD中,将块的SHA1值保存到对应的影子SHA1列表文件中,更新GBB和影子SHA1列表文件中的有效块位图、有效块数。\n[0153] 7.每传输完一种软件,sd_client将对应的影子SHA1列表文件中的时标和总块数设置成和服务器端相同,并将完整性标志置1。\n[0154] 8.继续分发下一种用户请求的软件,转步骤5。\n[0155] 图7是本发明用户端按需使用软件的流程图。主要过程为:\n[0156] 1.用户端启动虚拟机,VMM的块设备驱动模块通过sd_client从服务器端获取所有可用软件的软件别名、时标、总块数。\n[0157] 2.块设备驱动模块检查每种软件对应的影子SHA1列表文件是否存在;若不存在,则创建影子SHA1列表文件,并将空标志置1;删除被卸载软件对应的SHA1列表文件。\n[0158] 3.块设备驱动模块检查每个影子SHA1列表文件的时标和服务器端是否相同;若时标不同,将影子SHA1列表文件的时标和总块数设置成和服务器端相同,清除完整性标志和有效块数,清空有效块位图;若空标志置位,且有效块数大于总块数的10%,清除空标志。\n[0159] 4.若存在时标不同的软件或WVD不存在,则块设备驱动模块派生新的WVD。\n[0160] 5.在虚拟机运行过程中,若是写块,则块设备驱动模块直接将块写入WVD;若是读块,则首先查询WVD中对应的位是否置位;若已置位,则直接从WVD中读取块。\n[0161] 6.若WVD中对应的位未置位,则块设备驱动模块查询GBB中对应的位是否置位。\n若未置位,则块设备驱动模块中的按需取块子模块从服务器端获取块,转步骤12。\n[0162] 7.若GBB中对应的位已置位,则块设备驱动模块查询GDB该块所属的软件。\n[0163] 8.块设备驱动模块查询所属软件的SHA1列表文件中的完整性标志。若完整性标志置位,则块设备驱动模块直接从SVD中读取该块。\n[0164] 9.若完整性标志未置位,则块设备驱动模块查询SHA1列表文件中有效块位图中对应的位。若已置位,则块设备驱动模块直接从SVD中读取块。\n[0165] 10.若有效块位图中对应的位未置位,则块设备驱动模块通过sd_client将影子SHA1列表文件中该块对应的SHA1值和服务器端该块的SHA1值进行比较。若SHA1值相同,则块设备驱动模块直接从SVD中读取该块。\n[0166] 11.若块的SHA1值不同,则块设备驱动模块的按需取块子模块从服务器端获取块。\n[0167] 12.用户端的sd_client将从服务器端获取的块的SHA1值写入本地的影子SHA1列表文件中,并置位有效块位图中对应的位,递增有效块数。\n[0168] 13.若还有读/写请求,转步骤5。
法律信息
- 2015-10-14
未缴年费专利权终止
IPC(主分类): G06F 3/06
专利号: ZL 201010254398.3
申请日: 2010.08.17
授权公告日: 2011.08.24
- 2012-04-18
著录事项变更
发明人由肖侬 陈斌 蔡志平变更为肖侬 陈彬 蔡志平
- 2011-08-24
- 2011-02-02
实质审查的生效
IPC(主分类): G06F 3/06
专利申请号: 201010254398.3
申请日: 2010.08.17
- 2010-12-15
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2005-07-27
|
2004-07-05
| | |
2
| |
2007-03-07
|
2006-08-23
| | |
3
| |
2006-07-05
|
2005-06-20
| | |
4
| |
2008-09-24
|
2007-03-23
| | |
5
| | 暂无 |
2002-04-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |