![为什么内核更新后需要重新加载 virtualbox 的内核模块?](https://linux22.com/image/1040236/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%86%85%E6%A0%B8%E6%9B%B4%E6%96%B0%E5%90%8E%E9%9C%80%E8%A6%81%E9%87%8D%E6%96%B0%E5%8A%A0%E8%BD%BD%20virtualbox%20%E7%9A%84%E5%86%85%E6%A0%B8%E6%A8%A1%E5%9D%97%EF%BC%9F.png)
在 Ubuntu 12.10 中最后一次内核升级之后,我不得不手动为 Virtualbox 重新加载两个内核模块。
modprobe vboxdrv
和modprobe vboxnetflt
我对系统了解不多,不知道这是不是 bug,或者本来就是那样,但这确实很不方便。作为 Ubuntu 的新用户,找出需要做什么相当耗时。
这是自动更新,更新完成后要求我重启。重启后,虚拟机将无法运行,除非我重新加载模块。
所以我的问题是:这是正常的吗?其他软件包也会这样,还是只有 Virtualbox 才会这样?更新程序应该自动执行此操作吗?我应该提交错误报告吗?如果是,应该提交给谁?
答案1
VirtualBox 主机模块是从您机器上的源代码构建的。一个内核的模块不一定能在另一个内核上运行(或正常工作)。它们通常在内核升级后重新编译。
当你安装新内核版本时,旧内核仍在运行。哈维尔·里维拉说,您必须重新启动才能使用新内核。
因此,如果你的目标是在新内核,您需要重新启动;重新启动后模块将被加载(如果需要,可以从源代码重建)。
但是,如果您的目标是将旧模块与旧内核一起使用,则可以手动重新加载它们modprobe
(就像您一直在做的那样)。
如果您认为 VirtualBox 模块在重启前无法继续为正在运行的内核工作是一个错误,您可以报告此错误。如果您使用的是 Ubuntu 官方提供的 VirtualBox 版本(而不是 Oracle 软件源中的版本),我建议针对下游 VirtualBox(即 Ubuntu 的 VirtualBox)报告此问题。请先仔细阅读本指南。还有关于错误报告的有用信息这个问题。
如果你能用 VirtualBox 的上游版本生成此文件(尤其如果它发生在非 Ubuntu 系统上,但我认为这不是必要的),我建议报告它(或还报告此事)上游(先搜索)。
我建议不要立即接受这个答案;也许有人可以更好地解释为什么模块已被卸载。
答案2
如果您必须在更新后且在加载新内核模块之前运行“/etc/init.d/vboxdrv setup”,请确保 dkms 已正确安装和更新。这是在更新内核后重新启动时重新编译模块的组件,它也应在完成后加载模块。这是我在测试中唯一可能失败的情况。如果不是这种情况,我会听从 Eliah 的建议并提交错误报告。