netplan apply 警告 ovsdb-server.service 未运行及 systemd-networkd-wait-online 超时问题
问题描述
在 Ubuntu 系统更新后执行 sudo netplan apply
命令时,出现以下警告:
none
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
同时系统还伴随网络连接问题,表现为 systemd-networkd-wait-online.service
服务超时失败:
none
× systemd-networkd-wait-online.service - Wait for Network to be Configured
Active: failed (Result: timeout)
这些异常通常发生在以下情况后:
- 执行了
apt-get upgrade
系统更新操作 - 系统重启后出现网络连接超时
- 尽管物理网络连接正常(获取到 IP 地址),但服务启动失败
解决方案
解决 ovsdb-server.service 警告
根本原因
这是 Ubuntu 22.04 (Jammy Jellyfish) 中 netplan 的已知 Bug(LP#2041727)。即使未安装 Open vSwitch,netplan 仍会错误检查 ovsdb 服务状态。
通用解决方案(普通 Ubuntu 系统)
bash
# 安装依赖包
sudo apt update
sudo apt install openvswitch-switch-dpdk -y
# 重新应用网络配置
sudo netplan apply
Raspberry Pi 设备专属方案
bash
# 安装树莓派内核扩展模块
sudo apt install linux-modules-extra-raspi
# 安装 Open vSwitch DPDK 支持
sudo apt install openvswitch-switch-dpdk
# 重新生成网络配置
sudo netplan try
验证修复:
bash
sudo netplan apply # 警告信息应不再出现
解决 systemd-networkd-wait-online 超时问题
服务作用
systemd-networkd-wait-online.service
用于等待所有由 systemd-networkd 管理的网络接口就绪。超时通常由不相关接口处理或默认等待时间不足引起。
优化服务配置
编辑服务配置文件:
bashsudo vim /lib/systemd/system/systemd-networkd-wait-online.service
修改
[Service]
部分(按需求添加配置项):ini[Service] Type=oneshot # 指定需等待的接口(替换为你的实际接口名) ExecStart=/lib/systemd/systemd-networkd-wait-online --interface=wlan0 --interface=eth0 RemainAfterExit=yes # 缩短超时时间(推荐30秒) TimeoutStartSec=30sec
应用配置更改
bash
# 重载 systemd 配置
sudo systemctl daemon-reload
# 重启服务
sudo systemctl restart systemd-networkd-wait-online.service
# 检查服务状态
sudo systemctl status systemd-networkd-wait-online.service
替代方案(适用于简单网络环境)
如果只需等待特定接口就绪且不依赖此服务,可直接禁用:
bash
sudo systemctl disable systemd-networkd-wait-online.service
sudo systemctl mask systemd-networkd-wait-online.service
原理说明
ovsdb-server 警告:
- 安装
openvswitch-switch-dpdk
提供缺失的 OVS 数据库服务依赖 - 树莓派需额外内核模块支持虚拟网络功能
- 官方 Bug 报告 已确认此问题
- 安装
网络等待超时优化:
--interface
参数聚焦关键网络接口,避免无关接口阻塞启动TimeoutStartSec=30sec
覆盖默认2分钟设置,匹配大多数场景- 树莓派等设备启动较慢,30秒超时窗口更合理
最终验证
修复后应达到:
bash
# 无 ovsdb 警告
sudo netplan apply
# 网络等待服务正常激活
systemctl status systemd-networkd-wait-online.service | grep "Active: active"
如问题持续,建议检查网络配置文件:
bash
# 检查网络接口状态
ip a
# 验证 netplan 配置
sudo netplan --debug apply