Window 11的Virtualbox无法启动MongoDB:mongod.service: 失败,结果为’core-dump’
问题的背景
当我使用AMD制造的CPU在Windows 11虚拟机中导出VirtualBox实例,并在使用Intel制造的CPU的Windows 11机器上导入时,出现了MongoDB启动失败的错误。
以前,我在一台安装了AMD处理器的机器上,MongoDB出现了启动失败的问题。当时我通过禁用Windows的Hyper-V等虚拟化功能来解决了该问题。但这次,尽管我尝试了相同的方法,却无法解决。
环境
操作系统:Windows 11专业版
虚拟机软件:VirtualBox 7.0.6
客户操作系统:Almalinux 8
错误
$ sudo systemctl status mongod
● mongod.service - MongoDB Database Server
Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
Active: failed (Result: core-dump) since Fri 2023-09-29 20:37:20 JST; 3s ago
Docs: https://docs.mongodb.org/manual
Process: 10371 ExecStart=/usr/bin/mongod $OPTIONS (code=dumped, signal=ILL)
Main PID: 10371 (code=dumped, signal=ILL)
9月 29 20:37:20 local systemd[1]: Started MongoDB Database Server.
9月 29 20:37:20 local systemd[1]: mongod.service: Main process exited, code=dumped, status=4/ILL
9月 29 20:37:20 local systemd[1]: mongod.service: Failed with result 'core-dump'.
结论
最初我认为是CPU环境的兼容性问题,但实际上原因是Windows Hyper-V功能和virtualbox仍然无法共存。
由于无法完全禁用Hyper-V功能,所以一开始无法解决问题。
据说在Windows 11上有许多服务都使用了Hyper-V功能,只有通过[启用或停用Windows功能]中取消勾选Hyper-V等选项,直到将所有这些服务都禁用,才能完全成功禁用它们。
为什么
根据MongoDB社区的回答,
通常情况下,Hyper-V会阻止Virtualbox的运行。Hyper-V是一种类型1的超级监控程序,它在操作系统运行之前首先访问硬件,因此会阻碍像Virtualbox这样的类型2超级监控程序所需的”虚拟化技术”。
作为VirtualBox被干扰的证据,在VBox.log文件中存在“VT-x不可用”或“未检测到硬件虚拟化功能”的日志。
00:00:00.735901 ********************* End of CFGM dump **********************
00:00:00.736113 HM: HMR3Init: Attempting fall back to NEM: VT-x is not available
00:00:00.806370 NEM: info: Found optional import WinHvPlatform.dll!WHvQueryGpaRangeDirtyBitmap.
00:00:00.807567 NEM: NEMR3Init: Snail execution mode is active!
00:00:00.807567 NEM: Note! VirtualBox is not able to run at its full potential in this execution mode.
00:00:00.807567 NEM: To see VirtualBox run at max speed you need to disable all Windows features
00:00:00.807567 NEM: making use of Hyper-V. That is a moving target, so google how and carefully
00:00:00.807567 NEM: consider the consequences of disabling these features.
00:00:00.807567 NEM:
00:00:00.807583 CPUM: No hardware-virtualization capability detected
VT-x 是 Intel 的虛擬化技術,簡單來說,日誌中記載了 Virtualbox 無法使用 CPU 的虛擬化技術。此外,要以最高速度運行 VirtualBox,需要禁用所有使用 Hyper-V 的 Windows 功能,這也在提示中提到。
为什么需要这样做呢?因为需要启用AVX。
AVX是一种用于加速CPU计算处理的扩展指令集,MongoDB 5.0及以上的环境设置要求必须启用AVX。
原本来说,无论是Intel的(VT-x)还是AMD的(AMD-x),都应该支持AVX,但由于Windows Hyper-V的存在,导致Virtualbox无法使用VT-x。
通过查看 /proc/cpuinfo 的输出,确认了由于无法使用 VT-x ,在 CPU 信息的 flags 中没有 AVX。
所以MongoDB启动失败了。
解决方案 ‘àn)
唯一的解决方法是按照VBox.log所提示的,在使用Hyper-V的所有Windows功能中禁用它们。
需要确保在完全禁用之后,正确确认其影响等情况。例如,需要禁用Windows Defender病毒防护等服务,包括在Windows安全性中。
暫時先參考下面文章的說明,將 Hyper-V 給關閉的相關步驟完成了一遍。
参考:HMR3Init:尝试回退到NEM(Hyper-V激活中)
在启动时关闭所有应用程序。
检查下列功能是否正在运行。如果正在运行,则将其禁用。
Windows Defender 设备安全的核心隔离、内存一致性
实时保护防止病毒和威胁
Hypervisor 受保护代码完整性
Secure Core等
使用管理员权限启动终端。
执行以下命令。
# Hyper-Vを無効化
bcdedit /set hypervisorlaunchtype off
DISM /Online /Disable-Feature:Microsoft-Hyper-V
# shutdown
shutdown -s -t 2
关闭电源,并等待大约20秒后重新启动。
正如其他发布者所说,如果一次不成功的话,可以尝试重复上述步骤2~3次。
在我的情况下,我尝试在GUI界面中从[启用或禁用Windows功能]中勾选和取消勾选相关功能,例如Hyper-V。然后重新启动后,MongoDB正常运行。
请参考这篇文章。
VirtualBox中安装的CentOS的MongoDB无法启动
在VirtualBox上运行的Oracle Linux上无法启动MongoDB 5.0
在Windows上同时使用VirtualBox和Docker需要注意的事项(AVX)
在Windows 11升级时遇到VirtualBox中的Mongodb问题
我有一个64位的主机,但无法安装64位的虚拟机
HMR3Init:尝试回退到NEM(Hyper-V处于活动状态)
如何在VirtualBox 6.1.16上启用AVX / AVX2和Ubuntu 20.04 64位?
mongod.service失败,结果为核心转储