'virsh save'后VM的状态

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'。:)

如果虚拟机具有大量内存,那么保存它将意味着花费大量时间来保存该内存。

如果不需要备份完整的虚拟机状态(因为通常它是多余的,当你由于时间差异而恢复时,会出现错误,甚至可能导致崩溃)。

通常情况下,虚拟机备份如下:

  1. 静默Vm的文件系统
  2. 获取虚拟机磁盘的实时快照
  3. 备份磁盘和虚拟机的configuration( virsh dumpxml VM
  4. 实时合并磁盘,使快照不见了

现在,只有kvm可能会非常棘手的部分是最后一部分。 它在当前大多数发行版中都使用blockpull来支持,但是不会将快照合并到基本映像中,它会做相反的事情 – 将基础数据从快照中提取出来,以便删除基本代码。 更好的命令是blockcommit ,它会将快照中的改变位推送到基本图像中,但是它只能在非常stream行的边缘分布中使用。 我希望它会进入RHEL 7.1,我们将会看到