我正在 Steam 上玩游戏,突然出现内核恐慌。我手动关闭计算机并重新启动到 Linux Mint 17.1 (Cinnamon) 64 位,然后去检查 中的日志文件/var/log/
,但我找不到任何与内核恐慌相关的引用或任何类型的消息发生了。
奇怪的是为什么它从未转储核心,甚至没有将其记录到日志文件中。如何确保内核始终被转储,以防内核恐慌再次发生?没有任何意义为什么当内核恐慌发生时没有记录任何内容。在 Google 上环顾四周,人们建议通读/var/log/dmesg
、/var/log/syslog
、/var/log/kern.log
等/var/log/Xorg.log
……但什么也没有。甚至在.Xsession-errors
文件中也没有。
当这种情况再次发生时,我总是可以拍一张屏幕照片,但我只是想确保我可以让它转储核心并在内核恐慌时创建一个日志文件。
答案1
为了确保您的机器在发生内核故障时生成“core”文件,您应该确认机器的“sysctl”设置。
IMO,以下应该是设置(最小)/etc/sysctl.conf
:
kernel.core_pattern = /var/crash/core.%t.%p
kernel.panic=10
kernel.unknown_nmi_panic=1
sysctl -p
在文件中进行更改后执行/etc/sysctl.conf
。mkdir /var/crash
如果它尚不存在,您可能也应该这样做。
您可以通过使用 键生成手动转储来测试上述内容SysRq(转储核心的组合键是Alt+ SysRq+ C)。
答案2
当内核发生恐慌时,意味着内核中出现了问题。写入日志文件和核心转储需要使用块存储设备(您的磁盘)和文件系统的驱动程序(必须分配空间,并且必须更新日志文件的大小)。鉴于写入文件需要内核提供的那些服务,并且内核知道它处于损坏状态,它无法写入文件或记录任何内容,因为它不再处于安全状态,所以这样做任何操作都可能使事情变得更糟,并可能损坏/破坏您的文件系统。因此,您无法让内核写入日志,也无法在出现紧急情况时转储核心转储。
现在,如果您愿意,您可以做的是使用崩溃处理内核配置系统,这是加载到内存中的第二个内核,如果主内核崩溃,控制权可以转移到该内核。由于该内核具有驱动程序等,因此它可以为您保存故障转储。不过,这不是一种非常常见的设置,主要用于需要高可用性的高端系统,并且崩溃是必须调查的非常严重的问题。
例如,请参阅 crashkernel 选项内核崩溃转储在 ubuntu.com。 (请注意,此页面表示从 Ubuntu 16.04 开始,默认情况下启用内核故障转储机制。)
我相信系统实际上将转储保存到保留的内存中,然后重新启动,并且内核在下次启动时将保留的内存保存到磁盘(因为新启动的内核处于正常状态并且可以做到这一点)。