说明:本文根据本人实际遇到的问题、排查过程和最终实测结果整理,文章结构与内容由 ChatGPT 协助总结。
本文不是对单一论坛帖子的简单转载,而是结合实际环境、社区案例以及最终修复过程形成的一份完整排障记录。
1. 问题背景
我的宿主机环境如下:
Host OS : Ubuntu 22.04 LTS Kernel : 6.8.0-138-generic VMware : VMware Workstation 17.6.0 build-24238078 Guest OS : Windows 10 外接设备 : USB 摄像头平时需要将 USB 摄像头通过 VMware 的 USB Passthrough 功能连接到 Windows 10 虚拟机中使用。
在使用一段时间后,我发现只要将摄像头从 Windows 虚拟机重新切回 Ubuntu,或者直接关闭 Windows 10 虚拟机,宿主机就有概率出现严重卡死。
主要表现包括:
应用关闭后无法重新打开 sudo 命令卡死 Ubuntu 有线网络异常 虚拟机网络同时异常 系统无法正常关机或重启 出现 rcu_preempt / hung task 相关信息经过排查后,最终问题指向:
VMware Workstation 17.6.0 的 Linux Host Modules 与 Linux 6.8 内核之间存在兼容性问题。
其中最主要涉及:
vmmon vmnet两个 VMware 内核模块。
USB 摄像头的切换更像是这个问题的一个触发条件,而不一定是摄像头本身存在故障。
2. 故障现象
问题通常发生在以下场景:
Ubuntu 启动 VMware ↓ 启动 Windows 10 ↓ 将 USB 摄像头连接给 Windows ↓ 正常使用一段时间 ↓ 将摄像头 Disconnect 回 Ubuntu 或者关闭 Windows 10 ↓ Ubuntu 宿主机开始异常2.1 应用程序无法重新启动
部分已经启动的软件暂时还能继续运行。
但是一旦关闭,再重新启动时就可能没有任何反应。
例如:
Chrome VS Code 终端 文件管理器2.2 sudo 命令卡死
严重时执行:
sudo true或者任何:
sudo xxx都会让当前 Shell 直接阻塞。
这是一个比较重要的判断依据。
如果只是普通桌面程序故障,一般不会导致sudo也一起卡住。
2.3 网络异常
VMware 出现问题后,Ubuntu 宿主机的网络也可能逐渐失效。
虚拟机内部网络同样可能受到影响。
例如执行:
ip addr ip route可能发现网络接口或者路由状态异常。
2.4 无法正常关机或重启
点击:
关机 重启以后,Ubuntu 可能长时间停留在关闭过程中。
严重时甚至几个小时都无法完成,只能强制断电。
部分情况下还能看到:
rcu_preempt RCU stall hung task blocked task等内核日志。
这也是为什么后来排查重点从普通应用逐渐转向 Linux Kernel 和 VMware 内核模块。
3. 网上找到了高度相似的案例
在排查过程中,发现多个社区讨论与自己的情况高度一致。
3.1 Ask Ubuntu 上的类似案例
Ask Ubuntu 帖子的评论区有用户描述:
VMware 从 17.5 升级到 17.6
Host 使用 Ubuntu
启动虚拟机后宿主机网络丢失
虚拟机网络也同时失效
sudo命令直接卡住reboot 无法完成
最后出现
rcu_preempt
这些症状和我的实际情况非常接近。
参考:
Ask Ubuntu:VMware Workstation Running Ubuntu Freezes Frequently
3.2 Broadcom VMware 官方社区的讨论
Broadcom VMware Community 中也有针对:
VMware Workstation 17.6 Ubuntu 22.04 Linux Kernel 6.8的类似反馈。
其中用户明确描述:
启动 VM 后系统逐渐不稳定 网络停止工作 sudo 卡死 Power Off / Reboot 无法完成 dmesg 出现 rcu_preempt VM 相关进程 blocked for more than 120 seconds社区回复中也明确提到,这个问题开始出现在 Ubuntu 22.04 使用 Linux 6.8 内核以后。
参考:
Broadcom Community:Problem with 17.6 Update on Ubuntu 22.04
这个帖子对最终判断问题非常有帮助,因为它说明:
并不是只有 USB 摄像头场景才会触发,VMware 17.6 + Linux 6.8 本身就存在导致宿主机失去响应的案例。
因此摄像头更可能只是提高了问题触发概率。
4. 最终定位:VMware 17.6.0 + Linux 6.8
执行:
uname -r vmware --version我的实际输出为:
6.8.0-138-generic VMware Workstation 17.6.0 build-24238078这正好命中了社区中大量讨论的组合:
Linux Kernel 6.8 + VMware Workstation 17.6.0VMware 在 Linux 宿主机上需要加载两个非常重要的内核模块:
vmmon vmnet其中:
vmmon
负责 VMware 的核心虚拟机监控和虚拟化相关功能。
vmnet
负责 VMware 的虚拟网络功能。
如果这两个模块与当前 Linux Kernel 存在兼容问题,那么最终受到影响的可能不仅仅是 VMware 本身,还可能包括:
网络 内核任务调度 systemd sudo 系统关机与重启这可以解释为什么最终表现出来的是整个 Ubuntu 宿主机逐渐失去响应。
5. 为什么 USB 摄像头可能会触发问题
Linux 下 USB 摄像头一般使用:
uvcvideo驱动。
设备连接给 Windows 虚拟机时,大致经历:
Ubuntu / uvcvideo ↓ VMware USB Passthrough ↓ Windows 10断开后又需要经历:
Windows ↓ VMware 释放 USB ↓ Linux USB Core ↓ uvcvideo 重新绑定摄像头相比普通 U 盘,会持续进行大量 USB 视频数据传输。
其中涉及:
USB endpoint URB 设备解绑 设备重新绑定 USB reset等操作。
因此我推测:
摄像头在宿主机和虚拟机之间频繁切换,可能会更容易触发 VMware 17.6.0 在 Linux 6.8 下原本就存在的内核模块问题。
这一点属于结合实际故障现象得出的判断,并不是说所有 VMware 17.6.0 + Linux 6.8 用户都必须使用摄像头才会遇到问题。
Broadcom 社区中的案例实际上并没有依赖摄像头,同样出现了网络失效、sudo 卡死以及rcu_preempt。
6. 最终使用的解决方案
最终使用的是社区维护的:
bytium/vm-host-modules项目。
该仓库主要用于为较新的 Linux Kernel 提供修补后的 VMware:
vmmon vmnet模块。
仓库 README 明确说明,其目标就是解决 VMware Workstation Host Modules 与新版 Linux Kernel 的兼容性问题,并列出了 VMware Workstation 17.6.0 等版本。
项目地址:
GitHub:bytium/vm-host-modules
项目作者另外也提供了一篇说明文档:
Bytium:VMware Workstation Host Module Patch for Debian and Ubuntu
该说明中给出的基本流程同样是:
sudo apt install build-essential linux-headers-$(uname -r) git git clone ... cd vm-host-modules make sudo make install安装脚本会将编译出的vmmon.ko和vmnet.ko放入当前 Kernel 对应的 modules 目录。
7. 安装编译环境
首先:
sudo apt update sudo apt install build-essential linux-headers-$(uname -r) git我的环境中:
build-essential git linux-headers-6.8.0-138-generic都已经正确安装。
检查当前 Kernel:
uname -r输出:
6.8.0-138-generic所以必须确保:
linux-headers-6.8.0-138-generic也已经安装。
8. 下载 Patch
执行:
cd ~ git clone https://github.com/bytium/vm-host-modules.git cd vm-host-modules这里需要根据仓库当前实际提供的分支选择版本。
我当时执行:
git checkout 17.6成功切换到:
Branch '17.6' set up to track remote branch '17.6' from 'origin'. Switched to a new branch '17.6'随后检查:
git branch git log -1 --oneline结果:
* 17.6 master d901654 Updated for vmware workstation 17.6.0因此确认该分支正好对应:
VMware Workstation 17.6.0注意:GitHub README 当前显示的分支名称可能有所调整,因此不要盲目照搬旧文章中的分支名,建议先执行:
git branch -a查看自己克隆下来的仓库当前有哪些分支。
9. 编译 vmmon 和 vmnet
执行:
make编译过程中出现了一些 warning,例如:
warning: the compiler differs from the one used to build the kernel MAX redefined objtool warning Skipping BTF generation但是没有出现导致构建中断的 Error。
最终成功生成:
vmmon.ko vmnet.ko可以检查:
find . \( -name "vmmon.ko" -o -name "vmnet.ko" \) -print我的实际结果:
./vmnet-only/vmnet.ko ./vmmon-only/vmmon.ko说明编译成功。
10. 安装修补后的 VMware Kernel Modules
执行:
sudo make install然后刷新内核模块依赖:
sudo depmod -a11. 验证安装是否成功
执行:
modinfo vmmon | grep -E "filename|vermagic" modinfo vmnet | grep -E "filename|vermagic"我的实际结果:
filename: /lib/modules/6.8.0-138-generic/misc/vmmon.ko vermagic: 6.8.0-138-generic SMP preempt mod_unload modversions以及:
filename: /lib/modules/6.8.0-138-generic/misc/vmnet.ko vermagic: 6.8.0-138-generic SMP preempt mod_unload modversions这里主要确认两个地方:
/lib/modules/6.8.0-138-generic/misc/以及:
vermagic: 6.8.0-138-generic说明:
新编译的 vmmon / vmnet 已经正确安装到当前 Linux 6.8.0-138 Kernel,并且 vermagic 与当前内核匹配。
然后重启:
sudo reboot12. 修复后的验证
建议不要一开始就连接摄像头,而是分两轮测试。
第一轮:VMware 基础测试
Ubuntu ↓ 启动 VMware ↓ 启动 Windows 10 ↓ 正常使用 ↓ 关闭 Windows期间测试:
sudo true ip addr ip route确认:
sudo 正常 宿主机网络正常 虚拟机网络正常 应用可以继续打开 VM 可以正常关闭 Ubuntu 可以正常关机 / 重启如果这一步已经恢复正常,说明 VMware Kernel Module 的问题基本解决。
第二轮:USB 摄像头测试
继续:
启动 Windows 10 ↓ USB 摄像头连接到虚拟机 ↓ 正常使用一段时间 ↓ 关闭摄像头相关程序 ↓ Disconnect USB 摄像头回 Ubuntu在重新编译安装vmmon和vmnet后,目前没有再次出现之前的宿主机严重冻结现象。
因此至少在我的机器上,这个方案有效。
13. 为什么修补 vmmon / vmnet 可以解决问题
这次比较容易产生误导的一点在于:
故障经常在 USB 摄像头切换之后出现。
因此第一反应通常会认为是:
uvcvideo xhci USB controller USB Passthrough的问题。
但是更值得关注的是:
网络同时失效 sudo 卡死 reboot 卡死 rcu_preempt这几个特征。
它们明显已经超出了普通摄像头驱动故障的范围。
结合 Broadcom Community 中完全不依赖摄像头也能复现的案例,更合理的解释是:
VMware 17.6.0 ↓ Linux 6.8 Kernel ↓ vmmon / vmnet 兼容问题 ↓ Kernel task / RCU 出现阻塞 ↓ VMware 与网络开始异常 ↓ sudo / systemd 等操作受到影响 ↓ 最终 reboot / shutdown 无法正常完成USB 摄像头更像是其中一个触发点。
14. 完整操作命令
环境类似:
Ubuntu 22.04 Linux 6.8 VMware Workstation 17.6.0可以参考:
sudo apt update sudo apt install \ build-essential \ linux-headers-$(uname -r) \ git cd ~ git clone https://github.com/bytium/vm-host-modules.git cd vm-host-modules git branch -a git checkout 17.6 git branch git log -1 --oneline make find . \( -name "vmmon.ko" -o -name "vmnet.ko" \) -print sudo make install sudo depmod -a modinfo vmmon | grep -E "filename|vermagic" modinfo vmnet | grep -E "filename|vermagic" sudo reboot15. 注意事项
15.1 VMware 版本必须对应
不要把:
17.5.x 17.6.x 其他版本的模块混用。
先确认:
vmware --version15.2 Kernel Headers 必须匹配
检查:
uname -r如果输出:
6.8.0-138-generic那么必须安装:
linux-headers-6.8.0-138-generic15.3 不建议直接下载别人编译好的 .ko
最好在自己的系统上编译。
因为内核模块至少涉及:
Kernel Version Kernel Configuration VMware Version等环境差异。
15.4 Kernel 升级后可能要重新编译
以后如果 Ubuntu Kernel 从:
6.8.0-138-generic升级到了新的版本,可以重新检查:
uname -r modinfo vmmon | grep vermagic modinfo vmnet | grep vermagic如果不一致,就应该重新编译对应 Kernel 的模块。
16. 参考资料
本次排查主要参考了以下几个公开讨论和项目。
Ask Ubuntu
VMware Workstation Running Ubuntu Freezes Frequently
查看 Ask Ubuntu 原帖
其中用户描述的网络丢失、sudo卡死、reboot hang、rcu_preempt等现象与本次问题高度相似。Broadcom VMware Community
Problem with 17.6 Update on Ubuntu 22.04
查看 Broadcom 社区讨论
该讨论中明确存在 Ubuntu 22.04 + Linux 6.8 + VMware 17.6 出现宿主机网络、sudo、shutdown 和 RCU 异常的问题。GitHub
bytium/vm-host-modules
查看 GitHub 项目
本文实际使用的vmmon/vmnetPatch 来源。Bytium
VMware Workstation Host Module Patch for Debian and Ubuntu
查看 Patch 安装说明
包含编译安装 VMware Host Modules 的说明。
总结
这次问题最值得关注的几个关键词是:
Ubuntu 22.04 Linux 6.8 VMware Workstation 17.6.0 宿主机网络异常 sudo 卡死 shutdown / reboot 卡死 rcu_preempt虽然故障在我的机器上经常由 USB 摄像头 Passthrough 后触发,但结合其他用户的复现情况来看:
核心问题更可能是 VMware Workstation 17.6.0 Host Modules 与 Linux 6.8 Kernel 的兼容性,而 USB 摄像头只是特定场景下的触发条件。
最终通过重新编译并安装修补后的:
vmmon vmnet解决问题。
截至目前,修复后系统运行正常。
文章说明:
本文中的问题现象、系统环境、终端输出、修复过程和最终验证均来自本人实际排查过程;公开资料部分参考 Ask Ubuntu、Broadcom VMware Community、GitHub 和 Bytium。文章由本人提供实际排查信息,并由OpenAI ChatGPT协助整理、归纳与成文。