Ubuntu 16.10 启动时 networking.service 缓慢问题

一、问题概述

  • 现象 :Ubuntu 16.10 系统启动时,networking.service 耗时超 5 分钟,导致整体开机流程严重延迟。
  • 定位工具 :通过 systemd-analyze blame 命令确认,networking.service 是启动过程中的主要耗时服务。

二、核心原因

  1. 接口配置模式冲突/etc/network/interfaces 中接口配置为 auto(开机强制启动该接口),若接口未物理连接(如网线未插)或无法就绪,系统会等待超时(默认5分钟)。
  2. 默认超时时间过长networking.service 默认 TimeoutStartSec=5min,即使无实际网络需求,也会等待超时后才继续启动流程。
  3. 特定接口阻塞 :未配置或非关键的网络接口(如未设置的无线接口)导致 systemd-networkd-wait-online.service 等待所有接口就绪,引发阻塞。

三、解决方案(按有效性优先级排序)

方案1:修改接口配置(推荐,最高用户验证率)

  • 操作步骤
    1. 编辑网络配置文件:sudo nano /etc/network/interfaces
    2. 将接口配置中的 auto 改为 allow-hotplug(例:auto eth0allow-hotplug eth0
    3. 保存退出,无需重启即可生效(下次启动自动应用)。
  • 原理allow-hotplug 仅在接口物理连接时启动,避免无连接时的超时等待。
  • 效果 :多个用户反馈,networking.service 耗时从 5 分钟降至 1~41 秒,适用于 Ubuntu 16.10/18.04/20.04/22.04 等版本。

方案2:缩短服务超时时间(快速 workaround)

  • 操作步骤
    1. 编辑 networking.service 配置:sudo systemctl edit networking.service

    2. 在打开的文件中添加以下内容(确保在 [Service] 段下):

      ini 复制代码
      [Service]
      TimeoutStartSec=10sec
    3. 保存退出,执行 sudo systemctl daemon-reload 生效。

  • 原理:将默认 5 分钟超时缩短为 10 秒,强制终止无响应的等待流程。
  • 注意 :避免直接编辑 /lib/systemd/system/networking.service,否则系统更新会覆盖修改。

方案3:优化 systemd-networkd-wait-online.service(针对特定接口阻塞)

  • 适用场景:因未配置的无线接口等非关键接口导致阻塞。
  • 操作步骤
    1. 编辑服务配置文件:sudo nano /lib/systemd/system/systemd-networkd-wait-online.service
    2. 修改 ExecStart 行,添加以下参数之一:
      • 缩短超时:ExecStart=/lib/systemd/systemd-networkd-wait-online --timeout=10(超时设为10秒)
      • 忽略特定接口:ExecStart=/lib/systemd/systemd-networkd-wait-online --ignore=接口名(例:--ignore=int_wlan0
    3. 保存退出,执行 sudo systemctl daemon-reload 生效。
  • 原理:要么缩短等待超时,要么忽略非关键接口,避免阻塞启动流程。

四、验证方法

  1. 查看启动总耗时:systemd-analyze time
  2. 定位耗时服务:systemd-analyze blame(确认 networking.service 耗时是否降低)
  3. 观察启动流程:重启系统,验证是否无明显延迟。

五、关键结论

  • 最优解为 方案1autoallow-hotplug),从根源解决接口等待问题,兼容性强。
  • 方案2 适合快速临时解决,方案3 针对特定接口阻塞场景。
  • 该问题在 Ubuntu 16.10 及后续多个版本中存在,解决方案可跨版本复用。
相关推荐
Roadinforest2 小时前
如何使用 keyd 定制 Caps Lock:拯救你坏掉的 Left Control 键(Linux-Ubuntu)
linux·ubuntu
舞动青春882 小时前
Ubuntu安装QEMU过程及问题记录
linux·学习·ubuntu
知识分享小能手2 小时前
Ubuntu入门学习教程,从入门到精通,Ubuntu 22.04的基本配置 (3)
linux·学习·ubuntu
Joren的学习记录2 小时前
【Linux运维大神系列】Docker详解(二)
linux·运维·docker
Crkylin2 小时前
尚硅谷Linux应用层学习笔记(一)GCC编译
linux·笔记·学习
Lueeee.3 小时前
具体掌握字符设备驱动
linux
HIT_Weston3 小时前
68、【Ubuntu】【Hugo】搭建私人博客:方案分析(二)
linux·运维·ubuntu
wdfk_prog3 小时前
[Linux]学习笔记系列 -- [fs]ext4
linux·笔记·学习
程序员老舅3 小时前
C++ STL 算法:从原理到工程实践
linux·c++·stl·c/c++·数据结构与算法