V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
documentzhangx66
V2EX  ›  Linux

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

  •  
  •   documentzhangx66 · 2022-10-02 20:45:12 +08:00 · 3508 次点击
    这是一个创建于 565 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

    第 1 条附言  ·  2022-10-02 22:01:17 +08:00
    完事了,按照 2 楼 老哥的建议,我把虚拟机 1 的快照文件复制出来,改到虚拟机 2 的配置文件里,实现了快照的复制。
    16 条回复    2022-10-03 13:09:02 +08:00
    ltkun
        1
    ltkun  
       2022-10-02 20:53:04 +08:00 via Android
    没有研究过 但是可能是记事本里面的文字属于内存或者临时文件 如果虚拟机也可以克隆内存的话应该就可以做到
    billlee
        2
    billlee  
       2022-10-02 21:01:24 +08:00 via Android
    KVM 肯定是可以的,把磁盘镜像和内存镜像都复制一份,改下 qemu 命令行参数
    ashong
        3
    ashong  
       2022-10-02 21:04:53 +08:00
    克隆、快照都不保存内存数据
    detached
        4
    detached  
       2022-10-02 21:08:23 +08:00
    肯定是可以的,连 fault- tolerance 都可以做 https://pdos.csail.mit.edu/6.824/papers/vm-ft.pdf ,不存在技术上的难点,读读文档或者问问对面技术人员吧,
    codehz
        5
    codehz  
       2022-10-02 21:42:25 +08:00 via iPhone
    不仅可以静态克隆,还可以实现运行时 fork 一个运行 mc 服务器的虚拟机
    https://codesandbox.io/post/how-we-clone-a-running-vm-in-2-seconds
    CEBBCAT
        6
    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
        7
    kokutou  
       2022-10-02 21:56:06 +08:00 via Android
    商用的可以,桌面虚拟机不行。。。

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

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

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

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

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

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

    5#那个实际也是先快照在复制的操作,其他细节没提,但是我相信他们一定会对包括 MAC 地址等进行自动化的修改操作
    比如至少登录界面的服务器名字就变了
    起码我觉得这算不上严格意义的 bit by bit 克隆了
    documentzhangx66
        10
    documentzhangx66  
    OP
       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
        11
    xixiv5  
       2022-10-02 22:10:54 +08:00 via iPhone
    我用 hyper-v 的快照是可以的,还原后什么程序状态一起还原了
    kokutou
        12
    kokutou  
       2022-10-02 22:49:09 +08:00 via Android
    @documentzhangx66
    这种快照,你换个电脑就开不了机
    documentzhangx66
        13
    documentzhangx66  
    OP
       2022-10-03 00:07:34 +08:00
    @kokutou

    不会的,这是虚拟化。

    建议详细了解一下虚拟化原理。
    flynaj
        14
    flynaj  
       2022-10-03 01:37:54 +08:00 via Android
    这个功能所有虚拟机软件都支持,VirtualBox 完全可以,还可以多个分支。原理很简单就是把内存保存到物理文件里面。
    dangyuluo
        15
    dangyuluo  
       2022-10-03 03:03:35 +08:00
    我怎么记得 VMWare Workstation pro 就可以呢?
    abc8678
        16
    abc8678  
       2022-10-03 13:09:02 +08:00 via Android
    我一般挂起一下,然后把目录重新拷一份
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   939 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:13 · PVG 04:13 · LAX 13:13 · JFK 16:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.