开机速度分析
分析日期: 2026-09-06
工具:
systemd-analyze(systemd 261.2, Manjaro)结论: 优化前 49.188s → 优化后 29.255s,提速约 40%
一、两次开机对比
阶段 |
优化前 (22:05) |
优化后 (22:48) |
变化 |
|---|---|---|---|
内核 + initrd |
18.041s |
18.164s |
不变 |
用户空间 |
31.146s |
11.090s |
−20.06s |
总计 |
49.188s |
29.255s |
−19.93s |
注意: 以上从内核启动开始计时。BIOS POST + GRUB 菜单时间未计入,本机是 2016 年的 MSI B150M 主板,挂载了 7 块 SATA 盘,POST 自检本身可能还要再花 10~20 秒。
二、已实施的优化 (效果)
措施 |
命令 |
省下 |
|---|---|---|
卸载 ZFS (本机无 ZFS 池, |
|
~12.8s |
禁用 docker (不再阻塞 graphical.target) |
|
~7.9s |
禁用 containerd |
|
~5.2s |
禁用 NetworkManager-wait-online |
|
~5.8s |
注意: 这些服务是并行启动的,不能简单相加;实际用户空间总耗时从 31.1s 降到 11.1s。另外
local-fs.target从 15.2s 缩到 4.1s —— 之前 udev 队列被 ZFS 空等拖住的连带影响也没了。
三、本次开机详情 (优化后)
Startup finished in 18.164s (kernel) + 11.090s (userspace) = 29.255s
graphical.target reached after 11.089s in userspace.
时间线
时间 (s) |
事件 |
|---|---|
0 |
内核启动 |
0 ~ 18.2 |
内核初始化 + busybox initrd (udev 探测 7 块 SATA 盘、挂载根分区) |
18.2 |
systemd 接管,用户空间开始 |
25.4 |
basic.target 达成 |
26.6 |
Plymouth 开机画面退出 |
29.2 |
lightdm 启动 |
29.3 |
graphical.target 达成,登录界面可用 |
systemd-analyze blame 前十
服务 |
耗时 |
说明 |
|---|---|---|
dev-sdd5.device |
3.210s |
根分区所在的 Teclast SSD 设备出现慢 |
plymouth-quit.service |
2.599s |
在关键路径上,见下文 |
plymouth-quit-wait.service |
2.598s |
|
supervisord.service |
2.354s |
自建的 supervisor 服务 |
systemd-modules-load.service |
2.329s |
加载 nvidia / nvidia_drm |
systemd-journal-flush.service |
1.881s |
|
apparmor.service |
1.861s |
|
ldconfig.service |
1.774s |
大概率是卸载 ZFS 后一次性重建缓存,下次应恢复 |
postgresql.service |
1.689s |
|
systemd-tmpfiles-setup-dev-early.service |
1.066s |
关键路径
graphical.target @11.089s
└─lightdm.service @11.058s +30ms
└─plymouth-quit.service @8.457s +2.599s
└─systemd-user-sessions.service @8.397s +19ms
└─network.target @8.355s
└─wpa_supplicant.service @8.247s +106ms
└─basic.target @7.192s
└─dbus-broker.service @6.345s +846ms
└─dbus.socket @6.298s
└─sysinit.target @6.285s
└─systemd-update-done.service @6.245s +39ms
└─ldconfig.service @4.467s +1.774s
└─systemd-tmpfiles-setup.service @4.121s +344ms
└─local-fs.target @4.115s
四、剩余优化空间
内核 + initrd 18.2s (占 62%) —— 依旧是大头且无变化:163MB initrd (nvidia 被 autodetect 钩子打包)、7 块 SATA 盘 (含 3 块机械盘) 的 udev 探测。initrd 是 busybox 版无日志,需加
rd.debug内核参数或用 systemd 钩子 initrd 才能定位plymouth-quit 2.6s —— 优化前只要 88ms,这次变慢还上了关键路径,疑似开机变快后暴露的 plymouth 与 nvidia DRM 切换等待
dev-sdd5.device 3.2s —— 根分区所在的 Teclast SSD 设备出现偏慢,可检查 SATA 线/接口
ldconfig 1.77s —— 大概率是一次性的 (卸载 ZFS 后重建 ld.so.cache),下次开机验证
supervisord 2.4s / postgresql 1.7s / snapd 0.9s —— 按需决定是否延迟启动或禁用
BIOS POST 时间未统计 —— 可用秒表实测「按电源键 → GRUB 菜单」时长;BIOS 里可开启 Fast Boot、关掉不用的板载控制器
五、下一步排查
# 1. 查看 initrd 里 18s 花在哪 (编辑 /etc/default/grub 的 GRUB_CMDLINE_LINUX 追加 rd.debug,然后 sudo update-grub,重启后看 journalctl -b)
journalctl -b -k | grep -iE 'initrd|udev'
# 2. 验证 ldconfig 是否恢复
systemd-analyze blame | grep ldconfig
# 3. 对比一次带 systemd 钩子的 initrd
# /etc/mkinitcpio.conf: HOOKS=(base systemd autodetect ...),sudo mkinitcpio -P