内核升级后出现 random: crng init 卡很久的 entropy 不足加速

10次阅读

内核升级后启动卡在“waiting for entropy”是因CRNG初始化要求更高熵值,可通过检查/proc/sys/kernel/random/entropy_avail确认是否低于100,优先启用硬件RNG驱动(如intel_rndr、tpm_rng)或软件服务haveged补充熵源,必要时微调random.trust_cpu=on等参数。

内核升级后出现 random: crng init 卡很久的 entropy 不足加速

内核升级后出现 random: crng init done 延迟高、系统启动卡在“waiting for entropy”阶段,本质是 CRNG(cryptographically Secure Random number Generator)初始化依赖足够熵值,而新内核(尤其是 4.17+)对熵池质量要求更严,不再容忍低熵启动,导致阻塞。

确认是否真为熵不足导致卡顿

开机时若卡在类似 random: crng init done 或日志中反复出现 random: crng init not ready,且 /proc/sys/kernel/random/entropy_avail 长期低于 100(理想应 >200),基本可判定为熵源不足。可通过串口/ssh登录后实时查看:

cat /proc/sys/kernel/random/entropy_avail

若数值长期徘徊在 50–100 甚至更低,尤其在无键盘/鼠标/硬盘活动的虚拟机或嵌入式设备上,问题明确。

优先启用硬件随机数生成器(RNG)

现代 CPU(Intel Ivy Bridge+、amd Zen+)和主板大多支持 RDRAND/RDSEED 指令或 TPM 芯片,这是最直接有效的熵源:

  • 检查是否已加载 rng_core 和对应驱动:lsmod | grep -i rng;常见模块有 intel_rndrtpm_rngvirtio_rng(KVM)
  • 若未加载,临时启用:modprobe intel_rndr(Intel)或 modprobe tpm_tis && modprobe tpm_rng(TPM)
  • 永久生效:将模块名写入 /etc/modules 或创建 /etc/modules-load.d/rng.conf
  • 验证是否被 CRNG 识别:cat /sys/class/misc/hwrng/rng_available 应显示当前 RNG 设备;再看 cat /sys/class/misc/hwrng/rng_current

补充用户态熵服务(适用于无硬件 RNG 场景)

当硬件 RNG 不可用(如老旧云主机、某些容器环境),需靠软件补充熵源:

  • 安装并启用 haveged(推荐):apt install havegeddebian/ubuntu)或 yum install havegedcentos/RHEL),启动服务:systemctl enable --now haveged
  • 替代方案:rng-tools(需配合硬件 RNG)或 egd(Entropy Gathering Daemon),但 haveged 更轻量、适配性广
  • 注意:避免同时运行多个熵服务,可能引发冲突;启用后观察 entropy_avail 是否快速升至 200+

内核参数微调(谨慎使用)

仅作兜底,不解决根本问题,但可缓解启动卡顿:

  • 添加启动参数 random.trust_cpu=on:告诉内核信任 RDRAND 指令输出,跳过部分熵校验(适用于 Intel/AMD 新 CPU)
  • 禁用熵池 blocking 行为(不推荐生产环境):random.read_wakeup_threshold=512(提高唤醒阈值,减少等待)
  • 修改方式:编辑 /etc/default/grubGRUB_CMDLINE_linux,追加参数后运行 update-grub && reboot

熵问题不是“修好了就行”,而是要匹配硬件能力做合理配置。有 RNG 就启用,没 RNG 就补 haveged,参数调整只是临时绕过。多数情况下,加载正确 RNG 驱动 + 启动 haveged,启动卡顿会立即消失。

text=ZqhQzanResources