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

内核升级后出现 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_rndr、tpm_rng、virtio_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 haveged(Debian/Ubuntu)或yum install haveged(CentOS/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/grub中GRUB_CMDLINE_LINUX,追加参数后运行update-grub && reboot
熵问题不是“修好了就行”,而是要匹配硬件能力做合理配置。有 RNG 就启用,没 RNG 就补 haveged,参数调整只是临时绕过。多数情况下,加载正确 RNG 驱动 + 启动 haveged,启动卡顿会立即消失。










