菜鸟科技网

KVM常用命令有哪些?

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

KVM常用命令有哪些?-图1
(图片来源网络,侵删)

虚拟机生命周期管理

虚拟机的创建、启动、停止和删除是日常运维中最频繁的操作,使用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:操作系统类型(如linuxwindows)。
  • --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

启动与停止虚拟机

KVM常用命令有哪些?-图2
(图片来源网络,侵删)
  • 通过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配置文件(可用于修改配置后重新定义)

实时监控资源使用
使用tophtop查看物理机资源占用时,可通过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系统需使用fdiskparted调整分区,再通过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拓扑(vcpusocketscoresthreads)。
  • 启用内存 ballooning(通过virt-manager或XML配置<memoryBacking>标签)。

相关问答FAQs

Q1: 如何解决虚拟机无法启动,提示“domain not found”错误?
A: 此错误通常是由于虚拟机配置文件丢失或损坏导致,可尝试以下步骤:

  1. 检查配置文件是否存在:ls /etc/libvirt/qemu/vm01.xml
  2. 若文件丢失,可通过virsh dumpxml vm01重新生成配置,或手动恢复备份。
  3. 若配置文件存在,检查磁盘路径是否正确:virsh domblklist vm01

Q2: 如何在虚拟机中实现直通GPU(GPU Passthrough)?
A: 实现GPU直通需要以下步骤:

  1. 在物理机BIOS中开启VT-d(Intel)或AMD-Vi(AMD)功能。
  2. 使用vfio模块绑定GPU:
    • 安装pciutilsvfio相关包。
    • 修改/etc/modprobe.d/vfio.conf,添加options vfio-pci ids=GPU_Vendor_ID:Device_ID
  3. 在虚拟机XML中添加直通设备:
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
      </source>
    </hostdev>
  4. 重启虚拟机后,设备将直接在虚拟机中可用。
分享:
扫描分享到社交APP
上一篇
下一篇