一点背景信息。在 KVM(SmartOS)上运行的少数 VM 使用内核 2.6.32.7 重新启动。Qemu/KVM 日志中没有任何内容表明这是 Qemu 问题。
不幸的是,在测试 kdump 时我发现了一个问题,该问题导致 kdump 内核在 virtio blk 驱动程序中写入转储磁盘时出现崩溃。
所以我决定只设置内核以记录到串行设备以捕获堆栈跟踪。机器重新启动后,除了启动顺序外什么都没有,没有堆栈跟踪。内核配置中也设置了早期 printk。
虽然这些虚拟机将被删除并使用较新的映像重新配置,但这也引发了一个问题。
也就是说,为什么虚拟机首先要重新启动,Qemu 没有退出并且已经由外部进程启动,客户机显然正在重新启动(由于启动时 ext 的状态而不干净)。
然而据我所知它不应该重新启动,无论是恐慌、糟糕、软锁定还是硬锁定,它都应该保持运行(即使锁定)kernel.panic systcl 设置为 0。
kernel.panic = 0
kernel.panic_on_oops = 0
kernel.unknown_nmi_panic = 0
kernel.panic_on_unrecovered_nmi = 0
kernel.panic_on_io_nmi = 0
kernel.softlockup_panic = 0
kernel.hung_task_panic = 0
vm.panic_on_oom = 0
还有什么原因会导致 Linux 内核决定重新启动,或者我误解了上述任何 sysctl。