logo
关于我们

技术分享

技术分享 VBox 虚拟机完美迁移/复制(带快照)

VBox 虚拟机完美迁移/复制(带快照)

2020-05-12

VBox 虚拟机完美迁移/复制(带快照)


由于项目开发的原因,本人一直喜欢使用虚拟机,主要使用的虚拟机包括VBoxVMWare,所以就经常面临虚拟机备份(这里的备份不是指快照,而是把整个虚拟机镜像(包括快照)进行压缩之后保存)、拷贝、迁移等问题。

1. VMWare:

这对于VMWare虚拟机来说简直是太简单了,直接把虚拟机所在目录进行整体备份/迁移就可以了(前提是你把所有的文件都放在同一个文件夹下),如下图所示:

云祺备份VMware vSphere虚拟机VBox

备份这整个文件夹之后,不管把这个文件夹拷贝到什么地方(别的机器上也行),只要在VMWare中选择【文件】->【打开】,打开该虚拟机的配置文件,既可以完美的带快照迁移该虚拟机,如下图所示:

云祺备份VMware vSphere虚拟机VBox云祺备份VMware vSphere虚拟机VBox

2. VBox:

对于Virtual Box 可就没有这么简单了,反正我之前陆陆续续搞了好久都没有搞成功(估计都有好几年了),但是最近因为做项目的需求,又搞了一轮,又搞了将近一天的时间,竟然被我搞出来了,特意写个博客记录一下,以后还会经常用到。

2.1 预备知识

首先我们需要了解一下关于VBox虚拟机的预备知识,首先是虚拟机的镜像文件/快照文件,我说的镜像文件是指在创建虚拟机的时候创建的那个磁盘镜像文件,如下图所示:

云祺备份VMware vSphere虚拟机VBox

在你创建虚拟机的时候你可以指定该文件放在什么位置,如下图所示(创建虚拟机的第二步):

云祺备份VMware vSphere虚拟机VBox

其次是虚拟机的快照文件,一般是以快照文件的UUID命名,一个快照文件对应一个.vdi文件,如下图所示:

云祺备份VMware vSphere虚拟机VBox

快照文件的位置是在创建虚拟机的第一步指定的,如下图所示:

云祺备份VMware vSphere虚拟机VBox

按照上图的配置所创建的虚拟机,它的快照文件就会在 C:\Users\ML\VirtualBox VMs\test1\Snapshots\ 目录下。

最后,还有一个核心的文件,那就是虚拟机的配置文件,这个文件记录着当前虚拟机的所有配置信息,包括快照,虚拟磁盘,虚拟机配置等,它所在的位置也是在创建虚拟机的第一步指定,在 C:\Users\ML\VirtualBox VMs\test1\ 目录下,它包含两个文件,一个是.vbox文件,另一个是.vbox-prev文件,核心文件是.vbox文件,如下图所示:

云祺备份VMware vSphere虚拟机VBox

2.2 虚拟机(带快照)迁移至其它机器上

通常情况下,为了方便虚拟机管理,我会把 2.1节中提到的文件都放在同一个目录下,这样一来,不管是备份还是迁移都很方便,如下图所示:

云祺备份VMware vSphere虚拟机VBox

迁移的时候,我就把这一整个目录打包迁移到目标机器上,由于是在不同的机器上进行虚拟机迁移,因此不涉及到 镜像文件的UUID相同的情况,因此,比较方便,把目标迁移(复制)过去之后,直接打开虚拟机的配置文件 .vbox 文件,修改一下里面关于路径的几个配置选项即可(一般只在配置文件的开头处),也就是在配置文件中更新一下快照文件和虚拟机镜像文件的路径,如下图所示;

云祺备份VMware vSphere虚拟机VBox

然后在新机器上的VBox里面点击【控制】->【注册】,选择刚才修改好的配置文件,打开即可。

云祺备份VMware vSphere虚拟机VBox

云祺备份VMware vSphere虚拟机VBox

如果有快照文件没有被注册的话,需要手动注册快照文件:【介质】->【注册】,选择快照文件,然后注册。(如果有多个快照,要从最早的快照开始依次注册,最后注册最近的快照)。

云祺备份VMware vSphere虚拟机VBox

 

注意:在启动时可能会显示“FATAL: Could not read from the boot medium! System halted.”,如下图所示:

云祺备份VMware vSphere虚拟机VBox

遇到这个问题的解决方法就是:

在复制虚拟机之前,先创建一个快照(假设叫做《快照A》),然后再复制整个虚拟机(包括快照等),最后启动之前,选择恢复快照到刚才创建的那个快照(《快照A》),然后就可以正常启动了。

 

2.3 虚拟机(带快照)本机拷贝

本机拷贝虚拟机相对比较麻烦,因为要涉及虚拟机镜像文件UUID冲突问题,首先我们要把原来虚拟机的配置文件(.vbox文件等)、原始镜像文件(.vdi文件)、快照文件拷贝到目标文件夹,我们现在就拿 Ubuntu_18.04_x64 为例,复制一份,叫做Ubuntu_18.04_x64_2,如下图所示:

云祺备份VMware vSphere虚拟机VBox

进入该目录,查看该目录内部的文件信息如下所示:

云祺备份VMware vSphere虚拟机VBox

2.3.1 修改镜像路径

首先要修改配置文件中的路径,更新路径,直接用VSCode/Nodepad++等文本编辑工具打开该配置文件,全部路径替换,如下所示(路径的表示方式最好用Linux下的路径表示方式,也就是使用反斜杠,而不是双斜杠):

云祺备份VMware vSphere虚拟机VBox

总共有四个地方(替换之后记得保存),替换之后,如果直接去VBox虚拟机中注册,则会由于虚拟机镜像文件的UUID冲突导致注册失败,如下图所示:

云祺备份VMware vSphere虚拟机VBox

2.3.2 修改镜像 UUID

这时候首先需要修改原始虚拟机镜像的UUID,修改方法如下:在当前虚拟机目录打开控制台,然后执行如下命令:

云祺备份VMware vSphere虚拟机VBox

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethduuid Ubuntu_18.04_x64.vdi

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethduuid Ubuntu_18.04_x64.vdi

该命令是VBox安装目录下的VBoxManage.exe程序执程序行的,中间的两个选项表示设置镜像的UUID,

该命令执行完之后可以看到该镜像的UUID被修改为:fb1614e7-eeeb-441e-b803-fdbdd8c70d0e,如下图所示:

云祺备份VMware vSphere虚拟机VBox

2.3.3 在配置文件中更新镜像的 UUID

此时,需要再更新 .vbox 文件中的 UUID,把镜像 Ubuntu_18.04_x64.vdi 的UUID更新为刚才修改之后的值,修改前如下:

云祺备份VMware vSphere虚拟机VBox

修改后(使用全部替换功能,把出现这个值的地方全部替换):

云祺备份VMware vSphere虚拟机VBox

 

2.3.4 屡清快照之间的父子关系

快照与镜像文件之间的关系是一种数(Tree)状关系,原始的磁盘镜像文件就是这棵树的根节点(在我们这里就是:Ubuntu_18.04_x64.vdi 这个文件),每生产一个快照,相当于创建一个孩子节点,我们可以根据快照的修改日期来区分它们的父子关系(当然,还可能会有兄弟关系,这里我们先不讨论),如下图所示:

云祺备份VMware vSphere虚拟机VBox

修改日期比较早的是父节点:{24751e29-44e9-4716-b483-6938d399486c}.vdi,我们把它简称为:{24*}.vdi,比较晚的是孩子节点:{6cf833b6-5d47-499b-bef3-53eac600c5e8}.vdi,我们把它简称为:{6c*}.vdi,然后再加上根节点,就可以知道它们的父子关系了,如下图所示:

云祺备份VMware vSphere虚拟机VBox

当然,也可以从还没有备份之前在VBox看到它们的父子关系,在VBox中的【管理】->【虚拟介质管理】中展开虚拟介质即可看到,如下图所示:

云祺备份VMware vSphere虚拟机VBox云祺备份VMware vSphere虚拟机VBox

2.3.5 修改快照UUID

由于每一个快照都UUID都会和原来的快照UUID重复,因此,需要修改各个快照的UUID,并记录它们的UUID,在快照所在的目录下打开控制台,修改的命令如下:

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethduuid "{24751e29-44e9-4716-b483-6938d399486c}.vdi"

修改之后,{24751e29-44e9-4716-b483-6938d399486c}.vdi 的UUID就变成了:0a605239-2e2e-480f-a489-62d95fdb2ba9,而{6cf833b6-5d47-499b-bef3-53eac600c5e8}.vdi 的UUID就变成了:ca96d49c-062e-4488-b57a-b3c6fad6aa24,如下图所示:

云祺备份VMware vSphere虚拟机VBox

我们现在把这两个新的快照按照新的UUID重命名一下,重命名之后如下图所示:

云祺备份VMware vSphere虚拟机VBox

我们把 {0a605239-2e2e-480f-a489-62d95fdb2ba9}.vdi 简称为: {0a*}.vdi,把 {ca96d49c-062e-4488-b57a-b3c6fad6aa24}.vdi 简称为:{ca*}.vdi,它们的父子对应关系 理论上 应该如下:

云祺备份VMware vSphere虚拟机VBox

实际上,这两个快照内部记录的父节点的UUID还是原来的,需要修正过来,在2.3.6节中修正。

修改了快照的UUID,现在就需要更新它在配置文件中的UUID值了,也是使用批量替换的方法,把两个快照的UUID批量更新,如下图所示:

云祺备份VMware vSphere虚拟机VBox

云祺备份VMware vSphere虚拟机VBox

2.3.6 修改快照的父节点UUID

2.3.2 节中我们已经修改了根节点的UUID,现在对于{0a*.}vdi,它的内部记录的父节点的UUID还没有变,因此,需要我们自己更新它们内部的父节点的UUID,首先我们可以使用如下命令来查看快照当前的父节点的UUID:

C:\MyProgramFiles\VBox\VBoxManage.exe showhdinfo "{0a605239-2e2e-480f-a489-62d95fdb2ba9}.vdi"

执行命令之后的结果如下图所示:

云祺备份VMware vSphere虚拟机VBox

然后我们通过如下命令来修改它的父节点UUID:

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethdparentuuid "{0a605239-2e2e-480f-a489-62d95fdb2ba9}.vdi" fb1614e7-eeeb-441e-b803-fdbdd8c70d0e

C:\MyProgramFiles\VBox\VBoxManage.exe internalcommands sethdparentuuid {ca96d49c-062e-4488-b57a-b3c6fad6aa24}.vdi 0a605239-2e2e-480f-a489-62d95fdb2ba9

这里的父节点的UUID是根据 2.3.5 节中的最后一个图的父子关系决定的,设置结果如下图所示:

云祺备份VMware vSphere虚拟机VBox

2.3.7 修改.vbox配置文件

最后需要再次修改配置文件,把以下这行的UUID改一下(有关键字 Machine 的那行):

云祺备份VMware vSphere虚拟机VBox

只要跟原来不一样就可以了,比如,我会改最后一位,把它改成 2或者其它值,反正是这个UUID不能用,自己随意编一个新的UUID即可,我修改过后的配置文件如下:

云祺备份VMware vSphere虚拟机VBox

2.3.8 注册虚拟机

最后一步就是注册虚拟机了,在VBox中打开【控制】->【注册】,打开注册窗口,定位到新虚拟机的配置文件处:
P:\VBox\Ubuntu_18.04_x64_2\Ubuntu_18.04_x64
打开对应的配置文件即可:如下图所示:

云祺备份VMware vSphere虚拟机VBox云祺备份VMware vSphere虚拟机VBox

虚拟机复制成功,可以发现新的虚拟机已经出现在VBox中了,如下图所示:

云祺备份VMware vSphere虚拟机VBox

云祺备份VMware vSphere虚拟机VBox

以及快照信息:

云祺备份VMware vSphere虚拟机VBox

3. 总结

最后总算是写完这篇博客了,感觉还是比较有用的,中间步骤也比较多,比较繁琐,特别是本机拷贝带快照的VBox虚拟机的时候,步骤很多。但是,如果不带快照拷贝的话,就很简单了,直接复制虚拟机镜像文件就可以了,配置文件都不需要复制,然后新建一个虚拟机,磁盘选择已有磁盘即可,非常方便。

当然,如果嫌麻烦,也可以把快照删除了再本机拷贝虚拟机,因为这样很方便。

4. 附录

还有另一种方式,那就是导出虚拟机文件,【管理】->【导出虚拟电脑】,如下图所示:

云祺备份VMware vSphere虚拟机VBox云祺备份VMware vSphere虚拟机VBox

当然,这种导出方式比较通用,导出的镜像对 VBoxVMWare 都可以使用。

 

 

 

 

 

 

云祺备份软件,云祺容灾备份系统,虚拟机备份,数据库备份,文件备份,实时备份,勒索软件,美国,图书馆
  • 标签:
  • 其他

您可能感兴趣的新闻 换一批

现在下载,可享30天免费试用

立即下载