内核恐慌日志在哪里?

Oli*_*Oli 37 kernel log

我的手刹/ffmpeg 有问题。转码约 5 分钟后,计算机锁定。我相当确定这是内核恐慌,因为大写锁定开始闪烁。

关于该做什么和一些关于特定错误有一些合乎逻辑的问题,但我真的在追求一件事:在一切都消失之前发生了什么?!

我已经检查过了/var/log/kern.log,当时我看到的只是我粘在 DVD 中,然后几分钟后,系统启动了。没有错误,没有恐慌通知。

有没有办法强制记录恐慌?我相当确定我可以重现这个(我最近尝试过的次数是 100%)所以虽然我宁愿这“只是有效”,但如果这意味着我可以重新启动几次,我很高兴找到恐慌的原因。

Cae*_*ium 29

如果它真的是内核恐慌,那么它不会通过正常方法写入日志。由于此时内核已经崩溃,因此写入文件系统是一项冒险的操作——不再可以信任大部分内核,因此写入日志实际上可能会在您的引导加载程序上喷出随机废话!

相反,您可以将内存内容转储到交换中,然后稍后对其进行调试。这称为内核崩溃/核心转储。

Ubuntu Wiki 有一个可能有用的CrashdumpRecipe - 虽然它看起来有点过时,但我认为不应该改变太多。

  • CrashdumpRecipe 指的是 [Sourceforge](http://lkcd.sourceforge.net/) 上可用的 Linux 内核崩溃转储 (LKCD) 工具——Ubuntu 有一个名为 `linux-crashdump` 的包;这个包在所有版本中仍然 [available](http://packages.ubuntu.com/search?keywords=linux-crashdump)。 (10认同)

Bru*_*ira 24

您在 Ubuntu 中的所有系统日志都由rsyslog它将其配置保存在/etc/rsyslog.conf和 中处理/etc/rsyslog.d/

有关如何配置rsyslog和可能的选项的更多信息,请访问rsyslog.conf man page.

打开/etc/rsyslog.d/50-default.conf你可以看到其中一行包含

*.*;auth,authpriv.none -/var/log/syslog*

这意味着在这种情况下您要查找的文件是/var/log/syslog您可能拥有的任何大型日志。

可以看到文件名也是以a开头的-,这意味着文件在写入之前被缓存,这很好,但会给你留下一个坏日志,你想要的是一旦出现问题就写入日志。删除破折号并重新启动或重新加载rsyslog,然后再次使您的计算机崩溃,请检查/var/log/syslog

  • 删除“-”重新启动,检查/var/log/syslog | 恐慌。这没用。我错过了什么 ? (2认同)

Cir*_*郝海东 6

串行端口

串口是计算机之间简单的低级通信机制。

好处:

  • 一次简单的设置(如果你有硬件)
  • 可靠,因为数据传输仅依赖于简单的线路和内核 API,与 TCP/IP 子系统相比,它受恐慌影响的可能性较小。

缺点:

  • 大多数现代笔记本电脑不再具有串行端口(暴露?)以节省空间。但是桌面和虚拟机仍然可以。
  • 您还需要第二台带有串行端口的计算机来接收数据,但基本上所有嵌入式开发板(例如 Raspberry Pi)都是这种情况。
  • 受物理层串行电缆长度的限制,与不受限制的 TCP/IP 网络不同。然而,这可以通过在远程计算机的串行上插入一个在串行和 TCP/IP 之间转换的设备来解决

串口如下所示:

在 RPI 上可以通过 GPIO 获得,这是它的样子(在另一侧有一个笔记本电脑的 USB 接口):

可以在此处查看使用中的 uller 示例。

然后,如果您有所需的硬件,请使用以下命令从第二台计算机连接到主计算机:

screen /dev/ttyS0 115200
Run Code Online (Sandbox Code Playgroud)

这实际上为您提供了一个外壳。

然后在主机上,启动panic的操作。

当恐慌发生时,恐慌转储被传输到第二台机器,你可以通过在终端上向上滚动来看到这一切。

其他方法

还有其他方法可以克服上述硬件限制,但代价是更复杂和更不可靠。值得注意的方法:

  • netdump:通过 TCP/IP 传输恐慌。依赖于未损坏的 TCP/IP 子系统。
  • kdump:似乎是 linux-crashdump 的底层机制,在:https: //askubuntu.com/a/104793/52975 启动第二个 Linux 内核以检查崩溃的内核。什么可能出错?!:-)

另见这个很好的答案:https : //unix.stackexchange.com/questions/60574/determining-cause-of-linux-kernel-panic

步进调试

最终,获得恐慌输出需要一些内核功能工作,任何内核功能都可能被恐慌破坏。

但是,如果您可以在内核上使用 GDB,谁需要恐慌呢?如果你是那个铁杆,看看:

一旦您拥有完全的可见性(并且有足够的时间!),每个问题都会解决。