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),定位具体错误信息(如磁盘路径错误、权限不足等)。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/420484.html<
