virsh管理虚拟机¶
在 创建KVM虚拟机 之后,我们可以通过 virsh
管理虚拟机的生命周期:
备注
本文案例以虚拟机 z-b-data-1
为案例
启动虚拟机¶
最简单的启动虚拟机命令只需要虚拟机名字,例如启动
z-b-data-1
virsh start z-b-data-1
在上述 start
命令之后,可以添加一些有用参数:
--console
启动虚拟机之后,连接到虚拟机的控制台
--paused
启动虚拟机进入暂停状态
-autodestroy
当virsh断开连接后自动销毁虚拟机
--bypass-cache
这个参数结合managedsave
使用
--force-boot
放弃任何managedsave
选项并导致全新启动
console
连接虚拟机¶
连接到运行中的虚拟机:
virsh console z-k8s-m-0
注意,如果之前有连接终端会话没有结束,则会出现报错:
error: operation failed: Active console session exists for this domain
在终端连接会话中断开连接: 按下
ctrl+shift+]
配置虚拟机自动启动¶
virsh
提供了autostart
命令设置虚拟机自动启动属性,也就是在操作系统启动时自动虚拟机。例如 私有云架构 中z-b-data-1
/z-b-data-2
/z-b-data-3
是部署所有虚拟机镜像存储的 Ceph Atlas 分布式存储,需要首先在物理服务器启动时自动启动,以便提供其他虚拟机启动时加载镜像:virsh autostart z-b-data-1
如果要关闭自动启动,则添加一个 --disable
参数:
virsh autostart --disable z-b-data-1
重启虚拟机¶
virsh
重启虚拟机命令reboot
,并且提供了--mode modename
参数:virsh reboot z-b-data-1
保存虚拟机运行状态¶
virsh save
命令可以将一个运行的虚拟机的虚拟内存当前状态保存到一个指定文件,之后就可以通过 virsh restore
恢复运行。这个命令有些类似 virsh suspend
命令,区别在于 suspend
是暂停在物理主机的内存中,所以如果服务器重启就不能恢复虚拟机的当前状态;而 save
是把虚拟机内存状态保存到磁盘文件,所以即使物理主机重启,也可以通过对应的 restore
命令从磁盘文件恢复。
备注
virsh save
是保存虚拟机的快照( snapshot
)
virsh save
保存虚拟机状态:virsh save [--bypass-cache] domain file [--xml string] [--running] [--paused] [--verbose]
举例:
virsh save --bypass-cache z-dev z-dev.save
提示信息:
Domain z-dev saved to z-dev.save
一旦保存了虚拟机内存状态到磁盘文件,则虚拟机立即关闭
对应我们可以恢复保存的虚拟机:
virsh restore z-dev.save
提示信息:
Domain restored from z-dev.save
备注
保存 IOMMU 方式pass-through PCI设备的 z-b-data-1
虚拟机是报错的:
virsh save z-b-data-1 z-b-data-1.save
提示错误:
error: Failed to save domain z-b-data-1 to z-b-data-1.save
error: Requested operation is not valid: domain has assigned non-USB host devices
原因是 libvirt 冻结虚拟机时,虚拟机内部是不知道这个冻结操作,也就无法处理GPU设备的内存内容。解决的方法是采用 virsh dompmsuspend 挂起运行虚拟机 结合 QEMU虚拟机Agent 实现vram内存处理才能保存PCIe设备直通的虚拟机状态保存。
suspend 和 resume 虚拟机¶
virsh suspend
和 virsh resume
命令可用来挂起和解冻指定的虚拟机:
virsh suspend z-dev
virsh resume z-dev
重命名虚拟机¶
virsh domrename
可以重命名虚拟机,例如我改变虚拟机用途,用于构建第二个 Kubernetes Atlas 集群 Kubernetes集群(y-k8s)
virsh domrename z-k8s-n-6 y-k8s-m-1