virsh 管理虚拟机
virsh 是 libvirt 项目的核心命令行工具,专为管理虚拟化平台而设计,它基于 libvirt API,支持 KVM、Xen、VMware、Hyper-V 等多种虚拟化技术,是 Linux 系统管理员管理虚拟机的首选工具之一,通过 virsh,用户可以实现对虚拟机的创建、启动、停止、迁移、监控等全生命周期管理,同时具备强大的脚本扩展能力,适合自动化运维场景,本文将详细介绍 virsh 的核心功能及使用方法。

virsh 的基础连接与虚拟机管理
在使用 virsh 之前,需确保系统已安装 libvirt 及对应虚拟化驱动(如 KVM 的 qemu-kvm),通过 virsh connect 命令可指定管理目标,默认连接本地系统 Hypervisor(如 qemu:///system),或远程节点(如 qemu+ssh://root@192.168.1.100/system),远程连接需确保目标主机开放 libvirt 服务,并配置 SSH 免密登录。
虚拟机的生命周期管理是 virsh 最核心的功能,通过 virsh list --all 可查看所有虚拟机状态(运行中、关机、暂停等),启动虚拟机使用 virsh start <vm_name>,停止虚拟机则可选择 virsh shutdown <vm_name>(优雅关机)或 virsh destroy <vm_name>(强制断电),对于暂停的虚拟机,可通过 virsh resume 恢复运行,或 virsh suspend 暂停至内存状态。
虚拟机的创建支持两种方式:基于现有磁盘镜像的快速部署,或通过 XML 配置文件完整定义,使用 virsh create vm_config.xml 可根据配置文件创建虚拟机,而 virsh define vm_config.xml 则会将虚拟机定义为永久配置(重启后依然存在),删除虚拟机时,virsh undefine <vm_name> 仅删除配置文件,需手动清理磁盘镜像;若需彻底删除,可结合 rm 命令移除关联存储文件。
虚拟机配置与资源管理
virsh 允许动态调整虚拟机资源,无需停机即可修改 CPU、内存、存储等配置,通过 virsh vcpuinfo <vm_name> 可查看虚拟机 CPU 数量及当前分配情况,使用 virsh setvcpus <vm_name> <num> --live 可在线增加 vCPU 数量(需 Hypervisor 支持热插拔),内存调整则依赖 virsh memtune 和 virsh setmem 命令,virsh setmem <vm_name> 2G --live 可动态将内存扩容至 2GB(需确保当前可用内存充足)。
存储管理方面,virsh 支持虚拟磁盘的附加与移除,使用 virsh attach-disk <vm_name> <disk_path> <target> 可添加磁盘镜像,如 virsh attach-disk vm1 /data/vm1_disk2.vdb vdb;移除磁盘则通过 virsh detach-disk <vm_name> <target> 实现,网络接口管理同样灵活,virsh attach-interface <vm_name> network <network_name> 可添加虚拟网络接口,virsh detach-interface 则用于移除。

XML 配置文件的编辑是高级管理的关键,通过 virsh dumpxml <vm_name> > vm_config.xml 可导出当前虚拟机配置,修改后使用 virsh define vm_config.xml 生效,这种方式支持调整虚拟机启动顺序、设备驱动、NUMA 等高级参数,适用于精细化运维场景。
虚拟机监控与故障排查
virsh 提供丰富的监控命令,帮助管理员实时掌握虚拟机运行状态。virsh dominfo <vm_name> 可查看虚拟机基本信息(CPU、内存、磁盘使用量等),virsh domstate <vm_name> 则返回当前状态(running、shut off、paused 等),对于性能分析,virsh dommemstat <vm_name> 显示内存统计(如实际使用、swap 使用量),virsh vcpuinfo 和 virsh vcpupin <vm_name> 可查看 CPU 核心绑定情况,适用于 NUMA 优化。
故障排查时,日志是重要线索。virsh console <vm_name> 可直接连接虚拟机串口控制台,查看启动过程或系统日志;若虚拟机无法启动,可通过 virsh domxml-from-native <format> <config_file> 转换配置文件格式,或使用 virsh edit <vm_name> 在线调整 XML 配置,对于网络问题,virsh net-list 和 virsh net-info <network_name> 可检查虚拟网络状态,确保 DHCP 转发或桥接配置正确。
高级功能:快照、迁移与自动化
快照管理是虚拟机备份与回滚的重要手段,virsh 支持创建快照(virsh snapshot-create-as <vm_name> <snapshot_name> --description "backup")、列出快照(virsh snapshot-list <vm_name>)及恢复快照(virsh snapshot-revert <vm_name> <snapshot_name>),快照可基于磁盘状态或内存状态创建,支持增量备份,大幅降低存储成本。
虚拟机迁移分为静态迁移(离线)和动态迁移(在线,即热迁移),静态迁移通过 virsh migrate --offline <vm_name> qemu+ssh://dest_host/system 实现,需先关闭虚拟机;动态迁移则依赖共享存储(如 NFS、iSCSI),使用 virsh migrate --live <vm_name> qemu+ssh://dest_host/system 可在不中断服务的情况下迁移虚拟机,适用于高可用场景。

自动化运维方面,virsh 可与 Shell 脚本结合,实现批量管理,通过循环调用 virsh start 批量启动虚拟机,或结合 grep 和 awk 解析 virsh list 输出,筛选特定状态的虚拟机,virsh 支持 Python、Ruby 等语言的绑定,可通过 API 集成到自动化平台(如 Ansible、SaltStack),实现大规模虚拟机集群管理。
virsh 以其强大的功能、灵活的扩展性和跨平台兼容性,成为虚拟化管理的利器,无论是简单的虚拟机启停,复杂的资源调整与故障排查,还是高可用场景下的快照与迁移,virsh 均能提供高效、可靠的解决方案,对于追求自动化与精细化管理的企业而言,掌握 virsh 的使用方法,不仅能提升运维效率,更能为虚拟化平台的稳定运行提供坚实保障。




















