我最近在我的 Sony Vaio 笔记本上添加了 Linux Mint (19.3) 作为我的新主操作系统。
有时启动需要一些时间,我发现jounrnalctl
:
Feb 11 10:45:11 notebook kernel: microcode: microcode updated early to revision 0x2f, date = 2019-02-17
Feb 11 10:45:11 notebook kernel: Linux version 5.3.0-28-generic (buildd@lcy01-amd64-009) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #30~18.04.1-Ubuntu SMP Fri Jan 17 06:14:09 UT
Feb 11 10:45:11 notebook kernel: Command line: BOOT_IMAGE=/@/boot/vmlinuz-5.3.0-28-generic root=UUID=8d4f6dfa-1d63-4507-b9e1-37d639dca309 ro rootflags=subvol=@ quiet splash vt.handoff=1
[...]
Feb 11 10:45:14 notebook dbus-daemon[1080]: [system] Activating via systemd: service name='org.freedesktop.hostname1' unit='dbus-org.freedesktop.hostname1.service' requested by ':1.12' (
Feb 11 10:45:14 notebook systemd[1]: Starting Hostname Service...
[...]
Feb 11 10:45:18 notebook systemd[1]: Started Update Manager automatic upgrades.
Feb 11 10:45:24 notebook wpa_supplicant[1085]: random: Cannot read from /dev/random: Resource temporarily unavailable
Feb 11 10:45:39 notebook dbus-daemon[1080]: [system] Failed to activate service 'org.freedesktop.hostname1': timed out (service_start_timeout=25000ms)
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4088] hostname: hostname: hostnamed not used as proxy creation failed with: Fehler beim Aufruf von StartServiceByName f
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4091] hostname: hostname changed from (none) to "notebook"
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4104] dns-mgr[0x555fc095e1a0]: init: dns=systemd-resolved, rc-manager=symlink, plugin=systemd-resolved
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4143] rfkill0: found WiFi radio killswitch (at /sys/devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/device:00/SNY5001:00/rfk
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4155] rfkill2: found WiFi radio killswitch (at /sys/devices/pci0000:00/0000:00:1c.0/0000:02:00.0/ieee80211/phy0/rfkill2
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4199] manager[0x555fc0968060]: rfkill: WiFi hardware radio set enabled
Feb 11 10:45:39 notebook NetworkManager[1086]: <info> [1581414339.4200] manager[0x555fc0968060]: rfkill: WWAN hardware radio set enabled
Feb 11 10:45:39 notebook systemd[1]: Started Network Manager.
[...]
Feb 11 10:45:44 notebook dbus-daemon[1418]: [session uid=113 pid=1418] Successfully activated service 'ca.desrt.dconf'
Feb 11 10:45:44 notebook wpa_supplicant[1085]: random: Cannot read from /dev/random: Resource temporarily unavailable
Feb 11 10:45:44 notebook wpa_supplicant[1085]: random: Cannot read from /dev/random: Resource temporarily unavailable
Feb 11 10:45:44 notebook wpa_supplicant[1085]: random: Cannot read from /dev/random: Resource temporarily unavailable
Feb 11 10:45:44 notebook wpa_supplicant[1085]: random: Cannot read from /dev/random: Resource temporarily unavailable
...这从第 1448 行一直持续到第 5199 行!
启动完成后,我可以在读取时获取数据/dev/random
,随机的初始化似乎要晚得多:
Feb 11 10:46:27 notebook kernel: random: crng init done
Feb 11 10:46:27 notebook kernel: random: 7 urandom warning(s) missed due to ratelimiting
知道那里发生了什么吗?
从 10:45:14 到 10:45:39 只有 2 条日志消息 - 这可能相关吗?
答案1
万维网上有很多关于这个主题的文章。简而言之,/dev/random
与其他操作系统相比,Linux 的设备相当奇怪,而且文档记录也很糟糕。为了解决这个问题,人们进行了大量的反复尝试。这个已有 28 年历史的操作系统内核的最新一轮是就在上个月。
延误的原因
需要的时间一号种子这伪随机数生成器在 Linux 中,引导之后,完全取决于内核可以从键盘、网络接口和硬件随机数生成器等来源吸收多少硬件随机性。 (这在虚拟机上是众所周知的困难,因为虚拟硬件设备来自“外部世界”的随机输入要少得多。然后是硬件随机数生成器的可用性和可信度以及使引导程序更快的副作用。)
/var/lib/systemd/random-seed
它可以通过在之前关闭时(在 systemd 操作系统上)或/var/lib/urandom/random-seed
(在非 systemd 操作系统上) 预先准备一些种子数据的实用程序来改进,并在引导时加载这些数据。
然而,此类实用程序要求包含这些种子文件的卷在实用程序运行时可写;因为种子数据在使用后立即删除/替换是至关重要的,以防止伪随机数生成器被相同的种子数据重新播种两次。不幸的是,这意味着实用程序无法在引导序列的早期运行。
日志消息的原因
这意味着有一个窗口,在你的情况下大约 1¼ 分钟,在此期间
- 使用
/dev/urandom
将获得伪随机数据从固定的已知种子生成的,这使得随机性可预测; /dev/random
在阻塞模式下使用会阻塞,停止进程执行;和/dev/random
在非阻塞模式下使用会导致返回EAGAIN
错误码,字符串为“资源暂时不可用”。
wpa_supplicant
显然正在做其中的第三个。反复。但从日志中不太明显的是“urandom warnings”,其中内核已警告某些程序/dev/urandom
在可用之前使用。所以你系统中的一些程序正在获取可预测随机数,这可能是一个大问题,具体取决于这些程序是什么。
让事情变得更好
为您的操作系统构建 Linux 的人(根据您的日志,这是 Linux 5.3.0-28 的“通用”配置)可以打开一个配置选项,使 x86-64 处理器上的生活变得更好(除了一些较旧的 AMD 处理器,其底层处理器指令有错误)。配置CONFIG_RANDOM_TRUST_CPU
选项使内核信任处理器作为硬件随机性的来源,从而更快地为伪随机数生成器提供种子。
Debian 的 Linux 内核去年为 Debian 10 启用了此选项。不过,我对 Ubuntu 和 Mint 中的 Linux 不太了解。
进一步阅读
- https://unix.stackexchange.com/a/388823/5132
- 当我登录时,它会挂起,直到 crng init 完成
- 何时使用 /dev/random 与 /dev/urandom
- 杰克·埃奇(2019-09-27)。定影
getrandom()
。 LWN。 - 杰克·埃奇 (2020-01-07)。删除 Linux
/dev/random
阻塞池。 LWN。