我正在尝试通过串行控制台和托管公司的恢复控制台(基本上是 ubuntu liveCD)为软件 raid0 和 LVM 根文件系统上的 debian lenny 配置服务器。
配置 raid0、建立 LVM、运行 debootstrap、安装 grub 等之后,我重新启动,服务器在启动时挂起,然后才到达 init。根据内核日志消息,raid 阵列已联机,LVM 可能也已联机(抱歉,现在没有确切的日志消息,但明天会有)。
initramfs 脚本本身绝对没有错误输出 - 只有内核日志消息。我如何才能让 initramfs 产生一些有用的调试输出,以便至少可以确定它在哪里死机?
答案1
看起来问题在于内核命令行上指定了两次控制台:
.... console=ttyS0,57600 console=tty0
尽管内核消息发送到两个控制台,但用户空间消息大概只发送到后者。
答案2
内核消息被复制到内核命令行 (/proc/cmdline) 上指定的所有设备。但是,对于需要输入的场景(例如,命令 shell),输出仅发送到最后一个 console= 设备(当然,这是输入的来源)。
至于 initramfs 的内容,可以在内核命令行上设置 debug=(例如,通过引导加载程序(如 GrUB)完成)以显示在任何级别执行的命令:top、premount、init 等。我查看了 initramfs 版本的 init,请注意:该值减去启动时看到的“init-”部分。我希望仅使用“debug”即可查看所有级别,但遗憾的是,它不能这样工作。
顺便说一句...这并没有什么不同,但对我来说这是 Ubuntu 10.04
这一切都与设备 (/dev/console) 的处理方式有关。打开时,它引用最后一个内核命令行提及的 console= 。因此,虽然内核可能会向所有“提及”输出消息,但用户空间通常只能访问最后一个。
答案3
六年后,事情发生了很大变化。Debian wiki 文档可能对某些人有用:https://wiki.debian.org/InitramfsDebug#Saving_debug_information