1. 为什么选择 virt-manager 管理虚拟机
在 Linux 系统上管理虚拟机时,virt-manager 绝对是桌面用户的首选工具。作为 libvirt 的图形化前端,它完美结合了易用性和强大功能。我在运维岗位工作多年,尝试过各种虚拟化方案,但每次在 Ubuntu 桌面环境需要快速创建或调试虚拟机时,virt-manager 总是能提供最流畅的体验。
相比命令行工具 virsh,virt-manager 的图形界面让虚拟机创建、网络配置和存储管理变得直观。你可以通过拖拽调整虚拟 CPU 核心数,点击按钮就能挂载 ISO 镜像,这些操作在命令行环境下需要记忆大量参数。而对于刚接触 KVM 虚拟化的用户,virt-manager 更是降低了学习门槛 - 它的安装向导会帮你自动处理大部分复杂配置。
注意:虽然 virt-manager 是图形工具,但它实际是通过 libvirt API 与底层 QEMU/KVM 交互,所有操作最终都会转换为标准的 libvirt 调用。这意味着你完全可以在命令行用 virsh 管理 virt-manager 创建的虚拟机。
2. 安装前的环境准备
2.1 检查 CPU 虚拟化支持
在开始安装前,我们需要确认你的 CPU 支持硬件虚拟化。打开终端运行:
bash复制egrep -c '(vmx|svm)' /proc/cpuinfo
如果输出数字大于 0,说明 CPU 支持虚拟化。如果是 0,则需要:
- 进入 BIOS 启用 Intel VT-x 或 AMD-V 功能
- 检查是否在虚拟机中运行(嵌套虚拟化需要特殊配置)
- 某些笔记本电脑需要同时关闭 Secure Boot
我遇到过不少案例是用户忽略了这步检查,导致后续安装的 KVM 模块性能极差。特别是在云服务器上,一定要确认提供商是否开启了虚拟化支持。
2.2 更新系统软件包
保持系统最新能避免很多依赖问题:
bash复制sudo apt update && sudo apt upgrade -y
对于 Ubuntu LTS 版本,建议先检查当前内核版本:
bash复制uname -r
如果版本较旧(如低于 5.4),考虑安装硬件启用堆栈(HWE)内核:
bash复制sudo apt install --install-recommends linux-generic-hwe-$(lsb_release -rs)
3. 安装 KVM 和 virt-manager
3.1 安装虚拟化核心组件
Ubuntu 官方源提供了完整的虚拟化套件,一条命令即可安装:
bash复制sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
这个命令会安装:
- qemu-kvm:处理器虚拟化核心
- libvirt:管理虚拟机的守护进程和客户端库
- bridge-utils:网络桥接工具
- virt-manager:我们要用的图形界面
提示:生产环境建议额外安装
libguestfs-tools包,它提供的 guestfish 工具可以安全地修改虚拟机磁盘镜像,无需启动虚拟机。
3.2 配置用户权限
安装完成后,需要将你的用户加入相关组:
bash复制sudo usermod -aG libvirt $(whoami)
sudo usermod -aG kvm $(whoami)
然后注销重新登录使权限生效。这一步非常重要,否则普通用户无法管理虚拟机。
我曾经遇到过 virt-manager 能打开但无法创建虚拟机的情况,就是因为忽略了用户组配置。可以通过以下命令验证权限:
bash复制groups | grep libvirt
groups | grep kvm
4. 配置虚拟网络
4.1 默认网络配置
安装完成后,libvirt 会创建一个名为 "default" 的 NAT 网络:
bash复制virsh net-list --all
如果状态显示为 inactive,需要手动启动:
bash复制virsh net-start default
virsh net-autostart default
这个默认配置对大多数桌面使用场景已经足够,它提供:
- 虚拟机通过 NAT 访问外网
- 主机可以访问虚拟机
- 虚拟机间相互通信
4.2 高级网络配置
对于需要桥接网络的场景(如让虚拟机获得局域网 IP),可以创建桥接接口。首先安装网络管理工具:
bash复制sudo apt install -y network-manager
然后通过 nm-connection-editor 图形工具创建桥接,或者使用以下命令创建 br0 桥接:
bash复制sudo nmcli con add ifname br0 type bridge con-name br0
sudo nmcli con add type bridge-slave ifname eth0 master br0
sudo nmcli con up br0
在 virt-manager 中创建虚拟机时,选择这个桥接接口即可让虚拟机获得与主机同网段的 IP。
5. 使用 virt-manager 创建虚拟机
5.1 首次启动配置
通过应用菜单或终端启动 virt-manager:
bash复制virt-manager
首次启动时会提示选择连接方式:
- 本地 QEMU/KVM(默认)
- 远程 SSH 连接其他主机
- 其他特殊连接方式
选择本地连接后,主界面会显示当前系统资源使用情况和已有虚拟机。
5.2 创建新虚拟机
点击左上角"创建新虚拟机"按钮,向导会引导完成以下步骤:
-
安装源选择:
- 本地 ISO 镜像
- 网络安装
- 导入现有磁盘镜像
- 自定义安装
我通常建议先下载好 ISO 镜像到本地,选择"本地安装介质"选项。
-
操作系统选择:
- 自动检测(对常见发行版有效)
- 手动选择(对特殊系统需要)
-
内存和 CPU 分配:
- 内存建议不超过主机物理内存的 75%
- CPU 核心数可以多于物理核心(KVM 支持超配)
- 勾选"复制主机 CPU 配置"可获得最佳性能
-
磁盘设置:
- 新建磁盘镜像(qcow2 格式最灵活)
- 使用现有磁盘
- 直接使用物理磁盘
对于新手,建议选择 qcow2 格式,20-30GB 空间。这个格式支持:
- 动态分配(实际占用随使用增长)
- 快照功能
- 压缩和加密
-
网络选择:
- 默认 NAT
- 之前创建的桥接网络
- 其他特殊网络配置
-
最后确认:
- 勾选"安装前自定义配置"可以调整详细参数
- 建议勾选"启用存储"选项(自动挂载 ISO)
5.3 虚拟机性能优化
在虚拟机创建完成后,右键选择"打开",然后点击"详细信息"图标,可以调整以下关键参数:
-
CPU 模式:
- host-passthrough(最佳性能,完全暴露主机 CPU 特性)
- host-model(平衡兼容性和性能)
- 自定义(特殊需求)
-
磁盘缓存:
- none(最安全,但性能差)
- writeback(较好性能,有轻微风险)
- directsync(特殊需求)
-
显卡设置:
- 默认 QXL(兼容性好)
- VirtIO(需要客户机驱动,性能更好)
- 3D 加速(对图形界面有帮助)
-
其他设备:
- 添加 VirtIO 串口方便调试
- 调整声卡和 USB 控制器
6. 日常使用技巧
6.1 快捷键和操作技巧
- 快速重启:按住 Shift 点击重启按钮可以强制重置
- 控制台缩放:Ctrl+鼠标滚轮调整显示大小
- 全屏模式:双击窗口或使用 View → Fullscreen
- 截屏:Edit → Take Screenshot
6.2 磁盘和快照管理
-
扩展磁盘:
- 关闭虚拟机
qemu-img resize vmdisk.qcow2 +10G- 启动虚拟机并扩展分区
-
创建快照:
- 在 virt-manager 中选择"快照"标签
- 可以创建带内存状态的实时快照
- 快照会保存在 qcow2 磁盘文件中
-
克隆虚拟机:
- 右键虚拟机 → Clone
- 可以选择完整克隆(独立磁盘)或链接克隆(共享基础磁盘)
6.3 远程管理
virt-manager 支持管理远程主机:
- 文件 → 添加连接
- 选择连接方式(通常用 SSH)
- 输入远程主机地址和认证信息
- 可以同时管理多台主机的虚拟机
7. 常见问题解决
7.1 性能问题排查
如果虚拟机运行缓慢,可以检查:
-
CPU 负载:
bash复制
top -1查看 kvm 进程是否占用过高
-
磁盘 I/O:
bash复制
iotop -o检查磁盘是否成为瓶颈
-
内存压力:
bash复制
free -h确认是否有足够可用内存
解决方案包括:
- 减少虚拟机分配的资源
- 使用 VirtIO 驱动替代模拟设备
- 调整磁盘缓存策略
- 启用 KSM(内核同页合并)
7.2 网络连接问题
常见网络问题及修复:
-
无法上网:
- 检查默认网络是否激活
- 验证虚拟机是否获得 IP(DHCP)
- 查看防火墙规则
-
SSH 连接失败:
- 确认虚拟机 SSH 服务运行
- 检查端口转发设置(NAT 模式下)
- 验证主机和虚拟机网络连通性
-
桥接网络失效:
- 重新加载网络配置
- 检查桥接接口状态
- 验证物理网线连接
7.3 图形显示异常
如果虚拟机控制台显示异常:
- 尝试更换显卡模型(如从 QXL 改为 VirtIO)
- 检查 SPICE 或 VNC 服务是否正常运行
- 调整显示分辨率设置
- 更新客户机中的显卡驱动
对于 Windows 虚拟机,务必安装 virtio-win 驱动包中的显示驱动。
8. 高级功能探索
8.1 使用 virt-install 命令行工具
除了图形界面,还可以用 virt-install 创建虚拟机:
bash复制virt-install \
--name ubuntu-server \
--ram 2048 \
--disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=20 \
--vcpus 2 \
--os-type linux \
--os-variant ubuntu20.04 \
--network network=default \
--graphics spice \
--location 'http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/' \
--extra-args 'console=ttyS0'
这个命令会启动一个 Ubuntu 20.04 的无头安装。
8.2 虚拟机迁移
使用 virsh 命令可以轻松迁移虚拟机:
-
在源主机上转储 XML 定义:
bash复制
virsh dumpxml vmname > vmname.xml -
复制磁盘镜像到目标主机
-
在目标主机上定义虚拟机:
bash复制
virsh define vmname.xml
8.3 性能监控
libvirt 提供了丰富的监控接口:
-
查看 CPU 使用:
bash复制
virsh cpu-stats vmname -
监控内存使用:
bash复制
virsh dommemstat vmname -
获取块设备统计:
bash复制
virsh domblkstat vmname
这些数据可以集成到 Prometheus 等监控系统中。