KVM 常用命令

目录

查看虚拟机运行状况

virsh list              # 列出所有在运行的虚拟机
virsh list --all        # 列出节点所有虚拟机
virsh dominfo <vm名>  # 显示虚拟机的基本信息
virsh dumpxml <vm名>  # 显示虚拟机的当前 XML 配置文件

改变虚拟机状态

virsh start <vm名>     # 启动虚拟机
virsh reset <vm名>     # 重启虚拟机
virsh shutdown <vm名>  # 关闭虚拟机(调用系统关机)
virsh destroy <vm名>   # 强制关闭虚拟机
virsh suspend <vm名>   # 暂停虚拟机
virsh resume <vm名>    # 恢复暂停的虚拟机

创建与编辑虚拟机配置

virsh define <vm配置文>   # 通过配置文件定义一个虚拟机
virsh undefine <vm名>     # 删除虚拟机
virsh edit <vm名>         # 编辑虚拟机配置文件

虚拟机 XML 配置文件示例

<domain type='kvm'>
  <name>test_Ubuntu</name>           <!-- 虚拟机名称 -->
  <memory unit='KiB'>2097152</memory> <!-- 最大内存,单位 KiB -->
  <currentMemory unit='KiB'>2097152</currentMemory> <!-- 可用内存,单位 KiB -->
  <vcpu>8</vcpu>                     <!-- 虚拟 CPU 个数 -->
  <os>
    <type arch='x86_64' machine='rhel6.2.0'>hvm</type>
    <boot dev='cdrom'/>   <!-- 光盘启动为首选启动项 -->
    <boot dev='hd'/>      <!-- 硬盘启动为次要启动项 -->
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <!-- 硬盘配置 -->
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/test.qcow2'/> <!-- 镜像路径 -->
      <target dev='hda' bus='ide'/>  <!-- bus 还可设置为 virtio -->
    </disk>
    <!-- 光驱配置 -->
    <disk type='file' device='cdrom'>
      <source file='/var/lib/libvirt/images/ubuntu.iso'/>
      <target dev='hdb' bus='ide'/>
    </disk>
    <!-- 网络配置 -->
    <interface type='bridge'>
      <source bridge='kvmbr0'/>              <!-- 网桥名称 -->
      <mac address="00:16:3e:5d:aa:a8"/>    <!-- MAC 地址,务必唯一 -->
    </interface>
    <input type='mouse' bus='ps2'/>
    <!-- VNC 配置,端口自动分配 -->
    <graphics type='vnc' port='-1' listen='0.0.0.0' keymap='en-us'/>
  </devices>
</domain>

VNC 连接虚拟机

virsh vncdisplay <vm名>  # 显示 VNC 端口(如输出 :9)
# VNC 连接端口 = 5900 + 显示编号,如 :9 对应 5909

在线迁移

virsh migrate --persistent --undefinesource --live --unsafe <vm名> qemu+tcp://<目标>/system

参数说明:

--live              # 热迁移
--unsafe            # 即使迁移过程不安全也要迁移
--persistent        # 迁移后在新机上永久保留虚拟机
--undefinesource    # 迁移后在原机器删除虚拟机
--copy-storage-all  # 将虚拟磁盘也复制到新机器(非共享存储迁移时需要,但速度慢)

虚拟机网卡管理

virsh domiflist <vm名>  # 查看虚拟机网卡信息

# 临时添加网卡
virsh attach-interface <vm名> --type bridge --source <bridge>

# 禁用和启用网卡
virsh domif-setlink <vm名> <网卡MAC地> <up|down>

限制虚拟机带宽

# 限制入站带宽
virsh domiftune <vm名> <网卡MAC> --live --config --inbound -1,<峰值KByte/s>,<突发值KByte/s>

# 限制出站带宽
virsh domiftune <vm名> <网卡MAC> --live --config --outbound -1,<峰值KByte/s>,<突发值KByte/s>

快照备份

virsh snapshot-create-as --domain <VM名> --name <快照> --no-metadata
virsh snapshot-list <vm名>  # 列出快照
virsh domblklist <vm名>     # 列出存储设备

挂载或卸载光驱

# 挂载光驱 ISO
virsh attach-disk <vm名> <iso地> <设备名如hda> --mode readonly --type cdrom

# 卸载光驱 ISO
virsh attach-disk <vm名> "" <设备名如hda> --mode readonly --type cdrom

动态挂载或卸载硬盘

# 动态挂载硬盘
virsh attach-disk <VM名> <硬盘绝对路> vdb --driver qemu --subdriver qcow2

# 动态卸载硬盘
virsh detach-disk <vm名> <设备名如hda>

qemu-img 磁盘管理

# 查看磁盘信息
qemu-img info <硬盘路>

# 创建硬盘
qemu-img create -f <qcow2|raw> <硬盘路> <size>

# 派生创建硬盘(基于基础盘)
qemu-img create -f <qcow2|raw> <硬盘路> -b <基础盘路>

# 调整硬盘大小(只能增加,不能减少;需要 destroy 后开机才能显示)
qemu-img resize <硬盘路> <新容>

# 快照管理
qemu-img snapshot -l <硬盘路>              # 列出快照
qemu-img snapshot -a <快照TAG> <硬盘路>   # 应用快照
qemu-img snapshot -d <快照TAG> <硬盘路>   # 删除快照

# 转换磁盘格式
qemu-img convert -f <旧格> -O <新格> <旧文> <新文>
# 支持格式:qcow2、raw、vmdk、vpc、vdi

重启 KVM 服务

service libvirtd restart

#kvm #备份恢复