KVM(Kernel-based Virtual Machine)是Linux内核中集成的开源虚拟化技术,通过将内核功能转化为虚拟化模块,允许用户在单一物理主机上创建和管理多个虚拟机,其管理命令主要围绕virsh
、virt-install
、virt-manager
等工具展开,这些工具基于libvirt库开发,提供了从命令行到图形界面的全面管理能力,以下从虚拟机生命周期管理、资源配置、网络配置、存储管理及监控排错五个维度,详细解析核心命令及使用场景。

虚拟机生命周期管理
虚拟机的生命周期包括创建、启动、停止、暂停、恢复及删除等操作,virsh
命令是核心工具,需以root权限或libvirt用户组执行。
创建虚拟机
创建虚拟机需先定义XML配置文件(或通过virt-install
自动生成),再通过virsh define
加载,XML文件包含虚拟机CPU、内存、磁盘、网络等核心配置,示例基础模板如下:
<domain type='kvm'> <name>vm-ubuntu</name> <memory unit='GiB'>2</memory> <vcpu placement='static'>2</vcpu> <os> <type arch='x86_64' machine='pc'>hvm</type> </os> <devices> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/var/lib/libvirt/images/vm-ubuntu.qcow2'/> <target dev='vda' bus='virtio'/> </disk> <interface type='network'> <source network='default'/> <model type='virtio'/> </interface> </devices> </domain>
使用virt-install
可快速创建虚拟机,无需手动编写XML,
virt-install \ --name vm-ubuntu \ --memory 2048 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/vm-ubuntu.qcow2,size=20 \ --cdrom /path/to/ubuntu.iso \ --os-variant ubuntu20.04 \ --network network=default \ --graphics spice
参数说明:--disk
指定磁盘路径及大小(单位GB),--cdrom
指定安装镜像,--os-variant
优化操作系统配置(可通过osinfo-query os
查看支持列表)。

启动与关闭
- 启动虚拟机:
virsh start vm-ubuntu
(临时启动,重启后失效);virsh autostart vm-ubuntu
(设置开机自启)。 - 关闭虚拟机:
virsh shutdown vm-ubuntu
(优雅关闭,需虚拟机安装acpid服务);virsh destroy vm-ubuntu
(强制关闭,类似断电,可能导致数据丢失)。
暂停与恢复
- 暂停:
virsh suspend vm-ubuntu
(将虚拟机状态保存在内存中,释放CPU资源,但内存仍被占用)。 - 恢复:
virsh resume vm-ubuntu
(从暂停状态恢复运行)。
删除虚拟机
删除虚拟机需先 undefine(删除配置),再可选删除磁盘:
virsh undefine vm-ubuntu # 仅删除配置,磁盘保留 virsh undefine vm-ubuntu --remove-all-storage # 同时删除配置和关联磁盘
资源配置与修改
虚拟机运行时或关闭状态下,可通过virsh edit
或virsh set*
命令调整CPU、内存等资源。
CPU配置
- 查看当前CPU:
virsh vcpuinfo vm-ubuntu
(显示虚拟CPU数量、状态及关联物理CPU)。 - 修改CPU数量:
- 临时修改(运行时生效,重启后失效):
virsh setvcpus vm-ubuntu 4 --live
(将CPU核数调整为4,需虚拟机支持热插拔)。 - 永久修改(修改XML配置):
virsh edit vm-ubuntu
,找到<vcpu>
标签,修改数值(如<vcpu placement='static'>4</vcpu>
),保存后重启虚拟机生效。
- 临时修改(运行时生效,重启后失效):
内存配置
- 查看当前内存:
virsh dumpxml vm-ubuntu | grep memory
(显示配置内存);virsh dommemstat vm-ubuntu
(显示内存使用统计)。 - 修改内存大小:
- 临时调整(需虚拟机安装balloon驱动):
virsh setmem vm-ubuntu 3GiB --live
(将内存调整为3GB,调整范围不能超过最大内存限制)。 - 永久调整:
virsh edit vm-ubuntu
,修改<memory>
(最大内存)和<currentMemory>
(当前内存)标签,如:<memory unit='GiB'>4</memory> <!-- 最大内存4GB --> <currentMemory unit='GiB'>3</currentMemory> <!-- 当前内存3GB -->
- 临时调整(需虚拟机安装balloon驱动):
网络配置管理
KVM虚拟机网络支持NAT、桥接、隔离模式等,通过virsh
管理虚拟网络和网卡。
虚拟网络管理
- 查看默认网络:
virsh net-list --all
(显示所有虚拟网络,包括default
网络,默认为NAT模式)。 - 查看网络详情:
virsh net-dumpxml default
(显示default
网络的XML配置,包括IP地址段、DHCP配置等)。 - 启动/关闭网络:
virsh net-start default
(启动网络);virsh net-autostart default
(设置网络开机自启)。
虚拟机网卡管理
- 添加网卡:
- 临时添加(运行时生效,重启后失效):
virsh attach-interface vm-ubuntu network default --live
(为虚拟机添加一块NAT模式网卡)。 - 永久添加:
virsh edit vm-ubuntu
,在<devices>
标签内添加:<interface type='network'> <source network='default'/> <model type='virtio'/> </interface>
- 临时添加(运行时生效,重启后失效):
- 删除网卡:
- 临时删除:
virsh detach-interface vm-ubuntu network default --live
(删除指定网络类型的网卡)。 - 永久删除:通过
virsh edit
移除对应<interface>
标签。
- 临时删除:
存储管理
虚拟机磁盘文件通常为qcow2格式(支持快照、压缩),可通过virsh
或qemu-img
工具管理。

磁盘管理
- 创建磁盘:
qemu-img create -f qcow2 /var/lib/libvirt/images/vm-disk.qcow2 20G
(创建20GB qcow2磁盘)。 - 扩展磁盘容量:
- 先扩展磁盘文件:
qemu-img resize /var/lib/libvirt/images/vm-ubuntu.qcow2 +10G
(增加10GB)。 - 再在虚拟机内分区扩容(需虚拟机操作系统支持,如Linux使用
growpart
+resize2fs
)。
- 先扩展磁盘文件:
- 挂载/卸载磁盘:
- 临时挂载:
virsh attach-disk vm-ubuntu /path/to/disk.iso vdb --type cdrom --live
(挂载ISO镜像为光驱)。 - 永久挂载:通过
virsh edit
添加<disk>
标签,指定<source file>
和<target dev>
。
- 临时挂载:
快照管理
快照可保存虚拟机某一时刻的状态(包括磁盘、内存),支持快速回滚。
- 创建快照:
virsh snapshot-create-as vm-ubuntu --name snap-2023 --description "Before update"
(创建名为snap-2023
的快照)。 - 查看快照:
virsh snapshot-list vm-ubuntu
(列出所有快照);virsh snapshot-current vm-ubuntu
(显示当前快照)。 - 恢复快照:
virsh snapshot-revert vm-ubuntu snap-2023
(恢复到指定快照,需先关闭虚拟机)。 - 删除快照:
virsh snapshot-delete vm-ubuntu snap-2023
(删除指定快照)。
监控与排错
状态监控
- 查看虚拟机列表:
virsh list
(显示运行中虚拟机);virsh list --all
(显示所有虚拟机,包括关闭状态)。 - 实时监控资源:
virt-top
(类似top
命令,显示虚拟机CPU、内存使用情况)。 - 查看日志:
virsh log vm-ubuntu
(显示虚拟机控制台日志,日志路径通常为/var/log/libvirt/qemu/vm-ubuntu.log
)。
常见排错
- 虚拟机无法启动:检查XML配置(
virsh define vm-ubuntu
重新加载配置)、磁盘路径是否存在、镜像是否损坏。 - 网络不通:确认虚拟网络是否启动(
virsh net-list
)、虚拟机网卡是否获取IP(virsh domiflist vm-ubuntu
查看网卡MAC及IP)、防火墙是否放行流量(如NAT模式需检查iptables
规则)。
相关问答FAQs
问题1:如何将KVM虚拟机的磁盘文件从qcow2转换为raw格式?
解答:使用qemu-img convert
命令转换格式,
qemu-img convert -f qcow2 -O raw /var/lib/libvirt/images/vm-ubuntu.qcow2 /var/lib/libvirt/images/vm-ubuntu.raw
转换后需通过virsh edit
修改虚拟机XML配置,将磁盘<driver>
标签的type
改为raw
,<source>
标签的file
路径指向raw格式磁盘文件,最后重启虚拟机生效。
问题2:KVM虚拟机开机自启失败如何排查?
解答:分三步排查:
- 检查libvirtd服务状态:执行
systemctl status libvirtd
,确保服务已启动并设置为开机自启(systemctl enable libvirtd
)。 - 检查虚拟机自启标记:执行
virsh list --autostart
,确认目标虚拟机是否在列表中;若不在,执行virsh autostart vm-ubuntu
重新设置。 - 查看日志:检查
/var/log/libvirt/libvirtd.log
(libvirtd服务日志)和虚拟机日志(/var/log/libvirt/qemu/vm-ubuntu.log
),定位具体错误信息(如磁盘路径错误、权限不足等)。