虚拟机启动失败,原因:依赖设备缺失,请检查网络,磁盘或直通设备
前段时间运行正常的虚拟机突然无法启动,一直提示:虚拟机启动失败,原因:依赖设备缺失,请检查网络,磁盘或直通设备。尝试了很多办法,甚至重装了多次系统都无法解决问题,在折腾的过程中发现是虚拟机网卡导致的,不添加网卡时,虚拟机可正常启动,添加网卡后,则会收到该提示,经过多番折腾,终于搞定,和大家分享下,希望对遇到同样问题的小伙伴有所帮助。
根因定位
通过SSH连接到NAS,并获取root权限
命令行执行如下命令,查看系统级虚拟机日志
journalctl -u libvirtd -f
再次启动虚拟机,触发报错,通过查看日志获取报错信息,我的报错信息如下:

错误原因如下:
- 未加载
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,列出当下网桥名称,如:

继续执行 ovs-vsctl --if-exists del-port enp8s0-ovs,清理网桥的无效端口。此处记得根据自己的网卡名称更换命令
最后执行命令 systemctl restart openvswitch-switch,重启OVS服务
步骤三:重新尝试打开虚拟机
见证奇迹

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