KVM 命令行虚拟机管理 核心总结
基于 libvirt 的 virsh 工具管理KVM虚拟机,包含虚拟机生命周期、配置、快照、磁盘、创建虚拟机、网络存储、删除、开机自启。
一、基础生命周期操作(virsh)
| 命令 | 功能 |
|---|---|
virsh list |
查看运行中虚拟机 |
virsh list --all |
查看全部(含关机)虚拟机 |
virsh start 虚拟机名 |
启动虚拟机 |
virsh shutdown 虚拟机名 |
优雅关机(ACPI,优先使用) |
virsh destroy 虚拟机名 |
强制断电,虚拟机卡死时使用,相当于拔电源 |
virsh reboot 虚拟机名 |
重启虚拟机 |
virsh suspend |
挂起/暂停虚拟机,内存数据落磁盘 |
virsh resume |
恢复挂起的虚拟机 |
命令详解:
virsh list:仅显示当前处于运行状态的虚拟机,适合快速确认哪些虚拟机在线。virsh list --all:显示所有虚拟机,包括已关机(shut off)状态的,便于掌握整体资源分布。virsh start 虚拟机名:启动一台已定义但处于关机状态的虚拟机,相当于给虚拟机通电开机。virsh shutdown 虚拟机名:向虚拟机发送 ACPI 关机信号,让操作系统优雅退出,优先使用,避免数据损坏。virsh destroy 虚拟机名:直接强制断电,相当于拔掉电源线。仅当虚拟机卡死、无法响应 shutdown 时使用,否则可能造成文件系统损坏。virsh reboot 虚拟机名:重启虚拟机,相当于先关机再开机。virsh suspend:挂起虚拟机,将内存状态保存到磁盘,暂停 CPU 运行,适合临时腾出宿主机资源。virsh resume:恢复被挂起的虚拟机,从磁盘加载内存状态继续运行。
信息查询:
virsh dominfo 虚拟机名:查看虚拟机基本信息,包括内存、CPU、状态、自动启动配置等。virsh domblklist 虚拟机名:列出虚拟机挂载的磁盘设备,确认磁盘路径与格式。virsh domiflist 虚拟机名:查看虚拟机网卡信息,包括 MAC 地址、网络类型与桥接关系。virsh vncdisplay 虚拟机名:查看虚拟机当前 VNC 端口号,用于远程图形界面连接。
交互模式:在终端输入virsh即可进入交互式命令行,此时可直接输入上述命令而无需重复输入virsh前缀,输入quit退出交互模式;virt-manager可调出图形化管理界面,适合不熟悉命令行的用户进行可视化操作。
二、虚拟机配置导入导出(备份配置重点)
virsh dumpxml 虚拟机名 > /root/xxx.xml:导出 xml 配置备份,将虚拟机的完整硬件配置(CPU、内存、磁盘、网卡等)保存为 xml 文件,是备份虚拟机配置的核心手段。virsh undefine 虚拟机名:注销虚拟机,只删除 libvirt 的 xml 记录,不会删除 qcow2 磁盘镜像,虚拟机从 libvirt 管理列表中移除,但磁盘数据仍保留在磁盘上。virsh define /root/xxx.xml:从备份的 xml 文件重新注册恢复虚拟机,相当于把之前注销的虚拟机重新纳入 libvirt 管理。virsh edit 虚拟机名:直接编辑虚拟机 xml 配置文件,可修改内存、CPU、磁盘、网卡等参数,修改后需重启虚拟机生效。
⚠️重点:undefine不会删磁盘,磁盘文件仍然保留。
三、快照管理
virsh snapshot-create-as 虚拟机名 快照名 "描述":为虚拟机创建快照,记录当前磁盘与内存状态,可用于快速回滚。virsh snapshot-list 虚拟机名:列出该虚拟机的所有快照,显示快照名称、创建时间与状态。virsh snapshot-revert 虚拟机名 --snapshotname 快照名:将虚拟机恢复到指定快照时的状态,恢复前建议先关闭虚拟机,避免数据不一致。virsh snapshot-delete 虚拟机名 --snapshotname 快照名:删除指定快照,释放磁盘空间,删除后无法再恢复到该快照点。
四、qemu‑img磁盘镜像管理
⚠️磁盘操作建议虚拟机关闭,避免镜像损坏
qemu‑img create -f qcow2 路径/xxx.qcow2 20G创建qcow2格式磁盘qemu‑img info 镜像路径查看磁盘镜像详细信息
五、virt‑install 命令行新建虚拟机
关键参数:
--name虚拟机名称;--memory内存MiB;--vcpusCPU核心数--disk path=磁盘镜像路径--locationISO安装镜像路径--network network=default使用KVM默认NAT网络--noautoconsole不自动弹出控制台--vnc --vnclisten=0.0.0.0 --vncport=5903开启VNC远程访问
示例:
bash
virt-install --name vm2 \
--memory 4096 --vcpus 2 \
--disk path=/disk/vm2.qcow2 \
--location /iso/CentOS‑7‑x86_64‑Minimal‑1810.iso \
--network network=default \
--noautoconsole
VNC访问:
宿主机IP:端口;监听0.0.0.0要放行防火墙,外部才能连接。
六、虚拟网络、存储池
虚拟网络
virsh net‑list --all查看全部虚拟网络virsh net‑start default启动默认NAT网络virsh net‑autostart default设置default网络开机自启virsh net‑dumpxml default导出网络xml配置
存储池
virsh pool‑list --all查看存储池virsh vol‑list default查看存储池内部磁盘镜像
KVM默认存储池路径:
/var/lib/libvirt/images/
七、删除虚拟机流程
- 先关闭虚拟机(shutdown/destroy)
- 可选:删除虚拟机快照
- 两种删除方式
virsh undefine vm3:仅注销xml配置,磁盘镜像保留virsh undefine vm3 --remove‑all‑storage:注销xml,同时自动删除关联磁盘
- 手动删磁盘:
rm -f /var/lib/libvirt/images/vm3.qcow2
注意:运行状态虚拟机不能执行undefine。
八、虚拟机开机自启
virsh autostart 虚拟机名:开启宿主机开机自启虚拟机virsh autostart --disable 虚拟机名:关闭开机自启virsh list --all --autostart:查看所有配置自启的虚拟机,必须带--all,关机虚拟机才会显示virsh dominfo 虚拟机名:查看单台虚拟机自启状态
九、重要易错点汇总
undefine只删xml配置,默认不会删除qcow2磁盘镜像。qemu‑img操作磁盘镜像,务必关闭虚拟机,防止镜像损坏。- VNC监听
0.0.0.0,防火墙需要放行对应端口,外部才能连接。 virsh list --autostart不加--all看不到关机但开启自启的虚拟机。- 虚拟机运行状态不能执行undefine注销。
- 备份优先
dumpxml导出xml配置,磁盘镜像单独备份。