random: crng init 卡死几分钟的 haveged / rng-tools / virtio-rng 加速
发布时间 - 2026-01-28 00:00:00 点击率:次Linux内核启动时crng init卡住是因等待足够熵,属主动保护机制;推荐优先使用rng-tools5配合virtio-rng硬件透传,haveged在虚拟机中熵质量不可靠。
为什么 crng init 卡住几分钟?
Linux 内核在启动时会等待足够的熵(entropy)来初始化密码学随机数生成器(CRNG),表现为 dmesg 中卡在 random: crng init done 之前,且系统响应迟缓。这不是 bug,而是内核的主动保护机制:没有足够熵时,/dev/random 会阻塞,连带影响 sshd、systemd、容器拉起等依赖随机源的服务。
haveged 和 rng-tools 哪个更靠谱?
两者都试图向内核熵池注入熵,但原理和稳定性差异明显:
-
haveged基于 CPU 时间戳抖动提取熵,无需硬件支持,但在虚拟机(尤其是 KVM/QEMU)中可能因定时器虚拟化失真导致熵质量低,甚至被内核拒绝(haveged: getrusage() failed或静默不注入) -
rng-tools是传统方案,需配合硬件 RNG 设备(如/dev/hwrng);在无硬件时可启用--fill-watermark模式轮询注入,但若底层没可用 RNG,它会空转或报错Failed to open entropy source /dev/hwrng - 现代推荐优先用
rng-tools5(Debian/Ubuntu)或rng-tools(RHEL/CentOS 8+),并确保配置指向真实熵源
virtio-rng 在 KVM 虚拟机里怎么配才生效?
这是最干净的解法——把宿主机的硬件 RNG 透传给客户机。但常见失效点不在客户机配置,而在宿主机和 QEMU 启动参数:
- 宿主机必须有可用 RNG 设备(
ls -l /dev/hwrng存在且可读),常见于 Intel RDRAND(rdrand模块已加载)或 AMDrng_core+tpm-rng - QEMU 启动时需显式添加:
-device virtio-rng-pci,rng=rng0,max-bytes=1024,period=1000 -object rng-random,filename=/dev/hwrng,id=rng0 - 客户机内核需启用:
CONFIG_HW_RANDOM_VIRTIO=y(通常默认开启),启动后应看到dmesg | grep -i rng输出virtio_rng virtio0: registered as random source - 验证是否生效:
c应返回
at /sys/devices/virtual/misc/hwrng/rng_current
virtio_rng;watch -n1 'cat /proc/sys/kernel/random/entropy_avail'启动后应快速升至 2000+,而非长期卡在 100–200
绕过 crng init 卡顿的临时手段(慎用)
仅限调试或嵌入式受限环境,生产系统不建议:
- 加内核启动参数:
random.trust_cpu=on(告诉内核信任 RDRAND/AMD X86_RDRAND 指令产出的熵),适用于较新 CPU 且 BIOS 开启了相关特性 - 强制提前初始化:
echo 1 > /proc/sys/kernel/random/urandom_min_reseed_secs(无效);真正起效的是在 initramfs 阶段注入熵,例如在 dracut 配置中加入rd.random=1并确保rng-tools已打包进 initramfs - 绝对不要用
rngd -r /dev/urandom—— 这是用伪随机数充熵,违反密码学前提,crng init可能跳过但后续密钥极可能被预测
真正卡住时,先看 dmesg | grep -i -E 'random|rng|entropy',再确认 /dev/hwrng 是否存在、virtio-rng 设备是否被识别、rngd 进程是否在跑且没报 open 失败——多数问题出在链路断在第一环,而不是工具选错。
# linux
# centos
# 虚拟机
# ubuntu
# 工具
# ai
# amd
# ios
# bios
# 虚拟化
# 为什么
# red
# echo
# Object
# misc
# bug
# debian
# 这是
# 随机数
# 卡在
# 后应
# 是在
# 尤其是
# 但在
# 而在
# 适用于
# 这不是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
JS经典正则表达式笔试题汇总
Laravel如何使用withoutEvents方法临时禁用模型事件
个人摄影网站制作流程,摄影爱好者都去什么网站?
如何快速查询网址的建站时间与历史轨迹?
nodejs redis 发布订阅机制封装实现方法及实例代码
三星、SK海力士获美批准:可向中国出口芯片制造设备
历史网站制作软件,华为如何找回被删除的网站?
Laravel如何自定义错误页面(404, 500)?(代码示例)
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Laravel Fortify是什么,和Jetstream有什么关系
浅谈Javascript中的Label语句
EditPlus中的正则表达式 实战(1)
C语言设计一个闪闪的圣诞树
Laravel如何保护应用免受CSRF攻击?(原理和示例)
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
微信小程序 五星评分(包括半颗星评分)实例代码
北京网站制作的公司有哪些,北京白云观官方网站?
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel如何实现API版本控制_Laravel版本化API设计方案
免费视频制作网站,更新又快又好的免费电影网站?
Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程
jquery插件bootstrapValidator表单验证详解
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
Laravel如何创建自定义Artisan命令?(代码示例)
Laravel中的withCount方法怎么高效统计关联模型数量
如何在腾讯云服务器快速搭建个人网站?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何用花生壳三步快速搭建专属网站?
Laravel用户密码怎么加密_Laravel Hash门面使用教程
米侠浏览器网页背景异常怎么办 米侠显示修复
Linux系统运维自动化项目教程_Ansible批量管理实战
Laravel如何使用Eloquent进行子查询
如何快速启动建站代理加盟业务?
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Laravel如何实现事件和监听器?(Event & Listener实战)
详解Huffman编码算法之Java实现
HTML 中动态设置元素 name 属性的正确语法详解
油猴 教程,油猴搜脚本为什么会网页无法显示?
Laravel如何使用Vite进行前端资源打包?(配置示例)
如何快速搭建高效WAP手机网站?
图册素材网站设计制作软件,图册的导出方式有几种?
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】


