技术知识库
Linux 5.0 QEMU 中熵不足导致 systemd SSH 和 HTTPS 阻塞
Linux 5.0 QEMU 中熵不足导致 systemd SSH 和 HTTPS 阻塞
摘要
自行构建的 Debian 12 ARM64 在 QEMU 中首次启动后,systemd 长期停留在 starting,SSH 启动超时,APT 已建立 HTTPS TCP 连接却无法继续。根因是 Linux 5.0 配置关闭了硬件随机数框架,虚拟机熵值只有 48。启用 virtio RNG 内核驱动并向 QEMU 添加随机数设备后,熵值升至 1068,systemd、SSH 与网络服务恢复正常。
实际现象
entropy_avail: 48
systemd-random-seed: Kernel entropy pool is not initialized yet
ssh.service: start-pre operation timed out
apt update: Connected ... 后长期停在 TLS 阶段
virtio-net 链路实际正常:静态设置 10.0.2.15/24 后能够 ping 通 QEMU 网关 10.0.2.2,DNS 能解析 Debian 域名,证明问题不是基本网络连通性。
原因
内核配置为:
# CONFIG_HW_RANDOM is not set
QEMU 命令也没有提供虚拟随机数设备。Linux 随机数池迟迟不能初始化,依赖可靠随机数的 systemd random-seed、OpenSSH 和 TLS 操作因此阻塞。
修复
内核启用:
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_VIRTIO=y
运行 olddefconfig 后增量重编 Linux 5.0。QEMU 增加:
-object rng-random,filename=/dev/urandom,id=rng0
-device virtio-rng-pci,rng=rng0
驱动直接编入内核,无需更新 rootfs 中的模块。
验证
entropy_avail: 1068
systemctl is-system-running: running
failed units: 0
ssh.service: active (running)
eth0: 10.0.2.15/24
default route: 10.0.2.2