virtualbox 中客户机的状态不匹配

virtualbox 中客户机的状态不匹配

在 Virtualbox 中正在运行的客户机显示为已关闭

问题:

我在 virtualbox 中有许多虚拟机,一些虚拟机是由 Vagrant 创建的,其他虚拟机是通过 GUI 手动创建的。但每当我使用 启动虚拟机时vboxmanage starvm,虚拟机的状态都会显示为Powerd OffGUI 或vboxmanage showvminfo,即使虚拟机在 GUI 中运行。

主机操作系统是带有 R9-7945HX 处理器的 Manjaro,并且安全启动被禁用。

(base) 0x00 in ~/Hypervisor/virtual-machines/Tools/Gparted/Logs λ inxi 
CPU: 16-core AMD Ryzen 9 7945HX with Radeon Graphics (-MT MCP-)
speed/min/max: 1055/400/5461 MHz Kernel: 6.7.0-0-MANJARO x86_64 Up: 4h 8m
Mem: 8.47/30.53 GiB (27.8%) Storage: 2.75 TiB (22.9% used) Procs: 544
Shell: Zsh inxi: 3.3.33

复制:

例如启动一个名为 Gparted 的虚拟机。

(base) 0x00 in ~/Hypervisor/virtual-machines/Tools/Gparted/Logs λ vboxmanage startvm Gparted                       
Waiting for VM "Gparted" to power on...
VM "Gparted" has been successfully started.

(base) 0x00 in ~/Hypervisor/virtual-machines/Tools/Gparted/Logs λ vboxmanage showvminfo Gparted | grep State
State:                       powered off (since 2024-02-22T08:25:59.000000000)
                                                                                                                                                                                      
(base) 0x00 in ~/Hypervisor/virtual-machines/Tools/Gparted/Logs λ vboxmanage list runningvms                
                                                                                                                                                                                      
(base) 0x00 in ~/Hypervisor/virtual-machines/Tools/Gparted/Logs λ 

当 GUI 弹出时没有明显的错误,但您可以看到机器的状态与预期不匹配。

我的声誉没有 10,因此不允许我上传图片,如果您想查看显示 VM GUI 状态的图片,请查看下面的链接

https://raw.githubusercontent.com/dhay3/image-repo/master/20240222/image-20240222164536709.2urzybsbf0ao.webp

但在进程列表中,虚拟机显示正在运行

(base) 0x00 in /var/log λ ps -ef | grep -iE 'vbox|virtual|slot'  | grep -v grep
root         467       2  0 12:39 ?        00:00:00 [iprt-VBoxTscThread]
0x00       53520    1638  0 15:51 ?        00:00:11 /usr/lib/virtualbox/VirtualBox
0x00       53539    1096  0 15:51 ?        00:00:02 /usr/lib/virtualbox/VBoxXPCOMIPCD
0x00       53545    1096  0 15:51 ?        00:00:06 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
0x00       72847    1096  0 16:51 ?        00:00:01 /usr/lib/virtualbox/VBoxXPCOMIPCD
0x00       72853    1096  0 16:51 ?        00:00:05 /usr/lib/virtualbox/VBoxSVC --auto-shutdown
0x00       72881   72853  0 16:51 ?        00:01:09 /usr/lib/virtualbox/VirtualBoxVM --comment Gparted --startvm 4c830005-8675-45da-bc9f-a11964d3f610 --no-startvm-errormsgbox

清除后的内核环形缓冲区dmesg -C(虚拟机启动之前)

(base) 0x00 in /var/log λ sudo dmesg            
[15066.546635] vboxdrv: 0000000037a5da6e VMMR0.r0
[15066.652917] vboxdrv: 00000000a81b79f7 VBoxDDR0.r0

vbox.log 中没有明显的错误

https://gist.github.com/dhay3/a19d46e3231790b9f926d6610f70888c

完整信息vboxmanage showvminfo Gparted

https://gist.github.com/dhay3/6013ae1e704a26cac0c7e6337410e868

我尝试过的事情:

  1. 删除.vbox-<username>-ipc以下链接中提到的目录

    https://www.virtualbox.org/manual/ch02.html#2.3.5.%20Starting%20Oracle%20VM%20VirtualBox%20on%20Linux

  2. 升级/降级 virtualbox/linux 内核不起作用

  3. 以 root 身份启动 virtualbox,使用相同的 ISO 创建虚拟机,然后重现上述步骤。状态符合预期!!!(正在运行-正在运行)

    它不同于

    https://forums.virtualbox.org/viewtopic.php?p=426082

  4. 尝试阅读一些源代码,但没有找到处理starvm子命令的函数

任何解决方法或提示都将不胜感激

答案1

几天来,我发现根本原因是非常规的用户名0x00(十六进制 0)混淆了命令

SERVER_PID=`ps -U \`whoami\` | grep VBoxSVC | awk '{ print $1 }'` 

VBox脚本中。它将获取所有根进程,而不是0x00文字名称。因此,每次starvm启动虚拟机时,VBoxSVC都会创建一个进程。

相关内容