技术知识库

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

关联