更新后自动重新加载内核

Ste*_*fan 3 server 8.04 reboot kernel vmware-server

我管理 Ubuntu Server 8.04 已经有一段时间了。最重要的是,我正在运行一个 VMWare 服务器版,每当安装新内核时,它都需要重新编译它的模块。为此,我正在执行:sudo vmware-config.pl

到现在为止,每当有新版本的内核可用时,我都会安装它,重新启动系统并重建模块。但是现在我意识到 - 而不是偶然 - 重建这些内核模块甚至可以在不重新启动系统的情况下工作。VMWare 甚至可以在此之后再次启动。这让我很好奇。我进入uname -r以查看内核版本,它向我显示了我之前安装的版本,而无需重新启动系统。

uname的联机帮助页并没有详细说明实际打印的内容,但到目前为止我认为它打印了实际运行的内核版本。

我现在的问题是:内核真的有可能在不重新启动的情况下重新加载吗?我并没有安装Ksplice的或类似的工具。据我所知,它现在甚至在 Ubuntu Server 8.04 的存储库中。我的系统怎么了?内核更新后是否必须重新启动?uname -r 打印什么?Ubuntu Server Edition 是否附带类似于 ksplice 的程序?我从来没有读过关于这样的功能的任何内容!

我检查了基斯告诉我要做的事情:

uname -r
2.6.24-28-server
Run Code Online (Sandbox Code Playgroud)

proc 中的文件给出了:

cat /proc/version_signature
Ubuntu 2.6.24-28.75-server
Run Code Online (Sandbox Code Playgroud)

和 dpkg:

dpkg -l 'linux-image*' | grep ^.i
ii  linux-image-2.6.24-28-server          2.6.24-28.80
Run Code Online (Sandbox Code Playgroud)

显然我应该重新启动 :) 感谢您提供详细信息!

Kee*_*ook 6

的输出uname -r仅显示“ABI”编号之前的版本,但可以有 ABI 的修订版。只有当 ABI 发生变化时,才需要重新编译第三方模块。

有关您正在运行的内容的更多详细信息,请阅读文件/proc/version_signature

cat /proc/version_signature
Ubuntu 2.6.24-28.80-generic
Run Code Online (Sandbox Code Playgroud)

这将显示您当前运行的内核版本,该版本可能与最近安装的内核不同。例如,在上面的 ABI 是“28”,这与将显示的一样多:uname -r

uname -r
2.6.24-28-generic
Run Code Online (Sandbox Code Playgroud)

然后你可以看到你安装了什么dpkg

dpkg -l 'linux-image*' | grep ^.i
ii  linux-image-2.6.24-27-generic              2.6.24-27.69                            Linux kernel image for version 2.6.24 on x86
ii  linux-image-2.6.24-28-generic              2.6.24-28.80                            Linux kernel image for version 2.6.24 on x86
ii  linux-image-generic                        2.6.24.28.30                            Generic Linux kernel image
Run Code Online (Sandbox Code Playgroud)

在上述情况下,如果得到了安装的下一个内核包被作为版本2.6.24- 28 0.81,它只会是“微发布”变了。由于模块编译与 ABI 相关,因此不需要重新编译,但您仍需要重新启动才能获得内核修复。如果安装了接下来的内核版本被作为2.6.24- 29 0.81,则ABI将有改变,你会需要重新编译模块,你已经重新启动之后。

有关 ABI 的更多详细信息,请参阅https://wiki.ubuntu.com/KernelTeam/BuildSystem/ABI