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


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

1. VMWare:

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

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

2. VBox:

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

2.1 预备知识

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.3.1 修改镜像路径

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

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

2.3.2 修改镜像 UUID

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

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,如下图所示:

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

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

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

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

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

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

当然,也可以从还没有备份之前在VBox看到它们的父子关系,在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,如下图所示:

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

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

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

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

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"

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

然后我们通过如下命令来修改它的父节点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 节中的最后一个图的父子关系决定的,设置结果如下图所示:

2.3.7 修改.vbox配置文件

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

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

2.3.8 注册虚拟机

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

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

以及快照信息:

3. 总结

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

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

4. 附录

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

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

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

  1. 虚拟机的迁移和复制分发

    Vmware虚拟机安装完之后有的时候需要挪动.备份虚拟机文件.比如,从公司电脑复制到家里电脑:或者将已安装好的虚拟机拷贝给同事使用:或者原来磁盘空间满了需要换一个磁盘等等.Vmware提供了相应的迁移 ...

  2. 解决Virtual Box(vbox)虚拟机无法和主机复制粘贴拖放

    环境:主机win10,虚拟机Ubuntu,主机和虚拟机间无法复制粘贴文本和拖放 解决方法: 1.安装扩展包 确保安装了和vbox版本对应的扩展包,比如安装了VirtualBox 6.1.6,同时也要安 ...

  3. 【转】如何使用分区助手完美迁移系统到SSD固态硬盘?

    自从SSD固态硬盘出世以来,一直都被持续关注着,SSD的性能优势让无数用户起了将操作系统迁移到SSD的心思,直接后果就是让无数机械硬盘为止黯然退场,很多软件都可以做到系统迁移,然而,被完美迁移的系统却 ...

  4. 记一次Ubuntu完美迁移系统盘的折腾

    平淡的下午写着代码,突然系统弹窗:"/目录空间不足!!!",一点 "检查"一看,原来还是自己刚学linux那会儿分配的20G可怜空间,而如今已经不想打开wind ...

  5. 梦幻默认服务器文件夹修改器,【梦幻仙境V3.96服务端】梦幻最新完美开心版带存档与修改器时代梦幻最新5.2版本...

    [梦幻仙境V3.96服务端]梦幻最新完美开心版带存档与修改器时代梦幻最新5.2版本 梦幻仙境这个版本智能玩到109级.玩过这个梦战系列改版的都知道.就不介绍了.因为作者太垃圾了.但是游戏可玩性还是很高 ...

  6. 利用虚拟机实时迁移技术可以实现服务器的,VMware vMotion虚拟机的实时迁移技术概述...

    vMotion 可在主机之间迁移正在运行的虚拟机,因此进行计划内服务器维护时无需中断应用的使用. 概览 vSphere vMotion 能在实现零停机和服务连续可用的情况下将正在运行的虚拟机从一台物理 ...

  7. Win 10 Hyper-V 虚拟机怎么迁移部署

    环境 Hyper-V: 9.0 mysql 5.7 Win 10 专业版 问题描述: Hyper-V 虚拟机怎么迁移部署到另外地方 解决方案: 1.打开Hyper-V虚拟机管理器,选择导入虚拟机 2. ...

  8. vbox 虚拟机共享文件夹 debian

    主机64位windows7 虚拟机Debian 8 64位 注意:在网络更新时,可能需要修改 etc/apt/sources.list 文件,把前几条从CD更新删除掉,这样就会从网络更新 1.vbox ...

  9. kvm虚拟机静态迁移

    1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, ...

  10. xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页,解决内容断开的问题

    xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页,解决内容断开的问题 参考文章: (1)xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页 ...

最新文章

  1. 地图测量面积工具app_全站仪的使用面积测量
  2. bootstraptable获取所有数据_一键获取oracle用户下所有表的表名与其数据量
  3. MATLAB从入门到精通-如何在MATLAB中实现各种特殊上标?
  4. Android解决java.lang.OutOfMemoryError: bitmap size exceeds VM budget(转)
  5. 禁用Cookie后,Session怎么样使用
  6. 当自己颓废的时候怎么激励自己?深度好文!!!
  7. oracle数据库dca,有关Oracle数据库
  8. Linux下Grub命令配置详解
  9. urdf 学习笔记一
  10. css系统自带字体_CSS系统字体
  11. 春节假期,把“电影院”搬回家,泰捷WEBOX T1S 投影仪全面评测
  12. docker部署案例
  13. 输入中文错误:\xE4\xBB\x8E\xE5\x85\xA5...‘ for column ‘detail‘ at row 1
  14. 只需5步,新手小白如何创建实用的在线员工手册?
  15. vue 统计中英文字符串长度_Ant Design Vue实现区分中英文分全角/半角字符长度校验功能...
  16. 用友 uap NC系统单点登录总结
  17. Chrome安装程序遇到错误 0xe0000008解决办法
  18. Elasticsearch之Mapping设置详解
  19. 2020年全球数据中心十大发展趋势
  20. msconfig打不开怎么办?

热门文章

  1. 学习使用php的stripslashe()函数去除反斜杠
  2. 气象大数据平台(天擎)数据读取方法(python)(雷达数据下载)
  3. php文件显示文字乱码怎么解决,php遍历到的文件是中文文件名 显示为乱码 该如何解决...
  4. acme申请证书报错:Please update your account with an email address first.的修复方法
  5. [Unity]寻路导航
  6. 深入理解SLAM中的Marginalization
  7. 老毛桃PE工具安装32位win7系统ISO镜
  8. 传奇服务器脚本文件在哪个文件夹,传奇私服的GM命令在哪个文件夹里?
  9. python画布上显示多张图片_python实现在一个画布上画多个子图
  10. 乔治城大学计算机科学专业,[转载]美国西北大学计算机科学研究生最新专业排名...