我必须重启主机服务器,但我不想停止正在运行的虚拟机之一。所以我做了以下事情:
virsh save VM
保存虚拟机状态并在稍后使用以下命令恢复:
virsh restore VM
。一切正常,所以我可以再次访问我的虚拟机。与此同时,我删除了运行时创建的文件,virsh save
因为我认为(我仍然认为)一旦恢复虚拟机就不再需要了。
一小时后,我的虚拟机冻结了,我没能再次启动它。保存和恢复正在运行的虚拟机的正确方法是什么?
答案1
那么对于你的问题,“保存和恢复正在运行的虚拟机的正确方法是什么?”你几乎完全搞定了。使用 保存virsh save VM
并使用 恢复virsh restore VM
将执行你想要的操作——即将内存保存到磁盘,然后停止 VM(请参阅此链接)。
当您的虚拟机冻结时,我相信如果您没有删除状态文件,您就能够恢复(首先取决于虚拟机故障的根本原因)。
我通常不会将内存保存到状态文件中,因为我的用例运行不依赖内存的持久、无状态服务。如果我需要关闭,我通常只需运行它virsh destroy VM
,然后在必要时启动它。但是,这一切都取决于您自己的用例。
如果你担心再次丢失机器,你可能还想考虑使用快照备份虚拟机。例如:
virsh snapshot-create-as --domain {VM-NAME} --name "{SNAPSHOT-NAME}"
查看 NixCraft更多细节。
无论如何,为了让虚拟机在冻结后运行,您可以简单地取消定义损坏的虚拟机,并通过更新新创建的虚拟机的 XML 配置文档将其原始现有映像重新连接到新虚拟机。首先,拆除原始虚拟机:
:~$ virsh destroy OriginalVM
:~$ virsh undefine OriginalVM
构建新的虚拟机之后,停止它并访问配置:
:~$ virt-install --virt-type kvm --name NewVM --memory 4096 --disk size=1 --vcpus 4 --location /yadda/yadda.iso --network bridge=br0 --os-type=linux --so-on-and-so-forth
:~$ virsh destroy NewVM
:~$ virsh edit NewVM
然后,在编辑 XML 文件时通过键入搜索“磁盘”/disk
并更新源文件的路径:
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/update_to/path_of/OriginalVM.img'/>
保存并退出(:w
,:q
或简单地:x
)后,您应该能够执行virsh start NewVM
,然后通过 VNC、控制台或 ssh 访问运行映像的新 VM。
您还可以尝试克隆你的虚拟机,尽管我自己还没有尝试过:
virt-clone --connect=qemu:///system -o srchost -n newhost -f /path/to/newhost.qcow2