为什么内核更新后需要重新加载 virtualbox 的内核模块?

为什么内核更新后需要重新加载 virtualbox 的内核模块?

在 Ubuntu 12.10 中最后一次内核升级之后,我不得不手动为 Virtualbox 重新加载两个内核模块。

modprobe vboxdrvmodprobe vboxnetflt

我对系统了解不多,不知道这是不是 bug,或者本来就是那样,但这确实很不方便。作为 Ubuntu 的新用户,找出需要做什么相当耗时。

这是自动更新,更新完成后要求我重启。重启后,虚拟机将无法运行,除非我重新加载模块。

所以我的问题是:这是正常的吗?其他软件包也会这样,还是只有 Virtualbox 才会这样?更新程序应该自动执行此操作吗?我应该提交错误报告吗?如果是,应该提交给谁?

答案1

VirtualBox 主机模块是从您机器上的源代码构建的。一个内核的模块不一定能在另一个内核上运行(或正常工作)。它们通常在内核升级后重新编译。

当你安装新内核版本时,旧内核仍在运行。哈维尔·里维拉说,您必须重新启动才能使用新内核。

因此,如果你的目标是在新内核,您需要重新启动;重新启动后模块将被加载(如果需要,可以从源代码重建)。

但是,如果您的目标是将旧模块与旧内核一起使用,则可以手动重新加载它们modprobe(就像您一直在做的那样)。

如果您认为 VirtualBox 模块在重启前无法继续为正在运行的内核工作是一个错误,您可以报告此错误。如果您使用的是 Ubuntu 官方提供的 VirtualBox 版本(而不是 Oracle 软件源中的版本),我建议针对下游 VirtualBox(即 Ubuntu 的 VirtualBox)报告此问题。请先仔细阅读本指南。还有关于错误报告的有用信息这个问题

如果你能用 VirtualBox 的上游版本生成此文件(尤其如果它发生在非 Ubuntu 系统上,但我认为这不是必要的),我建议报告它(或报告此事)上游(先搜索)。

我建议不要立即接受这个答案;也许有人可以更好地解释为什么模块已被卸载。

答案2

如果您必须在更新后且在加载新内核模块之前运行“/etc/init.d/vboxdrv setup”,请确保 dkms 已正确安装和更新。这是在更新内核后重新启动时重新编译模块的组件,它也应在完成后加载模块。这是我在测试中唯一可能失败的情况。如果不是这种情况,我会听从 Eliah 的建议并提交错误报告。

相关内容