专利名称:一种虚拟机镜像的更新方法、服务器和桌面云系统的制作方法
技术领域:
本发明涉及计算机领域,尤其涉及一种虚拟机镜像的更新方法、服务器和桌面云系统。
背景技术:
桌面云系统包含VDI (Virtual Desktop Infrastructure,虚拟桌面基础构架)和StreamingO^S)两种解决方案。其中VDI采用“集中计算,分布显示”的原则,支持将客户端设备桌面的工作负载(操作系统,应用程序,用户数据)托管在数据中心的服务器上,根据数据中心的服务器上存储的客户端设备桌面的工作负载生成的虚拟桌面,用户可以通过支持远程桌面协议的其他客户端设备与虚拟桌面进行通信,这样用户可以用支持远程桌面协议的其他客户端设备来访问上述客户端设备的桌面。目前,现有的一种VDI技术采用了流技术,允许从一个单一的共享磁盘镜像实时配置或者重配置虚拟机,虚拟机通过存放在服务器上的磁盘镜像文件启动。虚拟机磁盘启动实际上是远端服务器上的一个磁盘镜像文件,该镜像文件分为Private Image (私有镜像)和Standard Image (标准镜像)。多个客户端能够共享一个公共的只读的镜像文件(Standard Image)。每个客户端虚拟机包含这个共享的镜像和一个记录系统自启动以来所有改变的差异化文件,此差异化文件作为临时数据存放,在客户端重启时Write Cache (写缓存)将被清空,虚拟机将恢复到原始状态。但是由于该差异化文件是作为临时数据存放的,当主镜像(也可以称为基础镜像)更新后,从主镜像派生出来的子镜像相对于主镜像的差异化文件都将失效,且重启客户端虚拟机后,客户端虚拟机将恢复到原始的主镜像,不能保存客户端虚拟机用户的更改。为了解决上述镜像更新失效以及不能保存客户端虚拟机用户的更改的问题,现有的另一种VDI技术提供了一种方案,该方案先创建一个单独的“主”虚拟桌面,这个“主”虚拟桌面被称为源虚拟机(可理解为主镜像),基于该源虚拟机创建一个快照文件,然后再生成该快照文件的一个副本虚拟机,通过该副本虚拟机创建带链接的克隆(可理解为子镜像),每个带链接的克隆都相当于一个独立的桌面,且每个带链接的克隆与主虚拟机共享同一个基础镜像。所有的克隆(虚拟桌面)直接绑定在上述副本虚拟机上。当用户在主虚拟机上安装新软件或者补丁后生成该主虚拟机的新快照,而后将所有的克隆的链接绑定在主虚拟机的新快照上,这样就使得所有的虚拟桌面都变成了最新的版本。 但是上述方法,是基于文件级(即读写某一个文件中的一段数据)维护所有的IOdnput Output,输入输出)数据,它将主虚拟机镜像的系统盘中的“Documents andSettings”文件夹(存放桌面负载的文件夹)重定向到其他盘,不允许用户在客户端虚拟机的系统盘安装任何应用程序,即对于客户端虚拟机而言,主镜像是只读的,只有当服务器端对主镜像进行更新后,客户端才能更新,但是计算机名、domain标识信息等仍然需要基于块级别(即通过读写存储空间中的一个或者一段地址来进行数据存取)的维护。因此现有技术无法保存用户在客户端对子镜像中数据做出的更改,因此限制了用户在客户端的操作。
发明内容
本发明的实施例提供一种虚拟机镜像的更新方法、服务器和桌面云系统,能够在主镜像被更新升级后重新建立子镜像和所述主镜像的依赖关系的同时,保存用户在客户端对所述子镜像所做的更新升级。本发明的实施例采用如下技术方案:第一方面,提供一种虚拟机镜像的更新方法,应用于物理主机,所述物理主机管理一个主镜像和至少一个由所述主镜像生成的子镜像,所述子镜像作为与所述子镜像对应的虚拟机的虚拟磁盘,包括:在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区;基于所述主镜像创建子镜像时,复制主镜像的块区结构作为所述子镜像的块区结构;当所述子镜像被更新时,将所述子镜像中每一块更新后的部分划分为一个块区;当所述主镜像被更新时,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中。结合第一方面,在第一种可能的实现方式中,在所述复制主镜像的块区结构作为所述子镜像的块区结构之前,还包括:当所述主镜像被更新时,将所述主镜像中每一块更新的部分划分为一个块区,并在更新升级过程中生成差异文件列表,所述差异文件列表记录在更新升级过程中记录在更新升级过程中相对于原主镜像的新增、删除或者修改的文件,所述差异文件列表包括文件路径、文件类型信息。结合第一方面或第一方面的第一种实现方式,在第二种可能的实现方式中,所述获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中,包括:根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分,得到所述子镜像重划分后的块区结构,所述子镜像重划分后的块区结构为:所述子镜像未更新的部分为独立的块区,所述重叠部分为独立的块区,所述子镜像更新后的部分中除所述重叠部分外的部分为独立的块区;根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。结合第一方面的第二种实现方式,在第三种可能的实现方式中,所述根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分包括:确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置;根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分;当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构;当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同,得到所述子镜像重划分后的块区结构。结合第一方面的第三种实现方式,在第四种可能的实现方式中,所述当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区包括:若所述重叠部分位于所述子镜像的更新后的部分所在块区的前半部分,则将所述重叠部分的终止位置设置为所述子镜像的更新后的部分所在块区的新的起始位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或若所述重叠部分位于所述子镜像的更新后的部分所在块区的后半部分,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或若所述重叠部分位于所述子镜像的更新后的部分所在块区的中间,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,并新建块区,所述新建块区的起始位置为所述重叠部分的终止位置,所述新建块区的终止位置所述子镜像的更新后的部分所在块区的原终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区。结合第一方面的第三种可能的实现方式,在第五种可能的实现方式中,当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同包括:若重叠部分位于主镜像的更新后的部分所在块区的前半部分,则新建块区,新建块区的起始位置为重叠部分的终止位置,新建块区的终止位置与主镜像的更新后的部分所在块区的终止位置相同;若所述重叠部分位于所述主镜像的更新后的部分所在块区的后半部分,则新建块区,所述新建块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述新建块区的终止位置为所述重叠部分的起始位置;若所述重叠部分位于所述主镜像的更新后的部分所在块区的中间,则新建第一块区和第二块区,所述第一块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述第一块区的终止位置为所述重叠部分的起始位置;所述第二块区的起始位置为所述重叠部分的终止位置,所述第二块区的终止位置与所述主镜像的更新后的部分所在块区的终止位置相同。结合第一方面的第二种可能的实现方式,在第六种可能的实现方式中,所述根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理包括:确定所述差异化文件列表中的文件中的数据所在的块区,所述差异化文件列表中的文件中的数据所在的块区若为所述子镜像重划分后的块区结构中的所述重叠部分所在的块区,则包括:若需要将所述重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将所述重叠部分的主镜像的更新后的部分合并到所述子镜像中;若需要将所述重叠部分的主镜像的更新后的部分保留,则将所述重叠部分的子镜像的更新后的部分替换为所述重叠部分的主镜像的更新后的部分;若忽略所述重叠部分的主镜像的更新后的部分,则不进行处理。第二方面,提供一种服务器,所述服务器包括:主镜像建立单元,用于在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区;子镜像建立单元,用于建立子镜像,并复制所述主镜像建立单元所创建的主镜像的块区结构作为所述子镜像的块区结构;块区管理单元,用于在所述子镜像建立单元在创建完成所述子镜像后,当所述子镜像被更新时,将所述子镜像中每一块更新后的部分划分为一个块区;合并单元,用于在所述主镜像建立单元在创建完成所述主镜像后,当所述主镜像被更新时,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中。结合第二方面,在第一种可能的实现方式中,所述主镜像建立单元还用于:当所述主镜像被更新时,将所述主镜像中每一块更新的部分划分为一个块区,并在更新升级过程中生成差异文件列表,所述差异文件列表记录在更新升级过程中记录在更新升级过程中相对于原主镜像的新增、删除或者修改的文件,所述差异文件列表包括文件路径、文件类型信息。结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,所述合并单元具体用于:当所述主镜像被更新时,根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分,得到所述子镜像重划分后的块区结构,所述子镜像重划分后的块区结构为:所述子镜像未更新的部分为独立的块区,所述重叠部分为独立的块区,所述子镜像更新后的部分中除所述重叠部分外的部分为独立的块区;根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。结合第二方面的第一至或第二种可能的实现方式,在第三种可能的实现方式中,所述合并单元具体用于:当所述主镜像被更新时,确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置;根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分;当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构;当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同,得到所述子镜像重划分后的块区结构;根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。结合第二方面的第三种可能的实现方式,在第四种可能的实现方式中,所述合并单元具体用于:当所述主镜像被更新时,确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置;根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分;当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,若所述重叠部分位于所述子镜像的更新后的部分所在块区的前半部分,则将所述重叠部分的终止位置设置为所述子镜像的更新后的部分所在块区的新的起始位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或若所述重叠部分位于所述子镜像的更新后的部分所在块区的后半部分,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或若所述重叠部分位于所述子镜像的更新后的部分所在块区的中间,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,并新建块区,所述新建块区的起始位置为所述重叠部分的终止位置,所述新建块区的终止位置所述子镜像的更新后的部分所在块区的原终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构;当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同,得到所述子镜像重划分后的块区结构;根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。结合第二方面的第三种可能的实现方式,在第五种可能的实现方式中,所述合并单元具体用于:当所述主镜像被更新时,确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置;根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分;当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构;当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,若所述重叠部分位于所述主镜像的更新后的部分所在块区的前半部分,则新建块区,所述新建块区的起始位置为所述重叠部分的终止位置,所述新建块区的终止位置与所述主镜像的更新后的部分所在块区的终止位置相同;若所述重叠部分位于所述主镜像的更新后的部分所在块区的后半部分,则新建块区,所述新建块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述新建块区的终止位置为所述重叠部分的起始位置;若所述重叠部分位于所述主镜像的更新后的部分所在块区的中间,则新建第一块区和第二块区,所述第一块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述第一块区的终止位置为所述重叠部分的起始位置;所述第二块区的起始位置为所述重叠部分的终止位置,所述第二块区的终止位置与所述主镜像的更新后的部分所在块区的终止位置相同,从而得到所述子镜像重划分后的块区结构;根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。结合第二方面的第二种可能的实现方式,在第六种可能的实现方式中,所述合并单元具体用于:当所述主镜像被更新时,根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分,得到所述子镜像重划分后的块区结构,所述子镜像重划分后的块区结构为:所述子镜像未更新的部分为独立的块区,所述重叠部分为独立的块区,所述子镜像更新后的部分中除所述重叠部分外的部分为独立的块区;确定所述差异化文件列表中的文件中的数据所在的块区,所述差异化文件列表中的文件中的数据所在的块区若为所述子镜像重划分后的块区结构中的所述重叠部分所在的块区,则包括:
若需要将所述重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将所述重叠部分的主镜像的更新后的部分合并到所述子镜像中;若需要将所述重叠部分的主镜像的更新后的部分保留,则将所述重叠部分的子镜像的更新后的部分替换为所述重叠部分的主镜像的更新后的部分;若忽略所述重叠部分的主镜像的更新后的部分,则不进行处理。第三方面,提供一种桌面云系统,包括:客户端,依赖于如前述的服务器建立的子镜像,所述子镜像是由所述服务器根据主镜像建立的,并在所述主镜像被更新升级后,将更新升级后的部分应用于所述客户端对应的子镜像中;如前述的服务器,用于在创建虚拟桌面基础架构环境时,创建主镜像,并在主镜像更新升级后,将更新后的主镜像与所述客户端对应的子镜像重新建立依赖关系。本发明的实施例提供一种虚拟机镜像的更新方法、服务器和桌面云系统,在建立子镜像后,从服务器复制主镜像的块区结构作为子镜像的块区结构,当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区,当主镜像被更新时服务器也将主镜像中每一块更新后的部分划分为一个块区,并且由服务器获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中,从而能够在主镜像更新升级后重新建立所述子镜像和所述主镜像的依赖关系的同时,保存用户在客户端对所述子镜像所做的更新升级。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的一种虚拟机镜像的更新方法的流程示意图;图2为本发明实施例提供的另一种虚拟机镜像的更新方法的流程示意图;图3为本发明实施例提供的一种主镜像的更新示意图;图4为本发明实施例提供的一种子镜像的块区切分示意图;图5为本发明实施例提供的一种子镜像的块区切分示意图;图6为本发明实施例提供的一种子镜像的块区切分示意图;图7为本发明实施例提供的一种子镜像的块区切分示意图;图8为本发明实施例提供的一种子镜像的块区切分示意图;图9为本发明实施例提供的一种子镜像的块区切分示意图;图10为本发明实施例提供的一种子镜像的块区切分示意图;图11为本发明实施例提供的一种树型结构示意图;图12为本发明实施例提供的一种服务器的结构示意图;图13为本发明实施例提供的另一种服务器的结构示意图;图14为本发明实施例提供的一种桌面云系统的组成示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供一种虚拟机镜像的更新方法,应用于物理主机,所述物理主机管理一个主镜像和至少一个由所述主镜像生成的子镜像,所述子镜像作为与所述子镜像对应的虚拟机的虚拟磁盘,如图1所示,所述方法包括:101、在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区。102、建立子镜像,复制主镜像的块区结构作为所述子镜像的块区(Block Region,BR)结构。其中,上述主镜像和子镜像由所述物理主机进行管理,所述物理主机可以为物理服务器。103、当所述子镜像被更新时,将所述子镜像中每一块更新后的部分划分为一个块区。104、当所述主镜像被更新时,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中。可见,本发明的实施例提供一种虚拟机镜像的更新方法,在建立子镜像后,从服务器复制主镜像的块区结构作为子镜像的块区结构,当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区,当主镜像被更新时服务器也将主镜像中每一块更新后的部分划分为一个块区,并且由客户端获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中,从而能够在主镜像更新升级后重新建立所述子镜像和所述主镜像的依赖关系的同时,保存用户在客户端对所述子镜像所做的更新升级。本发明实施例提供另一种虚拟机镜像的更新方法,如图2所示,包括:为了使本领域技术人员能够更清楚地理解本发明实施例提供的技术方案,下面通过具体的实施例,对本发明另一个实施例提供的一种虚拟机镜像的更新方法进行详细说明,另外为了说明方便,以下将块区简称为BR。201、建立主镜像,并将主镜像整个磁盘空间划分为一个BR。示例性的,可以通过以下方法实现:如图3所示,在搭建虚拟桌面基础架构时,假设新建的主镜像为MO,将MO划分为一整个BR,标记为BR1,BRl的起始位置(start)设置为O JfBRl的大小(size)设置为主镜像的总大小,并将BRl的标志(flag)设置为P。202、当主镜像被更新后,将主镜像中每一块更新的部分划分为一个BR。示例性的,假设Ml为更新之后的主镜像,其块区结构为一整个BR,即BR1,则“将主镜像中每一块更新的部分划分为一个BR”可以通过以下方法实现:当用户对主镜像进行更新产生写IO时,假设该写IO的起始位置标记为“first”,终止位置标记为“last”,则按以下步骤切分BR:第一步:判断主镜像的BRl与该写IO所属位置是否有交集。第二步:当有交集时,根据该写IO对主镜像的BRl进行切分。如图3所示,由于在建立主镜像时,将主镜像整个磁盘空间划分为一整个BR1,因此,用户对主镜像进行更新产生的写IO与主镜像的这一个BRl存在交集,且该写IO在这一个BRl的数据范围内,所以需要对主镜像的这一个BRl进行切分。当然,在本发明提供的实施例中,在建立主镜像时将主镜像整个磁盘空间划分为一个BR仅仅是示例性的,并不限于此,也可以有其他的划分方法,在此不一一列举。第三步:新建一个BR2,用来描述写IO范围内的数据,包含起始位置、大小,并将BR2的标记设置为C。其中,BR2的起始位置与写IO的起始位置“first”位置相同,BR2的终止位置与写IO的终止位置“last”位置相同,BR2的大小为BR2的终止位置减去BR2的起始位置。第四步:分别新建BR3、BR4,分别用来描述写IO范围外且在BRl范围内的数据,BR3、BR4包含有起始位置、大小,并将BR3、BR4的标记设置为P ;其中,如图4所示,BR3的起始位置与BRl的起始位置为同一位置,BR3的终止位置与BR2的起始位置为同一位置,BR3的大小为BR3的终止位置减BR3的起始位置,BR4的起始位置与BR2的终止位置为同一位置,BR4的终止位置与BRl的终止位置为同一位置,BR4的大小为BR4的终止位置减BR4的起始位置。第五步:删除BR1,连接新建的BR2、BR3以及BR4。另外,由于在本发明提供的实施例中,在建立主镜像时将主镜像整个磁盘空间划分为一个BR,因此主镜像中只有一个BR1,除了 BRl外主镜像中不存在剩余的BR,因此这里只要将BR2和BR3、BR4连接起来即可,但是若主镜像存在两个或两个以上的BR,则在连接新建的BR2、BR3以及BR4之后,还需要将这3个BR与主镜像中除BRl之外的剩余BR排序后连接起来。203、当子镜像建立时,从服务器复制主镜像的块区结构作为子镜像的块区结构。具体的,可以通过以下方法实现:当我们需要将建立的主镜像应用到多台虚拟机上时,则根据所述主镜像生成多个应用于虚拟机的子镜像,每台虚拟机都存在唯一一个对应的子镜像,当我们建立子镜像时,对应主镜像各个BR的起始位置和大小,依次建立子镜像自身的块区结构,所创建的BR的起始位置和各个BR的大小和主镜像中的BR相同,且所创建的所有BR的起始位置和该BR的大小和主镜像中的所有BR —一对应。204、当子镜像被更新后,将子镜像中每一块更新后的部分划分为一个BR。若用户用过虚拟机对其子镜像进行了更新,则所述子镜像更新后的BR划分过程与主镜像更新后的BR划分过程相同,具体的可以参照202中主镜像更新后的BR划分过程,这里不再赘述。205、在子镜像中根据子镜像的更新后的部分和主镜像的更新后的部分对子镜像的块区结构进行重新划分。这里,对子镜像的更新后的部分和主镜像的更新后的部分的合并,即是根据更新后的子镜像的块区结构和更新后的主镜像的块区结构对子镜像中的RB的进行重新划分,从而修正由于子镜像与主镜像的更新破坏的子镜像与主镜像BR间的依赖关系。在虚拟机对其子镜像做出更新后,我们需要将主镜像所作出的更新后的BR以及所述子镜像更新后的BR进行重划分,具体的,可以通过以下方法实现:首先,确定主镜像和所述虚拟机对应的子镜像中更新后的部分所在BR起始位置和终止位置;而后,根据主镜像和所述子镜像中更新后的部分所在BR起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分。由于,主镜像的更新后的部分的范围与子镜像更新后的部分的范围可能不同,因此可以根据不同情况进行不同的处理,具体的:一、当主镜像的更新后的部分所在BR在所述子镜像的更新后的部分所在BR的范围内时,将重叠部分从所述子镜像的更新后的部分所在BR的范围内移出,并将重叠部分划分为一个BR,可以通过以下步骤实现:I)若重叠部分位于所述子镜像的更新后的部分所在BR的前半部分,则将重叠部分的终止位置设置为所述子镜像的更新后的部分所在BR的新的起始位置,以便将重叠部分从所述子镜像的更新后的部分所在BR的范围内移出,并将重叠部分划分为一个BR ;示例性的,以上块区合并的过程可如图4所示,图中虚线表示对子镜像Vl的切分:更新后的主镜像为M1,更新后的所述子镜像为VI,图中的阴影部分就是根据主镜像和所述子镜像各自的更新后的部分划分的块区,虚线表示对Vl的块区的重新划分,对于Vl的块区重划分过程如下:
将Vl的块区与Ml的块区进行--比较,Ml中的BR1’所属区域包含在Vl的BRl
的区域的前半部分,则在Vl中新建一个块区BR2,BR2的起始位置与BRl的起始位置相同,BR2的大小与BR1’的大小相同,并将原始BRl的起始位置设置为BR2的终止位置;2)若重叠部分位于所述子镜像的更新后的部分所在BR的后半部分,则将重叠部分的起始位置设置为所述子镜像的更新后的部分所在BR的新的终止位置,以便将重叠部分从所述子镜像的更新后的部分所在BR的范围内移出,并将重叠部分划分为一个BR ;示例性的,以上块区合并的过程可如图5所示,图中虚线表示对子镜像Vl的切分:Ml中的BR3’所属区域包含在Vl的BR3的区域的后半部分,则保持BR3的起始位置不变,将BR3的大小设置为原BR3的大小减去主镜像中BR3’的大小,而后在Vl中新建一个块区BR4,BR4的起始位置设置与主镜像中BR3’的起始位置相同,其大小与主镜像中BR3’的大小相同;3)若重叠部分位于所述子镜像的更新后的部分所在BR的中间,则将重叠部分的起始位置设置为子镜像的更新后的部分所在BR的新的终止位置,并新建BR,新建BR的起始位置为重叠部分的终止位置,新建块区的终止位置为所述子镜像的更新后的部分所在块区的原终止位置。示例性的,以上块区合并的过程可如图6所示,图中虚线表示对子镜像Vl的切分:Ml中的BR5’所属区域处在Vl的BR5的区域的中间部分,则在Vl中新建一个BR6,BR6的起始位置设置为Vl中原BR5的起始位置所在的位置,BR6的大小设置为Ml中BR5’的起始位置减去Vl中原BR5的起始位置后所得出的范围,在Vl中再新建一个BR7,将其起始位置设置为Ml中BR5’的终止位置所在的位置,其大小设置为Vl中原BR5终止位置减去Ml中BR5’的终止位置后所得的范围,最后将Vl中BR5的起始设置为BR6的终止所在的位置,其大小设置为与Ml中BR5’的大小相同;二、当所述子镜像的更新后的部分所在BR在主镜像的更新后的部分所在BR的范围内时,则在所述子镜像上新建BR,使新建BR的范围加上重叠部分的范围与主镜像的更新后的部分所在BR的范围相同,具体可以通过以下方法实现:I)若重叠部分位于主镜像的更新后的部分所在BR的前半部分,则新建BR,新建BR的起始位置为重叠部分的终止位置,新建BR的终止位置与主镜像的更新后的部分所在BR的终止位置相同;示例性的,以上块区合并的过程可如图7所示,图中虚线表示对子镜像Vl的切分:Vl中的BR8所属区域处在Ml的BR8’的区域的前半部分,则在Vl中新建一个BR9,BR9的起始位置设置为Vl中BR8的终止位置所在的位置,其大小设置为Ml中BR8’的大小减去Vl中BR8的大小后所得的大小;2)若重叠部分位于主镜像的更新后的部分所在BR的后半部分,则新建BR,新建BR的起始位置与主镜像的更新后的部分所在BR的起始位置相同,新建BR的终止位置为重叠部分的起始位置;示例性的,以上块区合并的过程可如图8所示,图中虚线表示对子镜像Vl的切分:Vl中的BRlO所属区域处在Ml的BR10’的区域的后半部分,则在Vl中新建一个BRlI,BRlI的起始位置设置为Ml中BR10’的起始位置所在的位置,其大小设置为Vl中BRlO的起始位置减去Ml中的BR10’的起始位置后所得的范围;3)若重叠部分位于所述子镜像的更新后的部分所在BR的中间,则新建第一 BR和第二 BR,第一 BR的起始位置与主镜像的更新后的部分所在BR的起始位置相同,第一 BR的终止位置为重叠部分的起始位置;第二 BR的起始位置为重叠部分的终止位置,第二 BR的终止位置与主镜像的更新后的部分所在BR的终止位置相同。示例性的,以上块区合并的过程可如图9所示,图中虚线表示对子镜像Vl的切分:Vl中的BR12所属区域处在Ml的BR12’的区域的中间部分,则在Vl中新建一个BR13,BR13的起始位置设置为Ml中BR12’的起始位置所在的位置,其大小设置为BR12的起始位置减去BR12’的起始位置后所得的范围,在Vl中再新建一个BR14,BR14的起始位置设置为BR12的终止位置所在的位置,其大小设置为BR12’的终止位置所在位置减去BR12的终止位置所在位置后所得的范围;当然,如果出现特殊情况,例如更新后的主镜像的块区结构和更新后的所述子镜像的块区结构完全相同,即主镜像的更新后的部分的范围与所述子镜像更新后的部分的范围完全相同,则不需要再对所述子镜像中的BR进行重新划分;示例性的,如图10所示,图中虚线表示对所述子镜像Vl的切分:
Vl中的BR15与Ml中的BR15’所在的区域相同,则不对Vl的块区结构进行重新划分。206、在子镜像中对子镜像的更新后的部分和主镜像的更新后的部分进行合并。具体的,可以通过以下方法实现:可以在主镜像的更新升级过程中记录相对于原主镜像的新增或者修改的文件,并生成记录这些文件的差异文件列表(可以称为diff-file list),该差异文件列表包括文件路径、文件类型信息。当从原主镜像生成的用户虚拟机重新启动时,将这些改变的文件合并到其子镜像中,其文件的合并主要采用拷贝的合并方式,可以首先将子镜像挂载到一个目录上,而后将这些改变的文件逐一拷贝到子镜像的相应路径中,此过程由操作系统中的文件系统来进行管理文件块的分配。由于在子镜像中也进行了更新,因此再将主镜像的更新文件合并到子镜像时,可以按照以下合并原则进行:若需要将重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将重叠部分的主镜像的更新后的部分合并到子镜像中;若需要将重叠部分的主镜像的更新后的部分保留,则将重叠部分的子镜像的更新后的部分替换为重叠部分的主镜像的更新后的部分;若忽略重叠部分的主镜像的更新后的部分,则不进行处理。另外,镜像间的依赖关系是多层的,如图11所示的树形结构,子孙镜像可以基于任何一个父镜像生成虚拟机,不仅镜像O的更新会同步到它的子孙镜像,树中的任何一个节点的更新都可以更新到其子孙镜像,以实现子孙镜像的批量更新。例如,镜像I的更新可以同步到镜像3、镜像4、镜像6和镜像7,镜像4的更新可以同步到镜像6和镜像7。因此,本发明实施例提供的方法还能够实现在更新一台虚拟机后使该虚拟机的所有子孙虚拟机得到同步更新。可见,本发明的实施例提供一种虚拟机镜像的更新方法,在建立子镜像后,从服务器复制主镜像的块区结构作为子镜像的块区结构,当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区,当主镜像被更新时服务器也将主镜像中每一块更新后的部分划分为一个块区,并且由服务器获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中,从而能够在主镜像更新升级后重新建立所述子镜像和所述主镜像的依赖关系的同时,保存用户在客户端对所述子镜像所做的更新升级。本发明实施例提供一种服务器01,如图12所示,包括:主镜像建立单元011,用于在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区;子镜像建立单元012,用于建立子镜像,并复制主镜像建立单元011所创建的主镜像的块区结构作为子镜像的块区结构;块区管理单元013,用于在子镜像建立单元012在创建完成子镜像后,子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区;合并单元014,用于在主镜像建立单元011在创建完成主镜像后,主镜像被更新时,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中。
进一步的,主镜像建立单元011还用于:当主镜像被更新时,将主镜像中每一块更新的部分划分为一个块区,并在更新升级过程中生成差异文件列表,差异文件列表记录在更新升级过程中记录在更新升级过程中相对于原主镜像的新增、删除或者修改的文件,差异文件列表包括文件路径、文件类型信
肩、O再进一步的,合并单元014具体用于:当主镜像被更新时,根据主镜像更新后的块区结构以及子镜像更新后的块区结构,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分对子镜像进行块区结构的重划分,得到子镜像重划分后的块区结构,子镜像重划分后的块区结构为:子镜像未更新的部分为独立的块区,重叠部分为独立的块区,子镜像更新后的部分中除重叠部分外的部分为独立的块区;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。再进一步的,合并单元014具体用于:当主镜像被更新时,确定主镜像和子镜像中更新后的部分所在块区起始位置和终止位置;根据主镜像和子镜像中更新后的部分所在块区起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分;当主镜像的更新后的部分所在块区在子镜像的更新后的部分所在块区的范围内时,将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区,得到子镜像重划分后的块区结构;当子镜像的更新后的部分所在块区在主镜像的更新后的部分所在块区的范围内时,则在子镜像上新建块区,使新建块区的范围加上重叠部分的范围与主镜像的更新后的部分所在块区的范围相同,得到子镜像重划分后的块区结构;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。又进一步的,合并单元014具体用于:当主镜像被更新时,确定主镜像和子镜像中更新后的部分所在块区起始位置和终止位置;根据主镜像和子镜像中更新后的部分所在块区起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分;当主镜像的更新后的部分所在块区在子镜像的更新后的部分所在块区的范围内时,若重叠部分位于子镜像的更新后的部分所在块区的前半部分,则将重叠部分的终止位置设置为子镜像的更新后的部分所在块区的新的起始位置,以便将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区;或若重叠部分位于子镜像的更新后的部分所在块区的后半部分,则将重叠部分的起始位置设置为子镜像的更新后的部分所在块区的新的终止位置,以便将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区;或若重叠部分位于子镜像的更新后的部分所在块区的中间,则将重叠部分的起始位置设置为子镜像的更新后的部分所在块区的新的终止位置,并新建块区,新建块区的起始位置为重叠部分的终止位置,新建块区的终止位置子镜像的更新后的部分所在块区的原终止位置,以便将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区,从而得到子镜像重划分后的块区结构;当子镜像的更新后的部分所在块区在主镜像的更新后的部分所在块区的范围内时,则在子镜像上新建块区,使新建块区的范围加上重叠部分的范围与主镜像的更新后的部分所在块区的范围相同,得到子镜像重划分后的块区结构;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。更进一步的,合并单元014具体用于:当主镜像被更新时,确定主镜像和子镜像中更新后的部分所在块区起始位置和终止位置;根据主镜像和子镜像中更新后的部分所在块区起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分;当主镜像的更新后的部分所在块区在子镜像的更新后的部分所在块区的范围内时,将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区,得到子镜像重划分后的块区结构;当子镜像的更新后的部分所在块区在主镜像的更新后的部分所在块区的范围内时,若重叠部分位于主镜像的更新后的部分所在块区的前半部分,则新建块区,新建块区的起始位置为重叠部分的终止位置,新建块区的终止位置与主镜像的更新后的部分所在块区的终止位置相同;若重叠部分位于主镜像的更新后的部分所在块区的后半部分,则新建块区,新建块区的起始位置与主镜像的更新后的部分所在块区的起始位置相同,新建块区的终止位置为重叠部分的起始位置;若重叠部分位于主镜像的更新后的部分所在块区的中间,则新建第一块区和第二块区,第一块区的起始位置与主镜像的更新后的部分所在块区的起始位置相同,第一块区的终止位置为重叠部分的起始位置;第二块区的起始位置为重叠部分的终止位置,第二块区的终止位置与主镜像的更新后的部分所在块区的终止位置相同,从而得到子镜像重划分后的块区结构;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。再进一步的,在将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理时,合并单元014具体用于:当主镜像被更新时,根据主镜像更新后的块区结构以及子镜像更新后的块区结构,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分对子镜像进行块区结构的重划分,得到子镜像重划分后的块区结构,子镜像重划分后的块区结构为:子镜像未更新的部分为独立的块区,重叠部分为独立的块区,子镜像更新后的部分中除重叠部分外的部分为独立的块区;确定差异化文件列表中的文件中的数据所在的块区,差异化文件列表中的文件中的数据所在的块区若为子镜像重划分后的块区结构中的重叠部分所在的块区,则包括:若需要将重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将重叠部分的主镜像的更新后的部分合并到子镜像中;若需要将重叠部分的主镜像的更新后的部分保留,则将重叠部分的子镜像的更新后的部分替换为重叠部分的主镜像的更新后的部分;若忽略重叠部分的主镜像的更新后的部分,则不进行处理。可见,本发明的实施例提供一种服务器,在建立子镜像后,从服务器复制主镜像的块区结构作为子镜像的块区结构,当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区,当主镜像被更新时服务器也将主镜像中每一块更新后的部分划分为一个块区,并且由服务器获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中,从而能够在主镜像更新升级后重新建立子镜像和主镜像的依赖关系的同时,保存用户在客户端对子镜像所做的更新升级。本发明实施例还提供另一种服务器02,如图13所示,服务器02总线024 ;以及连接到总线024上的接口 021、存储器022、以及处理器023,其中存储器022用于存储指令,该处理器023用于执行该指令用于:通过接口 021在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区;通过接口 021基于主镜像创建子镜像时,复制主镜像的块区结构作为子镜像的块区结构;通过接口 021在当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区;通过接口 021在当主镜像被更新时,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中。可选的,处理器023还可以用于执行该指令用于:当主镜像被更新时,将主镜像中每一块更新的部分划分为一个块区,并在更新升级过程中生成差异文件列表,差异文件列表记录在更新升级过程中记录在更新升级过程中相对于原主镜像的新增、删除或者修改的文件,差异文件列表包括文件路径、文件类型信
肩、O可选的,处理器023还可以用于执行该指令用于:当主镜像被更新时,根据主镜像更新后的块区结构以及子镜像更新后的块区结构,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分对子镜像进行块区结构的重划分,得到子镜像重划分后的块区结构,子镜像重划分后的块区结构为:子镜像未更新的部分为独立的块区,重叠部分为独立的块区,子镜像更新后的部分中除重叠部分外的部分为独立的块区;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。可选的,处理器023还可以用于执行该指令用于:
当主镜像被更新时,确定主镜像和子镜像中更新后的部分所在块区起始位置和终止位置;根据主镜像和子镜像中更新后的部分所在块区起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分;当主镜像的更新后的部分所在块区在子镜像的更新后的部分所在块区的范围内时,将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区,得到子镜像重划分后的块区结构;当子镜像的更新后的部分所在块区在主镜像的更新后的部分所在块区的范围内时,则在子镜像上新建块区,使新建块区的范围加上重叠部分的范围与主镜像的更新后的部分所在块区的范围相同,得到子镜像重划分后的块区结构;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。可选的,处理器023还可以用于执行该指令用于:当主镜像被更新时,确定主镜像和子镜像中更新后的部分所在块区起始位置和终止位置;根据主镜像和子镜像中更新后的部分所在块区起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分;当主镜像的更新后的部分所在块区在子镜像的更新后的部分所在块区的范围内时,若重叠部分位于子镜像的更新后的部分所在块区的前半部分,则将重叠部分的终止位置设置为子镜像的更新后的部分所在块区的新的起始位置,以便将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区;或若重叠部分位于子镜像的更新后的部分所在块区的后半部分,则将重叠部分的起始位置设置为子镜像的更新后的部分所在块区的新的终止位置,以便将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区;或若重叠部分位于子镜像的更新后的部分所在块区的中间,则将重叠部分的起始位置设置为子镜像的更新后的部分所在块区的新的终止位置,并新建块区,新建块区的起始位置为重叠部分的终止位置,新建块区的终止位置子镜像的更新后的部分所在块区的原终止位置,以便将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区,从而得到子镜像重划分后的块区结构;当子镜像的更新后的部分所在块区在主镜像的更新后的部分所在块区的范围内时,则在子镜像上新建块区,使新建块区的范围加上重叠部分的范围与主镜像的更新后的部分所在块区的范围相同,得到子镜像重划分后的块区结构;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。可选的,处理器023还可以用于执行该指令用于:当主镜像被更新时,确定主镜像和子镜像中更新后的部分所在块区起始位置和终止位置;根据主镜像和子镜像中更新后的部分所在块区起始位置和终止位置,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分;
当主镜像的更新后的部分所在块区在子镜像的更新后的部分所在块区的范围内时,将重叠部分从子镜像的更新后的部分所在块区的范围内移出,并将重叠部分划分为一个块区,得到子镜像重划分后的块区结构;当子镜像的更新后的部分所在块区在主镜像的更新后的部分所在块区的范围内时,若重叠部分位于主镜像的更新后的部分所在块区的前半部分,则新建块区,新建块区的起始位置为重叠部分的终止位置,新建块区的终止位置与主镜像的更新后的部分所在块区的终止位置相同;若重叠部分位于主镜像的更新后的部分所在块区的后半部分,则新建块区,新建块区的起始位置与主镜像的更新后的部分所在块区的起始位置相同,新建块区的终止位置为重叠部分的起始位置;若重叠部分位于主镜像的更新后的部分所在块区的中间,则新建第一块区和第二块区,第一块区的起始位置与主镜像的更新后的部分所在块区的起始位置相同,第一块区的终止位置为重叠部分的起始位置;第二块区的起始位置为重叠部分的终止位置,第二块区的终止位置与主镜像的更新后的部分所在块区的终止位置相同,从而得到子镜像重划分后的块区结构;根据差异化文件列表以及子镜像重划分后的块区结构,将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理。可选的,在将主镜像的更新后的部分在子镜像中进行文件级的合并、替换或者忽略处理时,处理器023还可以用于执行该指令用于:当主镜像被更新时,根据主镜像更新后的块区结构以及子镜像更新后的块区结构,获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分对子镜像进行块区结构的重划分,得到子镜像重划分后的块区结构,子镜像重划分后的块区结构为:子镜像未更新的部分为独立的块区,重叠部分为独立的块区,子镜像更新后的部分中除重叠部分外的部分为独立的块区;确定差异化文件列表中的文件中的数据所在的块区,差异化文件列表中的文件中的数据所在的块区若为子镜像重划分后的块区结构中的重叠部分所在的块区,则包括:若需要将重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将重叠部分的主镜像的更新后的部分合并到子镜像中;若需要将重叠部分的主镜像的更新后的部分保留,则将重叠部分的子镜像的更新后的部分替换为重叠部分的主镜像的更新后的部分;若忽略重叠部分的主镜像的更新后的部分,则不进行处理。本发明的实施例提供一种服务器,在建立子镜像后,从服务器复制主镜像的块区结构作为子镜像的块区结构,当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区,当主镜像被更新时服务器也将主镜像中每一块更新后的部分划分为一个块区,并且由服务器获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中,从而能够在主镜像更新升级后重新建立子镜像和主镜像的依赖关系的同时,保存用户在客户端对子镜像所做的更新升级。本发明另一实施例提供一种桌面云系统03,包括客户端031以及服务器02,如图14所示:客户端031,用于依赖于服务器02创建的子镜像,子镜像是由服务器02根据主镜像建立的,并在主镜像被更新升级后,将更新升级后的部分应用于客户端对应的子镜像中。服务器02,用于在创建虚拟桌面基础架构环境时,创建主镜像,并在主镜像更新升级后,将更新后的主镜像与客户端031对应的子镜像重新建立依赖关系。本发明的实施例提供一种桌面云系统,在建立子镜像后,从服务器复制主镜像的块区结构作为子镜像的块区结构,当子镜像被更新时,将子镜像中每一块更新后的部分划分为一个块区,当主镜像被更新时服务器也将主镜像中每一块更新后的部分划分为一个块区,并且由服务器获取主镜像的更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像的更新后的部分合并到子镜像中,从而能够在主镜像更新升级后重新建立子镜像和主镜像的依赖关系的同时,保存用户在客户端对子镜像所做的更新升级。在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和系统,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理包括,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
权利要求
1.一种虚拟机镜像的更新方法,其特征在于,应用于物理主机,所述物理主机管理一个主镜像和至少一个由所述主镜像生成的子镜像,所述子镜像作为与所述子镜像对应的虚拟机的虚拟磁盘,包括: 在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区; 基于所述主镜像创建子镜像时,复制主镜像的块区结构作为所述子镜像的块区结构; 当所述子镜像被更新时,将所述子镜像中每一块更新后的部分划分为一个块区; 当所述主镜像被更新时,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中。
2.根据权利要求1所 述的方法,其特征在于,在所述复制主镜像的块区结构作为所述子镜像的块区结构之前,还包括: 当所述主镜像被更新时,将所述主镜像中每一块更新的部分划分为一个块区,并在更新升级过程中生成差异文件列表,所述差异文件列表记录在更新升级过程中记录在更新升级过程中相对于原主镜像的新增、删除或者修改的文件,所述差异文件列表包括文件路径、文件类型信息。
3.根据权利要求1或2所述的方法,其特征在于,所述获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中,包括: 根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分,得到所述子镜像重划分后的块区结构,所述子镜像重划分后的块区结构为:所述子镜像未更新的部分为独立的块区,所述重叠部分为独立的块区,所述子镜像更新后的部分中除所述重叠部分外的部分为独立的块区; 根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。
4.根据权利要求3所述的方法,其特征在于,所述根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分包括: 确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置; 根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分;当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构; 当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同,得到所述子镜像重划分后的块区结构。
5.根据权利要求4所述的方法,其特征在于,所述当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区包括: 若所述重叠部分位于所述子镜像的更新后的部分所在块区的前半部分,则将所述重叠部分的终止位置设置为所述子镜像的更新后的部分所在块区的新的起始位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或 若所述重叠部分位于所述子镜像的更新后的部分所在块区的后半部分,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或 若所述重叠部分位于所述子镜像的更新后的部分所在块区的中间,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,并新建块区,所述新建块区的起始位置为所述重叠部分的终止位置,所述新建块区的终止位置所述子镜像的更新后的部分所在块区的原终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区。
6.根据权利要求4所述的方法,其特征在于,所述当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同包括: 若重叠部分位于主镜像的更新后的部分所在块区的前半部分,则新建块区,新建块区的起始位置为重叠部分的终止位置,新建块区的终止位置与主镜像的更新后的部分所在块区的终止位置相同; 若所述重叠部分位于所述主镜像的更新后的部分所在块区的后半部分,则新建块区,所述新建块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述新建块区的终止位置为所述重叠部分的起始位置; 若所述重叠部分位于所述主镜像的更新后的部分所在块区的中间,则新建第一块区和第二块区,所述第一块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述第一块区的终止位置为所述重叠部分的起始位置;所述第二块区的起始位置为所述重叠部分的终止位置,所述第二块区的终止位置与所述主镜像的更新后的部分所在块区的终止位置相同。
7.根据权利要求3所述的方法,其特征在于,所述根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理包括: 确定所述差异化文件列表中的文件中的数据所在的块区,所述差异化文件列表中的文件中的数据所在的块区若为所述子镜像重划分后的块区结构中的所述重叠部分所在的块区,则包括: 若需要将所述重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将所述重叠部分的主镜像的更新后的部分合并到所述子镜像中; 若需要将所述重叠部分的主镜像的更新后的部分保留,则将所述重叠部分的子镜像的更新后的部分替换为所述重叠部分的主镜像的更新后的部分; 若忽略所述重叠部分的主镜像的更新后的部分,则不进行处理。
8.一种服务器,其特征在于,包括: 主镜像建立单元,用于在创建虚拟桌面基础架构环境时,创建主镜像,并将整个主镜像划分为一个块区; 子镜像建立单元,用于建立子镜像,并复制所述主镜像建立单元所创建的主镜像的块区结构作为所述子镜像的块区结构; 块区管理单元,用于在所述子镜像建立单元在创建完成所述子镜像后,当所述子镜像被更新时,将所述子镜像中每一块更新后的部分划分为一个块区; 合并单元,用于在所述主镜像建立单元在创建完成所述主镜像后,当所述主镜像被更新时,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分将所述主镜像的更新后的部分合并到所述子镜像中。
9.根据权利要求8所述的服务器,其特征在于,所述主镜像建立单元还用于: 当所述主镜像被更新时,将所述主镜像中每一块更新的部分划分为一个块区,并在更新升级过程中生成差异文件列表,所述差异文件列表记录在更新升级过程中记录在更新升级过程中相对于原主镜像的新增、删除或者修改的文件,所述差异文件列表包括文件路径、文件类型信息。
10.根据权利要求8或9所述服务器,其特征在于,所述合并单元具体用于: 当所述主镜像被更新时,根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分,得到所述子镜像重划分后的块区结构,所述子镜像重划分后的块区结构为:所述子镜像未更新的部分为独立的块区,所述重叠部分为独立的块区,所述子镜像更新后的部分中除所述重叠部分外的部分为独立的块区; 根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。
11.根据权利要求10所述服务器,其特征在于,所述合并单元具体用于: 当所述主镜像被更新时,确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置; 根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分; 当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构; 当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同,得到所述子镜像重划分后的块区结构; 根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。
12.根据权利要求11所述服务器,其特征在于,所述合并单元具体用于: 当所述主镜像被更新时,确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置; 根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分; 当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,若所述重叠部分位于所述子镜像的更新后的部分所在块区的前半部分,则将所述重叠部分的终止位置设置为所述子镜像的更新后的部分所在块区的新的起始位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或 若所述重叠部分位于所述子镜像的更新后的部分所在块区的后半部分,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区;或 若所述重叠部分位于所述子镜像的更新后的部分所在块区的中间,则将所述重叠部分的起始位置设置为所述子镜像的更新后的部分所在块区的新的终止位置,并新建块区,所述新建块区的起始位置为所述重叠部分的终止位置,所述新建块区的终止位置所述子镜像的更新后的部分所在块区的原终止位置,以便将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构; 当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,则在所述子镜像上新建块区,使所述新建块区的范围加上所述重叠部分的范围与所述主镜像的更新后的部分所在块区的范围相同,得到所述子镜像重划分后的块区结构; 根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。
13.根据权利要求11所述服务器,其特征在于,所述合并单元具体用于: 当所述主镜像被更新时,确定所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置; 根据所述主镜像和所述子镜像中更新后的部分所在块区起始位置和终止位置,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分; 当所述主镜像的更新后的部分所在块区在所述子镜像的更新后的部分所在块区的范围内时,将所述重叠部分从所述子镜像的更新后的部分所在块区的范围内移出,并将所述重叠部分划分为一个块区,得到所述子镜像重划分后的块区结构; 当所述子镜像的更新后的部分所在块区在所述主镜像的更新后的部分所在块区的范围内时,若所述重叠部分位于所述主镜像的更新后的部分所在块区的前半部分,则新建块区,所述新建块区的起始位置为所述重叠部分的终止位置,所述新建块区的终止位置与所述主镜像的更新后的部分所在块区的终止位置相同; 若所述重叠部分位于所述主镜像的更新后的部分所在块区的后半部分,则新建块区,所述新建块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述新建块区的终止位置为所述重叠部分的起始位置; 若所述重叠部分位于所述主镜像的更新后的部分所在块区的中间,则新建第一块区和第二块区,所述第一块区的起始位置与所述主镜像的更新后的部分所在块区的起始位置相同,所述第一块区的终止位置为所述重叠部分的起始位置;所述第二块区的起始位置为所述重叠部分的终止位置,所述第二块区的终止位置与所述主镜像的更新后的部分所在块区的终止位置相同,从而得到所述子镜像重划分后的块区结构; 根据所述差异化文件列表以及所述子镜像重划分后的块区结构,将所述主镜像的更新后的部分在所述子镜像中进行文件级的合并、替换或者忽略处理。
14.根据权利要求10所述服务器,其特征在于,所述合并单元具体用于: 当所述主镜像被更新时,根据所述主镜像更新后的块区结构以及所述子镜像更新后的块区结构,获取所述主镜像的更新后的部分所在块区与所述子镜像更新后的部分所在块区的重叠部分,并根据所述重叠部分对所述子镜像进行块区结构的重划分,得到所述子镜像重划分后的块区结构,所述子镜像重划分后的块区结构为:所述子镜像未更新的部分为独立的块区,所述重叠部分为独立的块区,所述子镜像更新后的部分中除所述重叠部分外的部分为独立的块区; 确定所述差异化文件列表中的文件中的数据所在的块区,所述差异化文件列表中的文件中的数据所在的块区若为所述子镜像重划分后的块区结构中的所述重叠部分所在的块区,则包括: 若需要将所述重叠部分的主镜像的更新后的部分和子镜像的更新后的部分都保留,则将所述重叠部分的主镜像的更新后的部分合并到所述子镜像中; 若需要将所述重叠部分的主镜像的更新后的部分保留,则将所述重叠部分的子镜像的更新后的部分替换为所述重叠部分的主镜像的更新后的部分; 若忽略所述重叠部分的主镜像的更新后的部分,则不进行处理。
15.—种桌面云系统,其特征在于,包括: 客户端,依赖于如权利要求8至14所述的服务器建立的子镜像,所述子镜像是由所述服务器根据主镜像建立的,并在所述主镜像被更新升级后,将更新升级后的部分应用于所述客户端对应的子镜像中; 如权利要求8至14所述的服务器,用于在创建虚拟桌面基础架构环境时,创建主镜像,并在主镜像更新升级后,将更新后的主镜像与所述客户端对应的子镜像重新建立依赖关系O
全文摘要
本发明提供一种虚拟机镜像的更新方法、服务器和桌面云系统,涉及计算机领域,能够建立主镜像和子镜像更新升级后的依赖关系,实现主镜像和子镜像的平滑升级。其方法为主镜像建立后,将整个主镜像划分为一个块区,主镜像更新后,将每一块更新后的部分划分为一个块区,而后子镜像建立时从服务器复制主镜像的块区结构作为所述子镜像的块区结构,子镜像更新后将每一块更新后的部分划分为一个块区,主镜像升级时,由服务器获取主镜像更新后的部分所在块区与子镜像更新后的部分所在块区的重叠部分,并根据重叠部分将主镜像更新后的部分合并到子镜像中。本发明的实施例用于建立主镜像和子镜像更新升级后的依赖关系,实现主镜像和子镜像的平滑升级。
文档编号H04L29/08GK103218248SQ20131009860
公开日2013年7月24日 申请日期2013年3月25日 优先权日2013年3月25日
发明者陈克平, 王婷, 秦岭 申请人:华为技术有限公司