目前主流虚拟化为啥不支持克隆完整开机状态的虚拟机?

2022-10-02 20:45:12 +08:00
 documentzhangx66

1.虚拟机,开机,打开一个记事本程序,随便输入一些字符串,然后给虚拟机做快照,该快照为开机快照。

接着,无论此虚拟机,仍然是开机状态,还是已经被关机,都可以通过该开机快照,直接恢复到之前的开机状态。

所谓的开机状态,指的是,恢复开机快照后,之前打开的记事本程序,以及记事本上随机输入的字符串,仍然还在。

2.但是,目前无论 VMware 还是 KVM ,我都没发现,能够克隆开机状态的虚拟机,并且开机后,会直接还原到克隆时的状态,也就是那个记事本程序 + 随机输入的字符串仍然存在。

虽然目前是能够克隆开机的虚拟机,但克隆完成后,开机,是无法恢复到克隆时的开机状态的,开机后,记事本程序就没了。

3.我觉得,既然 VMware 与 KVM 都支持开机时的完整状态快照,那为什么不能支持开机时的完整状态克隆呢?

3520 次点击
所在节点    Linux
16 条回复
ltkun
2022-10-02 20:53:04 +08:00
没有研究过 但是可能是记事本里面的文字属于内存或者临时文件 如果虚拟机也可以克隆内存的话应该就可以做到
billlee
2022-10-02 21:01:24 +08:00
KVM 肯定是可以的,把磁盘镜像和内存镜像都复制一份,改下 qemu 命令行参数
ashong
2022-10-02 21:04:53 +08:00
克隆、快照都不保存内存数据
detached
2022-10-02 21:08:23 +08:00
肯定是可以的,连 fault- tolerance 都可以做 https://pdos.csail.mit.edu/6.824/papers/vm-ft.pdf ,不存在技术上的难点,读读文档或者问问对面技术人员吧,
codehz
2022-10-02 21:42:25 +08:00
不仅可以静态克隆,还可以实现运行时 fork 一个运行 mc 服务器的虚拟机
https://codesandbox.io/post/how-we-clone-a-running-vm-in-2-seconds
CEBBCAT
2022-10-02 21:49:17 +08:00
> 通过即时克隆操作可以创建一个新虚拟机用作目标虚拟机。目标虚拟机与源虚拟机具有相同的处理器状态、虚拟设备状态、内存状态和磁盘状态。

https://docs.vmware.com/cn/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-853B1E2B-76CE-4240-A654-3806912820EB.html 🤝
kokutou
2022-10-02 21:56:06 +08:00
商用的可以,桌面虚拟机不行。。。

比如 vsphere 就是可以的啊
fisherwei
2022-10-02 21:58:00 +08:00
个人认为,技术上是小问题,至少 qemu 是可以完全实现的,kvm 不好说。

但是,大问题是,新的虚拟机开启之后会与旧机器之间发生网络冲突。如果是故障转移这个问题不大,但是新开第二个虚拟机且两台机器共存的话,至少有一台机器可能需要重新获取网络地址,同时重启 /重载上面的应用服务,还会导致原机器的网络也在一段时间内发生故障。
Admstor
2022-10-02 22:08:15 +08:00
首先这不是一个技术难题

实际上 VMware 的 vMotion 本质就是将当前 VM 的内存状态包括网络链接一并迁移(需要一定的硬件条件支持)

但是这里是迁移而非复制,主要原因就是,如果存在两个包括内存状态都一样的 VM,就会存在各种冲突了

实际业务中,并不会有楼主这种克隆内存,存在 2 个一模一样的 VM 的需求,因为高可用向下由硬件+虚拟化层提供,向上由网络和软件负责,中间操作系统这一级别不负责高可用了,自然也没有针对"存在两个我"这种情况做出对应,何况操作系统也无法影响所有应用程序,一样会产生各种冲突

楼主如果有这种需求,可以当前状态做个快照,然后关机后直接复制 VM 的文件,再开机就可以间接实现你要的 2 个内存状态一样的 VM 了

5#那个实际也是先快照在复制的操作,其他细节没提,但是我相信他们一定会对包括 MAC 地址等进行自动化的修改操作
比如至少登录界面的服务器名字就变了
起码我觉得这算不上严格意义的 bit by bit 克隆了
documentzhangx66
2022-10-02 22:09:18 +08:00
@ltkun
@ashong
@fisherwei
@kokutou

1.VMware 、KVM 等主流虚拟机,都支持给开机虚拟机进行快照,这种开机快照能保存内存状态。

2.我按照 2 楼老哥的方法,已经实现了克隆虚拟机 + 克隆该虚拟机的开机快照,我验证了开机快照的恢复,能够正确恢复到记事本被打开 + 保留随机字符串的状态。

3.测试环境是 PVE ,简单介绍下,PVE 是基于 Debian OS 的虚拟化管理器,虚拟机用户态工具是 qemu ( qm ),虚拟机内核态用的是 kvm 。

4.这事其实就是 VMware 与 PVE 等管理工具偷懒了,虚拟机克隆时,没克隆快照文件。我还去各种国产超融合虚拟化软件里看了以下,虚拟机克隆,也没克隆快照。大家都偷懒了。

5.感谢:
@billlee
@detached
@codehz
@CEBBCAT
xixiv5
2022-10-02 22:10:54 +08:00
我用 hyper-v 的快照是可以的,还原后什么程序状态一起还原了
kokutou
2022-10-02 22:49:09 +08:00
@documentzhangx66
这种快照,你换个电脑就开不了机
documentzhangx66
2022-10-03 00:07:34 +08:00
@kokutou

不会的,这是虚拟化。

建议详细了解一下虚拟化原理。
flynaj
2022-10-03 01:37:54 +08:00
这个功能所有虚拟机软件都支持,VirtualBox 完全可以,还可以多个分支。原理很简单就是把内存保存到物理文件里面。
dangyuluo
2022-10-03 03:03:35 +08:00
我怎么记得 VMWare Workstation pro 就可以呢?
abc8678
2022-10-03 13:09:02 +08:00
我一般挂起一下,然后把目录重新拷一份

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/884401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX