Linux避坑实录:virt-manager那些事
前言
最近在Arch Linux上部署KVM+virt-manager做虚拟机管理,本以为一键安装就能顺畅使用,结果接连踩中libvirt网络相关的多个坑,从最开始的套接字文件缺失、default网络找不到,到后续的临时网络无法删除、virsh命令查不到网络但虚拟网桥实际存在,甚至创建虚拟机时直接报「无法获取接口MTU、无此设备」的错误,折腾了好久才彻底修复。
这篇博客就把完整的 修复方案 整理出来
一、本次遇到的全部故障现象
先把排查过程中遇到的核心报错汇总,方便大家对照自查,基本覆盖了virt-manager网络配置的所有常见坑:
初始基础报错:无法连接libvirt qemu:///system,提示找不到virtqemud-sock、virtnetworkd-sock、virtstoraged-sock套接字文件;执行virsh net-list –all为空,无任何网络配置,手动启动default网络提示不存在;
配置冲突报错:手动创建default网络提示UUID冲突,删除网络时报「无法删除临时网络」;创建虚拟机报Cannot get interface MTU相关错误;
状态异常:sudo virsh net-list –all查看到default网络状态为inactive,Autostart为no,Persistent为yes,配置存在但无法激活。
二、核心问题根源
基础网络缺失/权限/守护进程问题
看似是多个不相关的报错,其实核心根源只有一个:Arch Linux默认不会完整启动libvirt的核心守护进程,也不会自动生成default NAT网络配置,再加上残留临时网络、用户权限不足、网络未持久化这三个小问题,叠加导致了一系列基础故障。简单说:管虚拟机网络、存储、虚拟化的后台服务没开,默认的虚拟机上网配置没建,残留的临时配置还捣乱,普通用户没权限查看系统级网络,就出现了各种奇怪报错。
三、完整实操修复步骤
步骤1:启动并开机自启libvirt模块化核心守护进程
Arch采用模块化libvirt架构,摒弃传统单一libvirtd服务,优先启动模块化守护进程,避免冲突,解决套接字缺失问题:
启动网络、虚拟化、存储三大模块化服务
sudo systemctl start virtnetworkd virtqemud virtstoraged
设置开机自启
sudo systemctl enable virtnetworkd virtqemud virtstoraged
步骤2:生成一个默认配置文件(如果没有)
示例配置文件(实测有效)
1 | # 1. 创建default网络的配置目录 |
步骤3:重新激活default网络并设置开机自启
激活已定义的 default 网络,无需重新定义配置文件:
直接启动default网络
sudo virsh net-start default
设置网络开机自启,重启后自动激活
sudo virsh net-autostart default
验证网络状态
sudo virsh net-list --all
四、修复成功效果验证
执行
sudo virsh net-list --all,能看到default网络状态为active、Autostart为yes、Persistent为yes;ip link show能查到virbr0虚拟网桥正常运行;打开
virt-manager,创建新虚拟机时,网络选项会自动识别default NAT网络,无需手动配置,创建虚拟机不再报任何网络相关错误,虚拟机可正常联网;再次执行
sudo virsh net-start default无报错