收起左侧

虚拟机添加网卡后启动失败

0
回复
23
查看
[ 复制链接 ]

0

主题

6

回帖

0

牛值

江湖小虾

虚拟机启动失败,原因:依赖设备缺失,请检查网络,磁盘或直通设备

前段时间运行正常的虚拟机突然无法启动,一直提示:虚拟机启动失败,原因:依赖设备缺失,请检查网络,磁盘或直通设备。尝试了很多办法,甚至重装了多次系统都无法解决问题,在折腾的过程中发现是虚拟机网卡导致的,不添加网卡时,虚拟机可正常启动,添加网卡后,则会收到该提示,经过多番折腾,终于搞定,和大家分享下,希望对遇到同样问题的小伙伴有所帮助。

根因定位

通过SSH连接到NAS,并获取root权限

命令行执行如下命令,查看系统级虚拟机日志

journalctl -u libvirtd -f

再次启动虚拟机,触发报错,通过查看日志获取报错信息,我的报错信息如下:

image.png

错误原因如下:

  • 未加载 tun内核模块(虚拟机虚拟网卡必须依赖该模块创建 tap/tun 设备)- 虚拟网卡无法创建,直接导致启动失败
  • libvirt 因 tun模块缺失,调用 OVS 删除端口时传了空参数 - 触发 OVS 命令报错,加剧启动失败
  • OVS 收到空端口名参数,无法执行删除操作 - 虚拟机网络配置初始化失败

解决方案

有相似报错信息的小伙伴可继续操作,如果不一样,也可以复制自己的错误信息给豆老师,查找其他解决方案

步骤一: 加载并持久化 tun内核模块

# 1. 手动加载tun内核模块(核心步骤)
modprobe tun

# 2. 验证模块是否加载成功(正常应输出"tun")
lsmod | grep tun

# 3. 检查/dev/net/tun设备是否创建(正常应输出设备信息)
ls -l /dev/net/tun
# 正确输出示例:crw-rw-rw- 1 root root 10, 200 Jan  2 21:00 /dev/net/tun

# 4. 设置tun模块开机自动加载(避免重启NAS后失效)
echo "tun" >> /etc/modules-load.d/modules.conf

# 5. 重启libvirt服务(让其识别tun模块)
systemctl restart libvirtd

步骤二:修复 OVS 端口空参数异常

命令行输入 ovs-vsctl list-br,列出当下网桥名称,如:

image.png

继续执行 ovs-vsctl --if-exists del-port enp8s0-ovs,清理网桥的无效端口。此处记得根据自己的网卡名称更换命令

最后执行命令 systemctl restart openvswitch-switch,重启OVS服务

步骤三:重新尝试打开虚拟机

见证奇迹victory

image.png

PS:本文仅记录个人遇到的案例解决方案,希望帮助有同样问题的小伙伴,技术大佬请勿喷

收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则