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:创建新虚拟机
- 打开 virt-manager
- 点击 "创建新虚拟机" 按钮(或者文件 → 新建)
- 选择安装介质(本地 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.qcow2Q: 虚拟机启动后无法连接网络
原因:网络配置问题或 virtio 驱动未安装。
解决方法:
bash
# 检查虚拟机网络配置
virsh dumpxml vm01 | grep -A 10 interface
# 检查网桥状态
brctl show
# 在虚拟机中检查网络驱动
ethtool -i eth0Q: 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 的网络和存储管理。
