pupuk / blog

My New Blog. Record & Share. Focus on PHP, MySQL, Javascript and Golang.
MIT License
9 stars 2 forks source link

一次折腾的VirtualBox之旅(kernel panic - not syncing : fatal exception) #23

Open pupuk opened 5 years ago

pupuk commented 5 years ago

背景:

最近换了一台电脑,Dell一体机 Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz 6cores 16GRAM 256G SSD Microsoft Windows 10 Enterprise LTSC (64bit) 想以此电脑系统作为HostGuestCentOS-7-x86_64-Minimal-1810

准备把原来的一台PC(AMD)上的虚拟机迁移到这台新的PC上,使用VirtualBox的导入,导出功能,即Export ApplianceImport Appliance功能,结果发现启动时出现linux内核报错

kernel panic - not syncing : fatal exception

当即baidu和google了一下,发现这对个情况有很多种解释,而且不尽相同。其中主要的有:

我的思路

有日志,一定要先看日志; 在VirtualBox里面找到虚拟机的日志 Vbox.logVboxHardening.log

image1

在这里面发现了,有dll文件的报错,发现是装了驱动精灵的dll文件,遂卸载驱动精灵和清空驱动精灵相关的文件和注册表信息,问题依旧。

然后再分析日志和上面可能的问题有无相关,结果发现没有相关,遂把google和baidu可能改答案,依次check,依次实验。一两个小时过去了,问题依旧,这个时候我心理已经有点发毛了。

怎么办? 只有自己动手做实验,不断尝试,实验列表如下

验证对照表

VirtualBox版本 CentOS版本 64bit 结果
6.0.10 6 安装成功
6.0.10 7.5 Kernel panic
6.0.10 7.6 Kernel panic
6.0.8 7.6 Kernel panic
6.0.6 7.5 安装成功
6.0.6 7.6 安装成功

经过试验发现: 在这台PC上,VirtualBox 6.0.6版本均能安装CentOS的版本,结论也就比较清楚了:可能是此PC的某个硬件,与VirtualBoxLinux的内核无法兼容。

最后我选择了VirtualBox 6.0.6 + CentOS 7.6安装虚拟机,安装好后,启动的时候出现如下:

this hardware has not undergone upstream testing

image2

Google了解情况,一位资深的Centos人员在forum评论到:

No, this has nothing to do with microcode. It's that the cpuid of your processor is not in the list of validated ones in the kernel. You can usually ignore the message.

现在回想起来,说明引起kernel panic的很大可能是CPU,即 Intel(R) Core(TM) i5-9400 CPU @ 2.90GHz 6cores 6 model  另外也有人提到:CentOS 7.7会修复此内核,但是目前还未release,所以我先等待观测。 在这次问题解决过程中,我发现有点经验可以积累:

经验

  1. 充分了解情况,这个主要是防止误判,走错方向
  2. 大胆多实验,不要怕麻烦(知易行难)
  3. 在过程中要保持思路清晰,不能被自己绕晕了。

总结:到centos内核forum和VirtualBox的forum里面提了个bug,以此结束这次折腾,^_^(手动)

pupuk commented 4 years ago

补充

后来在实际的使用中,发现总结出如下的规律: 1、这些vdi文件和设置,在其它配置上的PC的跑上Virtualbox,都可以运行,但是在我这个CPU,Intel Core I5 9th Generation上,会出现kernel panic。 2、一些兼容性的规律如下图: 20200115172003

根据其他搜索的相关资料确认,认为可能性最大的一种是:新的CPU支持spectremeltdown, Guest想去访问 SPEC_CTRL MSR,但是没有检查是否存在和可访问性。

The guest tries to read the SPEC_CTRL MSR (0x48), probably without checking for its existence. The SPEC_CTRL MSR is part of the Spectre/Meltdown mitigation.

对比上图我们应该可以作出如下假设:

当然以上只是一种假设。下面的链接解释的还是比较清楚: https://forums.virtualbox.org/viewtopic.php?f=6&t=94390#p455778 https://forums.virtualbox.org/viewtopic.php?f=1&t=86118