“virsh save”之后虚拟机的状态

“virsh save”之后虚拟机的状态

virsh save vm_name memdump然后virsh restore memdump恢复正在运行的 VM。

但是,虚拟机在 之后关闭virsh save。我正在为 KVM 虚拟机编写“实时”备份和恢复脚本,因此在备份部分,我显然需要在备份后运行虚拟机。virsh restore memdump备份后立即执行此操作没有问题,但我觉得这基本上是不必要的 - 我“应该”能够暂停虚拟机,将其内存保存到文件中,然后简单地恢复/取消暂停虚拟机。

对于内存较少的虚拟机来说,这并不是什么问题,但如果虚拟机具有相当大的工作内存,则会不必要地延长备份时间。

virsh suspend不幸的是,即使我先这样做,虚拟机也会在之前被关闭virsh save

有没有办法做到这一点?(即暂停,保存,取消暂停)

答案1

首先,我完全同意@dyasny,很难找到“完整 VM 状态(又名带有内存)”的合理用例。

但是,如果你真的想要'virsh save 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

祝你好运 :)

======== 正在更新:(太长,无法回复) ===============

哦,也许这是我的冗长之处,“完整 VM 状态”==mem_state + disk_state,而“mem_state”==“vm 物理内存”+“vm cpu 寄存器”+“虚拟机管理程序中的 vm 设备状态”。

因此,'virsh save' 和 'virsh store' 是安全的,因为没有什么可丢失的,'保存/恢复'就像'笔记本电脑睡眠'一样,通常你会在'恢复'虚拟机后让你的应用程序继续运行。

如果“mem_state”和“disk_state”不同步,那将是一场灾难,这就是为什么“virsh save”在“save mem”之后强制执行“destroy”。

我的“virsh save without destroy”实际上是“完整 VM 备份”,disk_snapshot 隐藏在原始 qcow2 中。所以你只看到一个“mem_state”。:)

答案2

如果虚拟机有大量内存,则保存它无论如何都意味着花费大量时间来保存内存状态。

如果没有硬性要求备份完整的虚拟机状态(因为通常它是冗余的,由于时间差异,恢复时会遇到错误,甚至可能导致崩溃)。

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

  1. 停止虚拟机的文件系统
  2. 对虚拟机磁盘进行实时快照
  3. 备份磁盘和虚拟机的配置(virsh dumpxml VM
  4. 实时合并磁盘,使快照消失

现在,kvm 唯一可能有点棘手的部分是最后一部分。blockpull大多数当前发行版都支持使用它,但这不会将快照合并到基本映像中,它会执行相反的操作 - 将数据从基本映像拉入快照,这样您就可以删除基本映像。更好的命令是blockcommit,它会将快照中更改的位推送到基本映像中,但是,它仅在非常前沿的发行版中可用。我希望它能进入 RHEL 7.1,我们拭目以待

相关内容