虚拟机升级方法及装置与流程

文档序号:11774115阅读:286来源:国知局
虚拟机升级方法及装置与流程

本发明涉及通信领域,具体而言,涉及一种虚拟机升级方法及装置。



背景技术:

虚拟化技术应用日益广泛,虚拟机基于虚拟磁盘,相关技术中会基于共享父镜像的方式进行部署,图1是根据相关技术的父子镜像关系示意图,如图1所示,a1为父镜像,a2、a3和a4为子镜像,v1、v2和v3为虚拟机,每个虚拟机挂接在对应的子镜像上,但虚拟机的基础运行程序和数据都放在父镜像中,子镜像中放置虚拟机的变化数据,当虚拟机进行文件读操作时,先查找子镜像,如果子镜像有数据,则直接从子镜像中读取,否则再从父镜像中读取。而当虚拟机进行文件写操作时,会直接写到子镜像中,这样后续读时,就可以读到最新修改的数据。采用这种方式,所有虚拟机都共享父镜像的基础数据,在虚拟机组件升级时,理论上可以对父镜像进行升级,其变化可以作用到所有基于父子镜像关系的虚拟机中,形成批量升级。不过在实际操作中,会遇到许多问题。

图2是根据相关技术中父子镜像对虚拟扇区的占用关系示意图,如图2所示,a1为父镜像,a2、a3为对应的子镜像,其中,每个小格代表虚拟磁盘对应的虚拟扇区,图2中,父镜像的数据占用了0-2扇区,当a2/a3分类挂接虚拟机,且进行一段时间读写后,a2子镜像数据新增加了3、4、7三个扇区,而a3子镜像数据新增加了5、7两个扇区。这样导致的问题是,当我们希望对a1父镜像进行直接修改时,必然会涉及到新的扇区分配,但我们不知道对应的子镜像有无占用了该扇区,如果已经占用了该扇区,则对应的虚拟机在读取该扇区内容时,会直接从子镜像中读取,这样父镜像的修改就不能被虚拟机感知,批量升级也就不能成立了。

相关技术中的解决方法有多种:1,可以对所有子镜像进行扫描,分析哪些虚拟扇区还未使用,可作为对父镜像的升级使用,不过考虑到虚拟机在运行中会一直进行磁盘读写操作,因此该方法必须暂停所有虚拟机,如果虚拟机数量很多,无论是关闭还是扫描磁盘都是很大的工作。同时,对磁盘扇区的选择是文件系统的功能,该功能的实现还需要对虚拟机文件系统的修改,因此,该解决方法难以在工程上实施。2,可以对父镜像进行扇区保留,方法可以在制作父镜像是,对其部分虚拟扇区进行特殊标识,形成保留扇区,并防止虚拟机子镜像占用对应的扇区,这样,在升级时,可以直接使用这部分保留扇区,不会和虚拟机子镜像占用重叠。不过该方式还是面临着需要修改虚拟机内文件系统的问题,因为需要明确设定升级的磁盘数据放置在保留扇区上,而这必须要基于虚拟机文件系统来进行支持。因此,该方法还是复杂度较高。

针对相关技术中,基于父子镜像部署的虚拟机群升级复杂的问题,目前还没有有效地解决方案。



技术实现要素:

本发明提供了一种虚拟机升级方法及装置,以至少解决相关技术中基于父子镜像部署的虚拟机群升级复杂的问题。

根据本发明的一个方面,提供了一种虚拟机升级方法,包括:

获取原始镜像的升级镜像,将所述升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,所述独立组件镜像是通过文件映射配置信息处理所述虚拟机的原始镜像,制作出与所述虚拟机的系统镜像存在链接关系的所述独立组件镜像;

将所述独立组件镜像挂接到所述虚拟机。

进一步地,所述制作出与所述虚拟机的系统镜像存在链接文件关系的独立组件镜像包括:

将所述原始镜像的文件移动到所述独立组件镜像;

在所述原始镜像的文件在所述原始镜像中的位置处建立用于指向所述原始镜像的文件链接。

进一步地,所述获取所述原始镜像的升级镜像包括:

基于所述原始镜像的备份重新创建虚拟机,所述重新创建的虚拟机的组件升级后形成所述升级镜像。

进一步地,将所述升级镜像中的更改文件覆盖所述独立组件镜像的文件包括:

依据文件映射配置信息和所述升级镜像,扫描所述独立组件镜像中的文件是否有更改,在所述独立组件镜像中的文件存在更改的情况下,将所述升级镜像的更该文件覆盖所述独立组件镜像的文件。

进一步地,所述独立组件镜像满足以下条件:所述独立组件镜像仅允许虚拟机进行读操作不允许对所述独立组件镜像进行写操作。

根据本发明的另一方面,提供了一种虚拟机升级装置,包括:

覆盖模块,用于获取原始镜像的升级镜像,将所述升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,所述独立组件镜像是通过文件映射配置信息处理所述虚拟机的原始镜像,制作出与所述虚拟机的系统镜像存在链接关系的所述独立组件镜像;

挂接模块,用于将所述独立组件镜像挂接到所述虚拟机。

进一步地,所述覆盖模块包括:

移动单元,用于将所述原始镜像的文件移动到所述独立组件镜像;

指示单元,用于在所述原始镜像的文件在所述原始镜像中的位置处建立用于指向所述原始镜像的文件链接。

进一步地,所述覆盖模块还用于基于所述原始镜像的备份重新创建虚拟机,所述重新创建的虚拟机的组件升级后形成所述升级镜像。

进一步地,所述覆盖模块还用于依据文件映射配置信息和所述升级镜像,扫描所述独立组件镜像中的文件是否有更改,在所述独立组件镜像中的文件存在更改的情况下,将所述升级镜像的更该文件覆盖所述独立组件镜像的文件。

进一步地,所述独立组件镜像满足以下条件:所述独立组件镜像仅允许虚拟机进行读操作不允许对所述独立组件镜像进行写操作。

通过本发明,获取原始镜像的升级镜像,将该升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,该独立组件镜像是通过文件映射配置信息处理该虚拟机的原始镜像,制作出与该虚拟机的系统镜像存在链接关系的该独立组件镜像,将该独立组件镜像挂接到该虚拟机,解决了基于父子镜像部署的虚拟机群升级复杂的问题,简便有效的实现了虚拟机群升级。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是根据相关技术的父子镜像关系示意图;

图2是根据相关技术中父子镜像对虚拟扇区的占用关系示意图;

图3是根据本发明实施例的一种虚拟机升级方法的流程图;

图4是根据本发明实施例的一种虚拟机升级装置的结构框图一;

图5是根据本发明实施例的一种虚拟机升级装置的结构框图二;

图6是根据本发明优选实施例的一种虚拟机镜像部署方式示意图;

图7是根据本发明优选实施例的映像内文件放置关系图;

图8是根据本发明优选实施例的在windows系统上的放置关系示意图;

图9是根据本发明优选实施例的一种镜像初始制作方式示意图;

图10是根据本发明优选实施例的组件升级后的一种镜像更新方法示意图;

图11是根据本发明优选实施例的文件映射模块的实现流程图;

图12a是根据本发明优选实施例的虚拟机生成和镜像部署的实现流程图;

图12b是根据本发明优选实施例的虚拟机组件升级的实现流程图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。

在本实施例中提供了一种虚拟机升级方法,图3是根据本发明实施例的一种虚拟机升级方法的流程图,如图3所示,该流程包括如下步骤:

步骤s302,获取原始镜像的升级镜像,将该升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,该独立组件镜像是通过文件映射配置信息处理该虚拟机的原始镜像,制作出与该虚拟机的系统镜像存在链接关系的该独立组件镜像;

步骤s304,将该独立组件镜像挂接到该虚拟机。

通过上述步骤,获取原始镜像的升级镜像,将该升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,将该独立组件镜像挂接到该虚拟机。原始镜像通过文件映射配置信息处理得到虚拟机的系统镜像和独立组件镜像,独立组件镜像在更新之前跟虚拟机群是挂接的,更新完继续挂接在虚拟机上,解决了基于父子镜像部署的虚拟机群升级复杂的问题,简便有效的实现了虚拟机群升级。

在本实施例中,该制作出与该虚拟机的系统镜像存在链接文件关系的独立组件镜像包括,将该原始镜像的文件移动到该独立组件镜像;在该原始镜像的文件在该原始镜像中的位置处建立用于指向该原始镜像的文件链接,在原始镜像中设置一个对应的链接用来指示文件移动后的新位置。

在本实施例中,该获取该原始镜像的升级镜像包括:基于该原始镜像的备份重新创建虚拟机,该重新创建的虚拟机的组件升级后形成该升级镜像。

在本实施例中,将该升级镜像中的更改文件覆盖该独立组件镜像的文件包括:依据文件映射配置信息和该升级镜像,扫描该独立组件镜像中的文件是否有更改,在该独立组件镜像中的文件存在更改的情况下,将该升级镜像的更改文件覆盖该独立组件镜像的文件。在需要组件进行升级时,系统依据升级镜像对独立组件镜像进行扫描,在独立组件镜像有更改的情况下,对独立组建镜像进行更新。

在本实施例中,该独立组件镜像满足以下条件:该独立组件镜像仅允许虚拟机进行读操作不允许对该独立组件镜像进行写操作。独立组件镜像是所有虚拟机群共享的镜像,单个虚拟机只能进行读操作,可以访问镜像中的内容,依据镜像进行虚拟机升级,但是单个虚拟机不可以修改虚拟机的内容。

在本实施例中还提供了一种虚拟机升级装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件 和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是根据本发明实施例的一种虚拟机升级装置的结构框图一,如图4所示,该装置包括:

覆盖模块42,用于获取原始镜像的升级镜像,将该升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,该独立组件镜像是通过文件映射配置信息处理该虚拟机的原始镜像,制作出与该虚拟机的系统镜像存在链接关系的该独立组件镜像;

挂接模块44,与覆盖模块42连接,用于将该独立组件镜像挂接到该虚拟机。

通过上述步骤,覆盖模块42获取原始镜像的升级镜像,将该升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,该独立组件镜像是通过文件映射配置信息处理该虚拟机的原始镜像,制作出与该虚拟机的系统镜像存在链接关系的该独立组件镜像;挂接模块44将该独立组件镜像挂接到该虚拟机,解决了基于父子镜像部署的虚拟机群升级复杂的问题,简便有效的实现了虚拟机群升级。

图5是根据本发明实施例的一种虚拟机升级装置的结构框图二,如图5所示,该覆盖模块42包括:

移动单元52,用于将该原始镜像的文件移动到该独立组件镜像;

指示单元54,与该移动单元52连接,用于在该原始镜像的文件在该原始镜像中的位置处建立用于指向该原始镜像的文件链接。

在本实施例中,该覆盖模块42还用于基于该原始镜像的备份重新创建虚拟机,该重新创建的虚拟机的组件升级后形成该升级镜像。

在本实施例中,该覆盖模块42还用于依据文件映射配置信息和该升级镜像,扫描该独立组件镜像中的文件是否有更改,在该独立组件镜像中的文件存在更改的情况下,将该升级镜像的更该文件覆盖该独立组件镜像的文件。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述各个模块均位于同一处理器中;或者,上述各个模块分别位于不同的处理器中。

下面结合本发明优选实施例进行详细说明。

本发明优选实施例提供一个简便的方法用来实现对基于共享父镜像的虚拟机进行批量升级,该实施例的方法不需要对镜像文件进行特殊修改,不需要对虚拟机文件系统进行修改。

本发明优选实施例采用以下技术方案,本发明优选实施例包括两部分构成:

独立组件镜像,使用该镜像来存放需要升级的组件,该镜像被所有虚拟机共享读取,但禁止修改。

文件映射模块(相当于上述实施例的覆盖模块42的部分功能,存储了文件映射配置信息),对安装了的组件,使用该模块,将实际存储文件映射到该独立镜像中,这样虚拟机对文件的实际读取都会访问独立组件镜像。

本发明优选实施例的步骤如下:

步骤一,在虚拟机中完成组件初始安装;

步骤二,使用链接模块(相当于上述实施例的指示单元54的部分功能),将安装的组件移动到独立组件镜像中,并在原位置创建对应的链接关系;

步骤三,将独立组件镜像挂接到所有的虚拟机上,形成共享镜像。这样虚拟机可以像往常一样访问对应组件,这些访问都重定向到组件镜像上;

步骤四,在需要升级时,采用专用升级虚拟机,在升级后,重新运行链接模块,将修改内容移动到独立组件镜像中;

步骤五,重新将新的独立组件镜像挂接到所有虚拟机上,这样所有虚拟机都可以看到升级内容,并发升级完成。

与相关技术相比较,本发明优选实施例不依赖于对应的虚拟机映像格式,不需要对虚拟机镜像进行修改,不需要对虚拟机的文件系统管理器进行修改,只需要在虚拟机部署时增加一个专用镜像,在完成组件升级后,使用文件映射模块扫描文件编号,建立链接关系,实现较为简便。

图6是根据本发明优选实施例的一种虚拟机镜像部署方式示意图,如图6所示,a1、a2、a3和a4是虚拟机的系统镜像,而b是新增加的独立组件镜像,v1、v2和v3是虚拟机群,虚拟机在运行中,会同时挂接在a类和b类这两类映像上,构成其虚拟机磁盘。对a类镜像,以父子方式使用,可以进行读写操作,而对b镜像挂接,则只能读,不能进行写操作,因此虚拟机可以直接挂载,而不用创建子镜像。

图7是根据本发明优选实施例的映像内文件放置关系图,如图7所示,a为系统镜像,b是独立组件镜像,在a镜像上,对需要升级的文件,都链接到b镜像上,实际数据都存储在b镜像。

图8是根据本发明优选实施例的在windows系统上的放置关系示意图,如图8所示,a为系统镜像,b是独立组件镜像,对应的组件包括c:\windows\sys目录下的file1.sys和file2.sys两个文件,通过链接关系,指向了e:\sys下的file1.sys和file2.sys两个文件。链接文件是windows文件系统的已有技术,对于linux系统,也有类似实现。

图9是根据本发明优选实施例的一种镜像初始制作方式示意图,如图9所示,首先按照正常流程进行虚拟机安装,形成基础的安装镜像,对该进行使用文件映射模块进行处理,该模块根据预定义的文件映射配置,制作出有链接文件关系的虚拟机系统镜像(对应前面描述的a镜像)和独立组件镜像(对应前面描述的b镜像)。

图10是根据本发明优选实施例的组件升级后的一种镜像更新方法示意图,如图10所示,首先对原始镜像进行备份,并在该基础上进行组件升级,升级后得到升级镜像,使用文件映射模块对原始镜像和升级镜像进行处理,形成新的独立组件镜像。

图11是根据本发明优选实施例的文件映射模块的实现流程图,如图11所示,步骤如下:

s1101,读取映射文件配置信息

s1102,区分是初始制作还是更新,在判断为初始制作独立组件镜像的情况下:

s1103,建立独立组件镜像,初始为空;

s1104,按照映射配置,扫描对应文件,根据文件映射信息中的文件,将安装后的镜像中对应的文件移动到独立组件镜像中,并在原有位置建立对应的链接文件,指向移动后的文件位置;重复s1104的步骤,直到完成所有的文件链接关系建立。

s1105,在判断为组件更新的情况下,首先需要更新前的镜像和更新后的组件镜像;

s1106,根据文件映射配置的文件,扫描查看有无更改;

s1107,若有更改,则用更新后的文件覆盖独立组件镜像中对应的文件,由于在初始镜像制作中已经建立了链接关系,这个就不需要再建立了,重复s1106和s1107的步骤,直到映射配置中的所有文件都扫描完成。

图12a是根据本发明优选实施例的虚拟机生成和镜像部署的实现流程图,如图12a所示,步骤如下:在新创建独立组件镜像的情况下,流程图如图12a所示,

s1201,首先创建原始镜像文件,在该镜像文件上启动虚拟机,并完成组件安装,保存该原始镜像文件,

s1202,调用文件映射模块,创建出系统镜像和独立组件镜像,

s1203,基于新生成的系统镜像和独立组件镜像,创建虚拟机,经过上述步骤完成了初始的虚拟机生成和镜像部署。

图12b是根据本发明优选实施例的虚拟机组件升级的实现流程图,如图12b所示,在需要组件升级的情况下,步骤包括:

s1204,则从保存的原始镜像拷贝一份,作为待升级镜像,

s1205,基于待升级镜像,创建虚拟机,

s1206,在新创建虚拟机上完成组件升级,

s1207,使用原始镜像和新的升级镜像,调用文件映射模块,更新独立组件镜像,

s1208,更新所有虚拟机的独立组件镜像为4中新生成的独立组件镜像。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的程序代码:

s1,获取原始镜像的升级镜像,将该升级镜像中的更新文件覆盖挂接到虚拟机的独立组件镜像的文件,其中,该独立组件镜像是通过文件映射配置信息处理该虚拟机的原始镜像,制作出与该虚拟机的系统镜像存在链接关系的该独立组件镜像;

s2,将该独立组件镜像挂接到该虚拟机。

该存储介质还可以被设置为存储用于执行上述实施例的方法步骤的程序代码。

可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例的方法步骤。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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