Systemd 启动

并非每个 Linux 用户都纠结系统能多快启动,但我喜欢看“秒进桌面”的干净画面。
即便用上了固态盘,仍可能有“暗坑”拖慢启动。Systemd 自带一整套工具,能精确定位这些“卡点”并逐个击破。我只做了几处小调优,就把启动时间削掉一截,系统依旧稳如老狗。

真正的好处并不只是“秒表少走几格”。启动快的机器,用起来也更跟手,谁也不想每天盯着转圈发呆。


一、先找“慢”在哪

1. systemd-analyze 三件套

  • systemd-analyze – 给出内核 + 用户空间总耗时
  • systemd-analyze blame – 按耗时倒序列出所有服务,真凶一目了然
  • systemd-analyze critical-chain – 显示关键路径,谁堵了谁,一看就懂

多跑几次,区分“偶发 spike”和“惯犯”。先把最拖时间的干掉,投入产出比最高。
我习惯把原始输出存档,改完再对比,量化收益。


二、砍掉用不着的后台服务

1. 先查再杀

systemctl disable 服务名 禁止自启,手动还能开;
确定这辈子都用不上的,直接 systemctl mask 服务名,连“被依赖拉起来”的机会都不给。

常见可砍对象:

  • 打印机守护(cups、hp 之类)——没打印机就拜拜
  • 蓝牙(bluetooth.service)——台式机或航班模式用户常用
  • Avahi、ModemManager、snapd 自动刷新……按需处理

2. 一条铁律

一次只改一处,重启验证;改之前备份系统或至少创建快照。
几天下来,你就能攒出一套“精干”启动配置,还不带副作用。


三、把 systemd 的并行优势用到极致

1. 理清依赖

systemctl list-dependencies 服务名 看依赖树;
unit 文件里乱写的 After= / Requires= 能精简就精简,别让服务“干等人”。

2. 套接字激活

支持 socket 激活的服务(如 CUPS、Avahi、甚至 ssh)可改成“用时才起”,启动阶段直接跳过。
做法:
systemctl disable 服务名
systemctl enable 服务名.socket
这样第一次访问套接字时才拉进程,既省启动时间又省常驻内存。


四、mask 大法——防止“死灰复燃”

禁用仍可能被更新或依赖再次拉起,mask 直接把服务链接到 /dev/null,谁也别想动。
systemctl mask 服务名
后悔药:systemctl unmask 服务名

mask 前务必确认没有别的关键服务硬依赖它;
搭配 list-dependencies 检查,可保系统长期保持“瘦身后”的身材。


五、桌面阶段也别放过

1. 显示管理器(GDM / LightDM / SDDM)

轻量硬件换 LightDM 比 GDM 启动快一截;
配置文件里把自动登录、游客会话等用不到的关掉。

2. 桌面自启动

GNOME/KDE/XFCE 的“开机启动”里,云同步、更新通知器、助手小程序……只保留刚需。
~/.config/autostart//etc/xdg/autostart/ 都可以动刀。

3. target 切换小技巧

把非必需服务拖到 graphical.target 之后启动,让登录界面先出来,后台再慢慢补完。
做法:自定义一个 wanted-by=multi-user.target 的延后服务,或写 systemd 的 After=graphical.target


六、总结——每天省几秒,长期省几小时

调优不是跑分自嗨,而是让机器每天少浪费你一点时间。
分析 → 禁用 → mask → 并行 → 桌面,五步走完,启动丝滑,系统依旧稳。
改错了?systemctl unmask / enable 随时还原,无压力。

把 Linux 调教成“该快就快”的专属系统,这些细碎的小胜,日积月累就是高效的生产力。