菜鸟科技网

KVM常用命令有哪些?

KVM(Kernel-based Virtual Machine)是一种开源的虚拟化技术,它将Linux内核转化为一个Type-1(裸金属)hypervisor,允许用户在单一物理服务器上运行多个虚拟机(VM),KVM的高效性和与Linux内核的深度集成使其成为企业级虚拟化的首选方案之一,要熟练使用KVM,掌握其常用命令是必不可少的,以下将从虚拟机管理、网络配置、存储管理、快照与克隆、性能监控等多个维度详细介绍KVM的常用命令,并通过表格形式归纳关键操作,最后附上相关FAQs解答。

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

虚拟机管理命令

虚拟机的生命周期管理是KVM操作的核心,包括创建、启动、停止、删除等基本操作,这些命令通常通过virsh工具实现,virsh是KVM的命令行管理接口,基于libvirt库构建功能强大且灵活。

创建虚拟机

创建虚拟机有两种主要方式:基于磁盘镜像安装或通过预定义的XML配置文件安装。

  • 基于磁盘镜像安装:首先创建虚拟磁盘,然后启动安装过程。

    # 创建10GB的qcow2格式磁盘(动态分配空间)
    qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 10G
    # 通过virt-install启动安装(使用ISO镜像和网络安装)
    virt-install --name vm1 --ram 2048 --vcpus 2 --disk path=/var/lib/libvirt/images/vm1.qcow2,format=qcow2 \
    --cdrom /path/to/install.iso --network network=default --graphics vnc,listen=0.0.0.0 --os-variant centos8

    参数说明:--name指定虚拟机名称;--ram分配内存(MB);--vcpus分配CPU核心数;--disk指定磁盘路径和格式;--cdrom指向安装镜像;--network配置网络;--graphics启用VNC远程图形界面。

    KVM常用命令有哪些?-图2
    (图片来源网络,侵删)
  • 基于XML配置文件:手动编写XML配置文件,通过virsh define创建虚拟机。
    示例XML文件(vm1.xml):

    <domain type='kvm'>
      <name>vm1</name>
      <memory unit='MiB'>2048</memory>
      <vcpu placement='static'>2</vcpu>
      <os>
        <type arch='x86_64'>hvm</type>
        <boot dev='cdrom'/>
      </os>
      <devices>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/var/lib/libvirt/images/vm1.qcow2'/>
          <target dev='vda'/>
        </disk>
        <interface type='network'>
          <source network='default'/>
          <model type='virtio'/>
        </interface>
        <graphics type='vnc' listen='0.0.0.0' port='5901'/>
      </devices>
    </domain>

    通过virsh define vm1.xml定义虚拟机,此时虚拟机处于“关闭”状态,需手动启动。

启动与停止虚拟机

# 启动虚拟机(若已定义)
virsh start vm1
# 强制关闭虚拟机(相当于物理机电源键)
virsh destroy vm1
# 正常关闭虚拟机(需虚拟机安装了acpid服务)
virsh shutdown vm1
# 挂起虚拟机(保存当前状态到内存)
virsh suspend vm1
# 恢复挂起的虚拟机
virsh resume vm1

删除虚拟机

删除虚拟机前需确保虚拟机已停止,删除操作会移除虚拟机配置,但不会自动删除磁盘文件(需手动清理)。

# 停止并删除虚拟机(保留磁盘)
virsh undefine vm1
# 强制删除正在运行的虚拟机(不推荐,可能导致数据丢失)
virsh destroy vm1 && virsh undefine vm1

虚拟机网络配置命令

KVM支持多种网络模式,如NAT(默认)、桥接(Bridge)、仅主机网络等,网络配置主要通过virsh管理虚拟网络接口。

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

查看网络状态

# 列出所有虚拟网络
virsh net-list --all
# 查看指定网络详情(如default网络)
virsh net-info default
# 查看网络XML配置
virsh net-dumpxml default

管理虚拟网络

# 启动/停止网络
virsh net-start default
virsh net-stop default
# 定义新的虚拟网络(需先创建XML文件)
virsh net-define network.xml
# 删除网络(需先停止)
virsh net-undefine default

修改虚拟机网络配置

# 编辑虚拟机XML配置文件(会暂停虚拟机)
virsh edit vm1
# 动态添加网络接口(运行时生效)
virsh attach-device vm1 /path/to/nic.xml --config --live
# 动态移除网络接口
virsh detach-device vm1 /path/to/nic.xml --live

虚拟机存储管理命令

KVM支持多种磁盘格式(如qcow2、raw、vmdk等),存储管理包括磁盘创建、扩容、挂载等操作。

创建与管理磁盘镜像

# 创建qcow2格式磁盘(动态分配)
qemu-img create -f qcow2 /var/lib/libvirt/images/vm2_disk.qcow2 20G
# 创建raw格式磁盘(固定大小,性能更高)
qemu-img create -f raw /var/lib/libvirt/images/vm2_disk.raw 20G
# 查看磁盘信息
qemu-img info /var/lib/libvirt/images/vm1.qcow2
# 调整磁盘大小(仅支持扩容,需在虚拟机内部分区格式化)
qemu-img resize /var/lib/libvirt/images/vm1.qcow2 +5G  # 扩容5GB

挂载与卸载磁盘

# 动态添加磁盘到虚拟机(需准备XML配置文件)
virsh attach-device vm1 disk.xml --config --live
# 动态卸载磁盘
virsh detach-device vm1 disk.xml --live

虚拟机快照与克隆命令

快照和克隆是虚拟机高效运维的重要功能,快照用于保存某个时间点的状态,克隆用于快速复制虚拟机。

快照管理

# 创建快照(当前状态)
virsh snapshot-create vm1
# 创建带名称的快照
virsh snapshot-create-as vm1 snap1 "backup before update"
# 列出所有快照
virsh snapshot-list vm1
# 回滚到指定快照(需停止虚拟机)
virsh snapshot-revert vm1 snap1
# 删除快照
virsh snapshot-delete vm1 snap1

虚拟机克隆

# 完全克隆(创建新的磁盘文件,耗时较长)
virt-clone --original vm1 --name vm2 --file /var/lib/libvirt/images/vm2.qcow2
# 快速克隆(使用qcow2的copy-on-write特性,节省空间)
virt-clone --original vm1 --name vm3 --file /var/lib/libvirt/images/vm3.qcow2 --link

虚拟机性能监控命令

监控虚拟机的资源使用情况是保障稳定运行的关键,KVM可通过virshtopvmstat等工具实现监控。

使用virsh监控

# 查看虚拟机CPU使用率(实时)
virsh cpu-stats vm1
# 查看虚拟机内存使用情况
virsh dommemstat vm1
# 查看虚拟机IO统计
virsh domblkstat vm1

使用系统工具监控

# 查看所有虚拟机进程(qemu-system-*)
ps aux | grep qemu
# 使用top监控虚拟机CPU/内存(通过虚拟机PID)
top -p $(pgrep -f "vm1")
# 使用vmstat监控虚拟机整体性能
vmstat 1

关键命令速查表

操作类别 命令示例 功能说明
虚拟机创建 virt-install --name vm1 --ram 2048 --vcpus 2 --disk path=/path/to/disk 创建并启动虚拟机
虚拟机启动 virsh start vm1 启动已定义的虚拟机
虚拟机关闭 virsh shutdown vm1 正常关闭虚拟机(需安装acpid)
虚拟机删除 virsh undefine vm1 删除虚拟机配置(保留磁盘)
磁盘创建 qemu-img create -f qcow2 vm_disk.qcow2 10G 创建10GB的qcow2格式磁盘
快照创建 virsh snapshot-create-as vm1 snap1 "backup" 为虚拟机创建名为snap1的快照
克隆虚拟机 virt-clone --original vm1 --name vm2 --file /path/to/vm2.qcow2 完全克隆虚拟机vm1为vm2
网络列表 virsh net-list --all 列出所有虚拟网络状态
查看虚拟机状态 virsh domstate vm1 查看虚拟机当前状态(running/shut off/paused等)

相关问答FAQs

Q1: KVM虚拟机无法启动,提示“domain vm1 already exists”,如何解决?
A: 该错误通常表示虚拟机配置已被定义但未正确清理,解决步骤如下:

  1. 检查虚拟机状态:virsh domstate vm1,若为“shut off”但无法启动,可能是配置冲突。
  2. 尝试强制删除虚拟机配置:virsh undefine vm1 --remove-all-storage(会删除磁盘文件,谨慎操作)。
  3. 若磁盘文件需保留,可先备份磁盘,再执行virsh undefine vm1,然后重新定义虚拟机。

Q2: 如何为KVM虚拟机添加USB设备?
A: 动态添加USB设备需通过XML配置实现,步骤如下:

  1. 创建USB设备XML文件(usb.xml):
    <devices>
      <hostdev mode='subsystem' type='usb'>
        <source>
          <vendor id='0x1234'/>  # 替换为目标设备vendor ID
          <product id='0x5678'/> # 替换为目标设备product ID
        </source>
      </hostdev>
    </devices>
  2. 使用virsh attach-device命令添加:virsh attach-device vm1 usb.xml --live(运行时生效)。
  3. 验证设备是否已识别:在虚拟机内执行lsusb查看设备列表。
分享:
扫描分享到社交APP
上一篇
下一篇