Linux 系统启动慢优化技巧

1次阅读

linux启动慢是固件交接、引导加载、内核初始化到用户空间服务启动全链路耗时叠加所致,需用systemd-analyze等工具定位瓶颈,再针对性优化各环节。

Linux 系统启动慢优化技巧

Linux 启动慢不是单一环节的问题,而是从固件交接、引导加载、内核初始化到用户空间服务启动这一整条链路上多个耗时点叠加的结果。优化的关键在于精准定位瓶颈,再针对性裁剪或加速,而不是盲目删服务。

快速定位启动慢在哪一环

先别急着改配置,用工具看清时间花在了哪里:

  • systemd-analyze:直接运行 systemd-analyze time 查总耗时;用 systemd-analyze blame 列出各服务启动耗时排序,重点关注排在前10的单元
  • systemd-analyze critical-chain:查看启动路径中最长依赖链,识别拖慢整个流程的关键节点
  • 如需图形化分析,安装 pybootchartgui 并启用 bootchart,每次重启后生成 /var/log/bootchart/ 下的 PNG 图,直观看到各阶段并行与阻塞关系

精简引导层(Bootloader)

对嵌入式或定制设备尤其有效,比如全志 T113-i 平台:

  • 将 U-Boot 的 bootdelay 设为 0,跳过按键中断等待
  • 关闭 boot0 和 U-Boot 阶段的调试串口输出,在 uboot-board.dtssys_config.fex 中禁用 verbose log
  • 若使用 GRUB2,可简化菜单项数量,并设置默认启动项 + 超时为 0:GRUB_TIMEOUT=0,再执行 grub2-mkconfig -o /boot/grub2/grub.cfg

加速内核与 initramfs

内核初始化阶段常被低估,但几个细节影响显著:

  • 关闭 crng_ready() 检查:该函数会等待熵池充足才放行,实测可缩短 2–3 秒;修改 drivers/char/random.c 中相关逻辑(适用于对随机性要求不高的嵌入式场景)
  • 降低或关闭内核启动日志等级,如设 loglevel=0quiet 内核参数,减少串口刷屏开销
  • 若根文件系统足够小(如 Buildroot 生成的 initramfs,省去挂载外部 rootfs 步骤,避免磁盘 I/O 延迟

裁剪用户空间启动流程

systemd 环境下,Init 阶段仍有大量优化空间:

  • 禁用非必要服务:systemctl disable bluetooth.service avahi-daemon.service ModemManager.service 等通用桌面服务
  • 合并或替换 init 进程:对专用设备,可将 /sbin/init 替换为静态编译的自定义程序,跳过完整 systemd 初始化
  • 不挂载 /proc/sys(仅当应用完全不依赖它们时);裁剪 BusyBox 功能,移除未用 applet
  • 使用 systemd.unit=default.target 参数指定最小目标,例如 multi-user.target 而非 graphical.target
text=ZqhQzanResources