virsh save vm_name memdump ,然后virsh restore memdump恢复(运行)虚拟机好吧。
但是, virsh save后,VM将被closures。 我正在为KVM虚拟机编写一个“实时”备份和恢复脚本,所以在备份部分,我显然需要在备份后运行一个虚拟机。 备份后立即执行virsh restore memdump并不是问题,但它本质上是不必要的 – 我“应该”能够暂停一个虚拟机,将其内存保存到一个文件,然后简单地恢复/取消暂停虚拟机。
这对于内存很less的虚拟机来说并不是一个问题,但是如果虚拟机具有相当大的工作内存,那么它就会不必要地延长备份。
不幸的是,即使我在virsh save之前先virsh suspend ,虚拟机也会closures。
有没有办法做到这一点? (即暂停,保存,取消暂停)
首先,我完全同意@dyasny,很难find一个合理的用例来说明“完全虚拟机状态(又名带内存)”。
但是,如果你真的想'virsh保存vm_name memdump'而不破坏虚拟机,你可以尝试
virsh snapshot-create-as ${domain} ${fake_snap} 'save vm while keep running' \ --no-metadata --atomic --live \ --memspec ${path_to_mem_dump_file},snapshot=external
祝你好运 :)
========更新:(太长时间才能回复)===============
噢,也许这是我的冗长,'完整的虚拟机状态'== mem_state + disk_state,而'mem_state'=='虚拟机物理内存'+'虚拟机CPU注册'虚拟机pipe理程序'设备状态'。
所以,“virsh save”和“virsh store”是安全的,因为它们不会像“笔记本电脑睡眠”那样丢失,“保存/恢复”,通常在“恢复”一个虚拟机之后,应用程序会继续运行。
如果'mem_state'和'disk_state'不同步,这是灾难性的,这就是为什么'save mem'后'virsh save'生成一个'destroy'的原因。
我的'virsh保存没有破坏'实际上是一个'完整的虚拟机备份',disk_snapshot是在原来的qcow2内部受到影响。 所以你只是看到一个'mem_state'。:)
如果虚拟机具有大量内存,那么保存它将意味着花费大量时间来保存该内存。
如果不需要备份完整的虚拟机状态(因为通常它是多余的,当你由于时间差异而恢复时,会出现错误,甚至可能导致崩溃)。
通常情况下,虚拟机备份如下:
virsh dumpxml VM ) 现在,只有kvm可能会非常棘手的部分是最后一部分。 它在当前大多数发行版中都使用blockpull来支持,但是不会将快照合并到基本映像中,它会做相反的事情 – 将基础数据从快照中提取出来,以便删除基本代码。 更好的命令是blockcommit ,它会将快照中的改变位推送到基本图像中,但是它只能在非常stream行的边缘分布中使用。 我希望它会进入RHEL 7.1,我们将会看到