Debian 开机为何“龟速”?解密 dmesg 与 systemd 的百秒延迟之谜

你是否也曾经历过,按下开机键后,满心欢喜地等待着心爱的 Debian 系统启动,却发现启动过程卡在了某个地方,足足等上几分钟才能进入桌面?最近,我就遇到了这样一个典型案例,通过一步步的分析,我们最终揪出了导致系统“龟速”启动的元凶。

问题现象:漫长的等待

一切始于一份看似普通的 dmesg 内核日志。用户发现自己的 Debian 系统开机异常缓慢,日志中出现了两条相隔甚远的时间戳:

1
2
[    7.781054] virtio-pci 0000:00:01.0: [drm] fb0: virtio_gpudrmfb frame buffer device
[ 131.504466] Initializing XFRM netlink socket

疑点乍现:从第7秒的虚拟显卡驱动加载完成,到第131秒的 IPsec 网络框架初始化,中间出现了长达 124秒 的诡异停滞。系统在这两分多钟里究竟干了什么?


抽丝剥茧:定位元凶

dmesg 日志告诉我们“何时”发生了延迟,但要弄清“谁”是始作俑者,我们需要一个更强大的工具:systemd-analyze。它是 systemd 初始化系统自带的性能分析神器。

通过运行 systemd-analyze blame 命令,我们让所有在启动过程中“摸鱼”的服务无所遁形。很快,一个服务“名列前茅”,几乎占据了所有的延迟时间:

1
2min 77ms systemd-networkd-wait-online.service

真相大白!罪魁祸首正是 systemd-networkd-wait-online.service

systemd-networkd-wait-online.service 是什么?

顾名思义,它的唯一使命就是等待所有网络接口都配置就绪。它会阻塞(block)那些依赖于网络连接的服务,直到它确认网络已经“万事俱备”或者等待超时。在我们的案例中,它显然因为某些原因没能及时等到网络就绪,最终在苦等2分多钟后以超时告终,从而拖慢了整个系统的启动流程。

这在虚拟机环境、或网络配置复杂的系统中尤为常见。

釜底抽薪:终极解决方案

对于绝大多数桌面用户和服务器场景而言,我们并不需要系统死板地等待网络完全连接后才开始加载其他服务。完全可以让系统启动和网络连接并行进行。

因此,最简单、最有效的解决方案就是——禁用它!

操作步骤

  1. 禁用服务
    在终端中执行以下命令,停止让它在开机时启动。

    1
    sudo systemctl disable systemd-networkd-wait-online.service
  2. 屏蔽服务(可选但推荐)
    为了防止它被其他服务“唤醒”,我们可以使用 mask 命令将其彻底“封印”。

    1
    sudo systemctl mask systemd-networkd-wait-online.service

    这会创建一个指向 /dev/null 的符号链接,让任何对该服务的启动请求都直接失效。

  3. 重启见证奇迹

    1
    sudo reboot

    重启之后,您会发现那漫长的等待已然消失,系统启动如丝般顺滑。

答疑解惑:禁用它安全吗?

对于99%的用户来说,完全安全。

只有在极少数情况下(例如,您的系统根目录挂载在网络文件系统上),您才需要确保网络在系统启动的早期阶段就绪。对于常规安装的 Debian,禁用此服务不会有任何副作用。您的网络连接依然会在后台自动完成,不会受到影响。

总结

一次看似复杂的 Debian 启动缓慢问题,通过 dmesg 初步观察和 systemd-analyze 的精准定位,最终被证实是由 systemd-networkd-wait-online.service 的漫长等待所致。通过简单的禁用和屏蔽操作,问题便迎刃而解。

希望这篇博文能帮助遇到类似问题的你,快速诊断并解决问题,让你的 Debian 重焕新生!

Author: kwin
Link: https://blog.kwin.win/2025/07/02/dmesg/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.