相关问题包括:
然而,这些并没有回答这个问题。这个问题关心的是全部可以查看启动信息。
如果您想要具体了解,这适用于 Gentoo、OpenRC、现代内核、4.9.6。然而,适用于所有发行版的通用解决方案会更好。
问题是,有时错误或警告会滚动得太快,以至于无法看到。而且,由于两个原因(即使在 inittab 中使用 --noclear),并不总是可以简单地向上滚动:当切换到帧缓冲区时,向上滚动到切换到位置之前的点不再可能;其次,在 X 启动后,切换到控制台并尝试向上滚动时,在新文本添加到缓冲区之前,根本不允许滚动。有时,某些消息根本无法在 dmesg 或 /var/log/messages 中找到。
我如何才能查看所有消息?
我看到这里有人https://www.linuxquestions.org/questions/linux-newbie-8/please-how-to-pause-scrolling-messages-at-boot-323772/建议按滚动锁定键可能会暂停。但是,这充其量也算不上是一种优雅的解决方案——有些消息会滚动得太快,如今系统在启动时可能会突然输出大量文本。
这就是我理想中的愿望:
- 如果可能的话,使用 dmesg | less 类型的解决方案,或者通过其他方式单步执行启动过程。
- 确保屏幕上打印的所有内容也被记录下来的方法。
是否有一种直接的方法来实现这两个目标?
我知道一个解决方案:
CONFIG_BOOT_PRINTK_DELAY:将每个启动 printk 消息延迟 N 毫秒
奇怪的是,我似乎甚至不允许在我的菜单配置中选择 BOOT_PRINTK_DELAY,我可以在搜索时找到它,但在内核黑客 -> printk 和 dmesg 选项 -> 下,我只有“显示 printks 的计时信息”和“默认消息日志级别”。printk 延迟选项在哪里?我需要先启用其他功能才能使其可见吗?什么?如果有人知道,最好将此作为答案的一部分。
但无论如何,这需要重新编译内核,这使得这看似微不足道的任务变成了丑陋且侵入性的黑客攻击。如果能找到正确的方法,将非常受欢迎。
答案1
因此你的控制台有两种类型的消息:
- 由内核生成(通过 printk);
- 由用户空间(通常是您的初始化系统)生成。
内核消息始终存储在 kmsg 缓冲区中,可通过 看到dmesg
。它们还经常被复制到您的系统日志中。(这也适用于写入 的用户空间消息/dev/kmsg
,但这些消息相当罕见。)
同时,当用户空间将其花哨的启动状态文本写入/dev/console
或时/dev/tty1
,它根本不会存储在任何地方。它只是进入屏幕,仅此而已。所以我认为任何解决方案 – 除了 Rowan 的串行控制台建议之外 – 最终要么是特定于发行版的(因为每个 init 系统执行日志记录的方式不同),要么是涉及 strace 或内核黑客攻击或类似内容的“侵入性黑客攻击”。
在最好的情况下,你的初始化系统将本身将所有重要事件记录到 syslog(/var/log/messages 或类似文件)。例如:
systemd[1]: Starting BIRD routing daemon...
bird[478296]: /etc/bird.conf, line 2: syntax error
systemd[1]: bird.service: Control process exited, code=exited status=1
systemd[1]: Failed to start BIRD routing daemon.
(systemd 和 upstart 也记录服务的 stdout/stderr;许多其他 init 系统只是将其重定向到控制台或任何地方。)
答案2
一个建议是让另一台笔记本电脑以高分辨率和帧速率拍摄启动屏幕,然后慢速播放结果(MOV - MP4 - AVI) - 也许不是最好的解决方案,但只需部署并进行调试,对吧?只是一个想法......
答案3
Grawity 的回答一定比我在引导阶段所能完成的回答更详细。
关于物理重定向方法,您的 BIOS 必须支持它。服务器主板通常支持。Intel、IBM 和 SuperMicro 系统通常在 BIOS 的主标题下有一个控制台重定向选项。如果您的主板没有物理串行端口(例如只有 USB),则无法使用它。如果主板上有物理端口,您可能需要将物理端口连接到主板上的针脚。
当操作系统尝试将串行端口用于其他用途时,控制台重定向可能会导致异常。我认为它主要用于特定情况下的调试,而不是持续使用。
要使用,您需要在接收器 com 端口(可以基于 usb)上设置匹配的端口设置,然后需要使用空调制解调器电缆连接两个设备,该电缆在设备之间交换发送和接收引脚。
接收设备需要完全通电并在源系统启动期间观察通信。接收系统将获得所有基于文本的输出。
如果在启动期间您的操作系统开始通过图形结构而不是文本显示文本,则接收系统将会出现乱码。
答案4
OpenRC 日志记录“OpenRC 默认不记录任何内容。要在启动期间记录 OpenRC 的输出,请取消注释并设置选项rc_logger
。默认情况下,/etc/rc.conf
日志将保存在。”/var/log/rc.log
rc_logger="Yes"
然后
cat /var/log/rc.log # After reboot
Gentoo 维基
OpenRC
第 3 章 配置 3.2 日志