我管理 Ubuntu Server 8.04 已经有一段时间了。最重要的是,我正在运行一个 VMWare 服务器版,每当安装新内核时,它都需要重新编译它的模块。为此,我正在执行:sudo vmware-config.pl
直到现在,每当有新版本的内核可用时,我都会安装它,重新启动系统并重建模块。但是现在我意识到——而不是偶然——重建这些内核模块甚至可以在不重新启动系统的情况下工作。VMWare 甚至可以在那之后再次启动。这让我很好奇。我进入uname -r
查看内核版本,它向我显示了我之前安装的版本,而无需重新启动系统。
uname的联机帮助页并未详细说明实际打印的内容,但到目前为止,我认为它打印了实际运行的内核版本。
我现在的问题是:内核是否真的有可能在不重新启动的情况下自行重新加载?我没有安装ksplice 或类似的工具。据我所知,它现在甚至在 Ubuntu Server 8.04 的存储库中。我的系统怎么了?内核更新后是否必须重新启动?uname -r 打印什么?Ubuntu 服务器版是否附带类似 ksplice 的程序?我从来没有读过任何关于这样的功能的东西!
我检查了kees告诉我要做的事情:
uname -r
2.6.24-28-server
proc中的文件给出:
cat /proc/version_signature
Ubuntu 2.6.24-28.75-server
和 dpkg:
dpkg -l 'linux-image*' | grep ^.i
ii linux-image-2.6.24-28-server 2.6.24-28.80
显然我应该重新启动:) 感谢您提供详细信息!
的输出
uname -r
仅显示“ABI”编号之前的版本,但可以有 ABI 的修订版。只有当 ABI 发生变化时,第三方模块才需要重新编译。有关您正在运行的内容的更多详细信息,请阅读文件
/proc/version_signature
:这将显示您当前运行的内核软件包版本,该版本可能与最近安装的内核不同。例如,在上面,ABI 是“28”,如下所示:
uname -r
然后你可以看到你安装了什么
dpkg
:在上述情况下,如果下一个安装的内核包版本为 2.6.24-28 .81,那么只有“微版本”发生了变化。由于模块编译与 ABI 相关联,因此不需要重新编译,但您仍然需要重新启动才能获得内核修复。如果下一个安装的内核版本为 2.6.24-29 .81,那么 ABI 将发生变化,您需要在重新启动后重新编译模块。
有关 ABI 的更多详细信息,请参阅https://wiki.ubuntu.com/KernelTeam/BuildSystem/ABI