KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它将Linux内核转化为一个Type-1(裸金属) hypervisor,允许用户在单个物理服务器上运行多个虚拟机(VM),以下是KVM常用命令的详细说明,涵盖虚拟机管理、网络配置、磁盘操作等核心场景。

虚拟机生命周期管理
虚拟机的创建、启动、停止和删除是日常运维中最频繁的操作,使用qemu-kvm命令可以直接管理虚拟机,但更推荐通过virt-manager(图形化工具)或virsh(命令行工具)进行操作。
创建虚拟机
使用virt-install命令可以快速创建虚拟机,其核心参数包括:
--name:虚拟机名称(如vm01)。--ram:分配内存(如2048表示2GB)。--vcpus:vCPU数量(如2)。--disk:磁盘路径和大小(如path=/var/lib/libvirt/images/vm01.img,size=20,单位为GB)。--cdrom:安装镜像路径(如/path/to/ubuntu.iso)。--os-type:操作系统类型(如linux、windows)。--network:网络模式(如network=default使用NAT网络)。
示例:
virt-install --name vm01 --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm01.img,size=20 --cdrom /path/to/ubuntu.iso --os-type linux --network network=default
启动与停止虚拟机

- 通过
virsh启动:virsh start vm01 - 关闭虚拟机( graceful shutdown):
virsh shutdown vm01 - 强制关闭(相当于电源键):
virsh destroy vm01
挂起与恢复
- 挂起虚拟机:
virsh suspend vm01 - 恢复虚拟机:
virsh resume vm01
删除虚拟机
删除虚拟机时会同时删除配置文件,但磁盘文件需手动清理:
virsh undefine vm01 # 删除虚拟机配置 rm /var/lib/libvirt/images/vm01.img # 删除磁盘文件
虚拟机状态与资源监控
查看虚拟机列表
- 运行中的虚拟机:
virsh list --state-running - 所有虚拟机(含未运行状态):
virsh list --all
查看虚拟机详细信息
virsh dominfo vm01 # 显示虚拟机基本信息(CPU、内存、状态等) virsh dumpxml vm01 # 导出XML配置文件(可用于修改配置后重新定义)
实时监控资源使用
使用top或htop查看物理机资源占用时,可通过qemu-system-x86_64进程定位虚拟机资源消耗,对于虚拟机内部监控,可安装virt-top工具:
virt-top # 类似top,但显示所有虚拟机的资源使用情况
虚拟机磁盘与存储管理
磁盘扩容
- 步骤1:扩容磁盘文件(使用
qemu-img):qemu-img resize /var/lib/libvirt/images/vm01.img +10G # 增加10GB空间
- 步骤2:在虚拟机内部识别新空间(Linux系统需使用
fdisk或parted调整分区,再通过resize2fs扩展文件系统)。
磁盘快照
快照可用于备份或回滚虚拟机状态:
virsh snapshot-create-as vm01 snapshot1 --description "Pre-update snapshot" # 创建快照 virsh snapshot-list vm01 # 列出所有快照 virsh snapshot-revert vm01 snapshot1 # 回滚到快照 virsh snapshot-delete vm01 snapshot1 # 删除快照
磁盘格式转换
将qcow2格式转换为raw格式(提升性能,但占用更多空间):
qemu-img convert -f qcow2 -O raw vm01.img vm01_raw.img
虚拟机网络配置
KVM虚拟机网络通常通过libvirt的虚拟网络(NAT)或桥接模式实现。
查看虚拟网络
virsh net-list --all # 列出所有虚拟网络 virsh net-info default # 查看默认NAT网络信息
配置桥接网络
- 创建桥接接口(如
br0),并绑定物理网卡(如eth0)。 - 在虚拟机XML中修改网络配置:
<interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> </interface>
- 使用
virsh edit vm01修改配置后,重启虚拟机生效。
虚拟机迁移与克隆
实时迁移(Live Migration)
要求源主机和目标主机共享存储(如NFS):
virsh migrate --live vm01 qemu+ssh://root@target_host/system # 迁移到目标主机
克隆虚拟机
使用virt-clone命令:
virt-clone --original vm01 --name vm02 --file /var/lib/libvirt/images/vm02.img
KVM模块与性能优化
检查KVM模块加载状态
lsmod | grep kvm # 确认kvm_intel或kvm_amd模块已加载 modprobe kvm_intel # 手动加载模块(Intel CPU)
CPU与内存优化
- 在虚拟机XML中配置CPU拓扑(
vcpu、sockets、cores、threads)。 - 启用内存 ballooning(通过
virt-manager或XML配置<memoryBacking>标签)。
相关问答FAQs
Q1: 如何解决虚拟机无法启动,提示“domain not found”错误?
A: 此错误通常是由于虚拟机配置文件丢失或损坏导致,可尝试以下步骤:
- 检查配置文件是否存在:
ls /etc/libvirt/qemu/vm01.xml。 - 若文件丢失,可通过
virsh dumpxml vm01重新生成配置,或手动恢复备份。 - 若配置文件存在,检查磁盘路径是否正确:
virsh domblklist vm01。
Q2: 如何在虚拟机中实现直通GPU(GPU Passthrough)?
A: 实现GPU直通需要以下步骤:
- 在物理机BIOS中开启VT-d(Intel)或AMD-Vi(AMD)功能。
- 使用
vfio模块绑定GPU:- 安装
pciutils和vfio相关包。 - 修改
/etc/modprobe.d/vfio.conf,添加options vfio-pci ids=GPU_Vendor_ID:Device_ID。
- 安装
- 在虚拟机XML中添加直通设备:
<hostdev mode='subsystem' type='pci' managed='yes'> <source> <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </source> </hostdev> - 重启虚拟机后,设备将直接在虚拟机中可用。
