开机速度分析

  • 分析日期: 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 池,systemd-udev-settle 12.75s 空等消失)

sudo pacman -Rns zfs-utils zfs-dkms linux618-zfs

~12.8s

禁用 docker (不再阻塞 graphical.target)

sudo systemctl disable docker.service

~7.9s

禁用 containerd

sudo systemctl disable containerd.service

~5.2s

禁用 NetworkManager-wait-online

sudo systemctl disable NetworkManager-wait-online.service

~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

四、剩余优化空间

  1. 内核 + initrd 18.2s (占 62%) —— 依旧是大头且无变化:163MB initrd (nvidia 被 autodetect 钩子打包)、7 块 SATA 盘 (含 3 块机械盘) 的 udev 探测。initrd 是 busybox 版无日志,需加 rd.debug 内核参数或用 systemd 钩子 initrd 才能定位

  2. plymouth-quit 2.6s —— 优化前只要 88ms,这次变慢还上了关键路径,疑似开机变快后暴露的 plymouth 与 nvidia DRM 切换等待

  3. dev-sdd5.device 3.2s —— 根分区所在的 Teclast SSD 设备出现偏慢,可检查 SATA 线/接口

  4. ldconfig 1.77s —— 大概率是一次性的 (卸载 ZFS 后重建 ld.so.cache),下次开机验证

  5. supervisord 2.4s / postgresql 1.7s / snapd 0.9s —— 按需决定是否延迟启动或禁用

  6. 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