Skip to content

KVM 虚拟机管理

本章节介绍如何使用 virt-manager 图形界面和 virsh 命令行工具创建、管理虚拟机。

使用 virt-manager 管理虚拟机

virt-manager 简介

virt-manager(Virtual Machine Manager)是 Red Hat 开发的图形化虚拟机管理工具,提供直观的界面来创建、配置和管理 KVM 虚拟机。

安装 virt-manager

bash
# RHEL/CentOS/Fedora
yum install -y virt-manager

# Debian/Ubuntu
apt install -y virt-manager

启动 virt-manager

bash
# 从命令行启动
virt-manager

# 或者通过菜单启动:应用程序 → 系统工具 → 虚拟机管理器

使用 virt-manager 创建虚拟机

步骤 1:创建新虚拟机

  1. 打开 virt-manager
  2. 点击 "创建新虚拟机" 按钮(或者文件 → 新建)
  3. 选择安装介质(本地 ISO、网络安装)

步骤 2:配置虚拟机参数

  • 名称:输入虚拟机名称
  • 操作系统类型:选择 Linux/Windows/Other
  • 版本:选择具体版本
  • 内存:分配内存大小
  • CPU:分配 CPU 核心数

步骤 3:配置存储

  • 选择 "创建磁盘镜像"
  • 指定磁盘大小
  • 选择存储位置

步骤 4:网络配置

  • 选择网络类型(NAT/桥接/隔离)
  • 配置网络参数

步骤 5:完成创建

  • 确认配置信息
  • 点击 "完成" 开始安装

virt-manager 常用操作

操作说明
启动虚拟机右键虚拟机 → 打开 → 点击播放按钮
停止虚拟机右键虚拟机 → 关闭 → 强制关闭/正常关闭
暂停/恢复右键虚拟机 → 暂停/恢复
克隆虚拟机右键虚拟机 → 克隆
删除虚拟机右键虚拟机 → 删除

使用 virsh 管理虚拟机

virsh 简介

virsh 是 libvirt 提供的命令行管理工具,可以完成所有虚拟机管理操作,适合脚本化和远程管理。

虚拟机生命周期管理

查看虚拟机列表

bash
# 查看运行中的虚拟机
virsh list

# 查看所有虚拟机(包括已停止的)
virsh list --all

# 查看处于持久状态的虚拟机
virsh list --persistent

# 查看处于瞬时状态的虚拟机
virsh list --transient

创建虚拟机

方式一:使用 virt-install 交互式创建

bash
# 基本创建命令
virt-install \
    --name=vm01 \
    --vcpu=2 \
    --memory=4096 \
    --disk path=/var/lib/libvirt/images/vm01.qcow2,size=20 \
    --cdrom=/path/to/centos7.iso \
    --os-type=linux \
    --os-variant=rhel7 \
    --network network=default \
    --graphics vnc \
    --boot cdrom

# 完整示例
virt-install \
    --name=web-server \
    --vcpu=4 \
    --memory=8192 \
    --disk path=/var/lib/libvirt/images/web-server.qcow2,size=50,format=qcow2 \
    --cdrom=/tmp/ubuntu-22.04.iso \
    --os-type=linux \
    --os-variant=ubuntu22.04 \
    --network bridge=br0 \
    --graphics vnc,listen=0.0.0.0 \
    --console pty,target_type=serial \
    --boot hd,menu=on

方式二:从 XML 定义文件创建

bash
# 从 XML 文件定义虚拟机
virsh define /path/to/vm.xml

# 示例 XML 文件
cat > /tmp/vm.xml << EOF
<domain type='kvm'>
  <name>vm02</name>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc'>hvm</type>
    <boot dev='hd'/>
  </os>
  <devices>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/var/lib/libvirt/images/vm02.qcow2'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
    </interface>
    <graphics type='vnc' port='-1' autoport='yes'/>
  </devices>
</domain>
EOF

# 定义虚拟机
virsh define /tmp/vm.xml

启动虚拟机

bash
# 启动虚拟机
virsh start vm01

# 启动并连接控制台
virsh start vm01 --console

# 启动已定义的虚拟机
virsh create /path/to/vm.xml

停止虚拟机

bash
# 正常关闭虚拟机(发送 ACPI 信号)
virsh shutdown vm01

# 强制关闭虚拟机
virsh destroy vm01

# 等待关闭完成
virsh shutdown vm01 && virsh wait vm01 --timeout 60

暂停和恢复

bash
# 暂停虚拟机
virsh suspend vm01

# 恢复虚拟机
virsh resume vm01

重启虚拟机

bash
# 重启虚拟机(需要 guest-agent)
virsh reboot vm01

# 强制重启
virsh destroy vm01 && virsh start vm01

删除虚拟机

bash
# 取消定义虚拟机(删除配置,保留磁盘)
virsh undefine vm01

# 取消定义并删除磁盘
virsh undefine vm01 --remove-all-storage

# 彻底删除(包括所有快照)
virsh undefine vm01 --remove-all-storage --snapshots-metadata

虚拟机配置管理

查看虚拟机配置

bash
# 查看虚拟机 XML 配置
virsh dumpxml vm01

# 查看运行时配置(包含动态信息)
virsh dumpxml vm01 --running

# 导出配置到文件
virsh dumpxml vm01 > /path/to/vm-backup.xml

修改虚拟机配置

bash
# 编辑虚拟机配置(交互式)
virsh edit vm01

# 修改内存
virsh setmem vm01 8192M --config

# 修改 vCPU 数量
virsh setvcpus vm01 4 --config

# 修改最大内存(需要先停止虚拟机)
virsh setmaxmem vm01 16384M

# 添加 CPU 拓扑
virsh cpu-stats vm01

虚拟机状态管理

bash
# 查看虚拟机状态
virsh dominfo vm01

# 查看虚拟机 vCPU 使用情况
virsh vcpuinfo vm01

# 查看虚拟机实时资源使用
virsh domstats vm01

# 查看虚拟机 UUID
virsh domuuid vm01

虚拟机控制台访问

通过 virsh 访问控制台

bash
# 连接串行控制台
virsh console vm01

# 退出控制台:Ctrl + ]

# 连接图形控制台(需要 virt-viewer)
virt-viewer vm01

配置串行控制台

在虚拟机 XML 中添加:

xml
<serial type='pty'>
  <target port='0'/>
</serial>
<console type='pty'>
  <target type='serial' port='0'/>
</console>

克隆虚拟机

bash
# 克隆虚拟机
virt-clone \
    --original vm01 \
    --name vm01-clone \
    --file /var/lib/libvirt/images/vm01-clone.qcow2

# 自动命名克隆
virt-clone --original vm01 --auto-clone

虚拟机快照管理

bash
# 创建快照
virsh snapshot-create vm01

# 创建带名称的快照
virsh snapshot-create-as vm01 --name "snapshot-before-update"

# 查看快照列表
virsh snapshot-list vm01

# 查看快照详细信息
virsh snapshot-info vm01 --snapshotname "snapshot-before-update"

# 恢复到快照
virsh snapshot-revert vm01 --snapshotname "snapshot-before-update"

# 删除快照
virsh snapshot-delete vm01 --snapshotname "snapshot-before-update"

常见问题

Q: virt-install 报错 "unsupported format: qcow2"

原因:qemu-img 版本不支持 qcow2 格式。

解决方法

bash
# 升级 qemu-img
yum update qemu-img

# 或者指定兼容格式
--disk path=/path/to/disk.qcow2,format=qcow2,backing_store=/path/to/base.qcow2

Q: 虚拟机启动后无法连接网络

原因:网络配置问题或 virtio 驱动未安装。

解决方法

bash
# 检查虚拟机网络配置
virsh dumpxml vm01 | grep -A 10 interface

# 检查网桥状态
brctl show

# 在虚拟机中检查网络驱动
ethtool -i eth0

Q: virsh 连接远程主机失败

原因:远程 libvirtd 未配置或防火墙阻止。

解决方法

bash
# 在远程主机上配置 libvirtd 监听 TCP
vim /etc/libvirt/libvirtd.conf
# 设置 listen_tls = 0 和 listen_tcp = 1

# 重启服务
systemctl restart libvirtd

# 从本地连接远程
virsh -c qemu+tcp://remote-host/system list

下一步

了解虚拟机基本管理后,继续学习 网络与存储配置 掌握 KVM 的网络和存储管理。