# 开机速度分析 - 分析日期: 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、关掉不用的板载控制器 ## 五、下一步排查 ```bash # 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 ```