Systemd 启动优化:嵌入式 eMMC 系统上 dev-mmcblk0p2.device 为何耗时 4.5 秒?

Systemd 启动优化:嵌入式 eMMC 系统上 dev-mmcblk0p2.device 为何耗时 4.5 秒?

问题描述

在基于 eMMC 的嵌入式 Linux 系统中,Systemd 启动时 dev-mmcblk0p2.device 的等待时间长达 4.5 秒,显著拖慢启动速度。

原因分析

dev-mmcblk0p2.device 是 eMMC 第二个分区的设备单元。Systemd 在启动早期就尝试挂载该分区,但 eMMC 控制器的初始化(包括 FTL 加载、坏块扫描)需要时间。如果分区的文件系统检查(fsck)在启动时执行,会进一步增加延迟。

优化方案

  1. 禁用启动时 fsck:

    # /etc/fstab 中添加 nofail 和 noauto
    /dev/mmcblk0p2  /data  ext4  nofail,noauto  0  2
    
  2. 使用 systemd 的 device 超时:

    [Unit]
    DefaultTimeoutStartSec=2s
    
  3. eMMC 预热: 在 Bootloader 阶段触发 eMMC 初始化,减少 Linux 阶段的等待

  4. 使用 initramfs: 将必要的 eMMC 驱动放入 initramfs,避免等待完整内核加载

预期效果

优化后启动时间从 4.5 秒降至 < 1 秒。