virsh是kvm虚拟化环境中最核心的命令行管理工具,通过libvirt api控制虚拟机(domain)完整生命周期,支持定义、启动、暂停、快照、迁移、销毁等精准操作;virsh list与virsh list --all分别查看运行中和全部虚拟机状态,virsh start/shutdown/destroy实现优雅或强制启停,virsh suspend/resume/reboot用于临时维护,virsh define/undefine/autostart管理配置持久化与自启行为。

virsh 是 KVM 虚拟化环境中最核心的命令行管理工具,它通过 libvirt API 控制虚拟机(Domain)的完整生命周期——从定义、启动、运行中调整,到快照、迁移、销毁,全部可精准操作。不需要图形界面,一条命令就能完成生产级运维动作。
查看与识别虚拟机状态
掌握当前环境是所有操作的前提。virsh list 命令提供实时视图:
- virsh list:仅显示正在运行的虚拟机(ID、名称、状态)
- virsh list --all:列出全部虚拟机,包括 shutoff(已关机)、paused(暂停)、crashed(异常崩溃)等状态
- 状态含义很关键:running 表示正常运行;shutoff 是干净关机后状态;undefined 则说明该虚拟机未被 libvirt 定义,无法直接管理
启动与关机:区分“优雅”与“强制”
启动和关闭不是简单开关,而是两种不同粒度的控制逻辑:
- 启动:virsh start vm-name 启动已定义的虚拟机;若需实时观察启动过程(如排查卡顿),加 --console 参数可接入串口控制台
- 优雅关机:virsh shutdown vm-name 向客户机 OS 发送 ACPI 关机信号,依赖虚拟机内运行 acpid 服务;生产环境务必优先尝试此方式
- 强制终止:virsh destroy vm-name 直接终止 QEMU 进程,等效于断电,仅在 shutdown 失败或无响应时使用
暂停、恢复与重启
这些操作适用于临时维护或调试场景,不中断虚拟机内存上下文:
- 暂停:virsh suspend vm-name 将运行中虚拟机挂起,CPU 和内存状态保留在宿主机内存中,几乎瞬时完成
- 恢复:virsh resume vm-name 恢复暂停状态,虚拟机继续执行,用户无感知
- 重启:virsh reboot vm-name 触发客户机内部重启流程(需 acpid 支持);若不可用,可先 shutdown 再 start 实现等效效果
定义、取消与自启设置
虚拟机配置本身也需要生命周期管理:
- 定义虚拟机:virsh define /path/to/vm.xml 将 XML 配置注册进 libvirt,此后可用 virsh 管理,配置持久化存于 /etc/libvirt/qemu/
- 取消定义:virsh undefine vm-name 删除配置,但不删除磁盘文件;加 --remove-all-storage 可一并清理磁盘(慎用)
- 开机自启:virsh autostart vm-name 设置虚拟机随 libvirtd 服务启动而自动运行;--disable 可关闭该行为











