我已经管理 Ubuntu Server 8.04 有一段时间了。此外,我还运行 VMWare Server Edition,每当安装新内核时,它都需要重新编译其模块。为此,我执行了:sudo vmware-config.pl
到目前为止,每当有新版本的内核可用时,我都会安装它,重新启动系统并重建模块。但现在我意识到 - 相当偶然 - 重建这些内核模块甚至无需重新启动系统即可工作。VMWare 甚至能够在那之后再次启动。这让我很好奇。我进入uname -r
查看内核版本,它向我显示的正是我之前安装的版本没有重新启动系统。
这手册页对于 uname,没有明确详细说明实际打印的内容,但到目前为止,我认为它打印了实际运行的内核版本。
我现在的问题是:内核真的有可能在不重启的情况下重新加载吗?我做到了不是安装 ksplice 或类似工具。据我所知,它现在甚至在 Ubuntu Server 8.04 的存储库中。我的系统出了什么问题?内核更新后我是否必须重新启动?uname -r 打印了什么?Ubuntu Server Edition 是否附带了类似于 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
显然我应该重新启动:)感谢提供详细信息!
答案1
的输出uname -r
仅显示“ABI”编号之前的版本,但 ABI 可以有修订版本。只有当 ABI 发生变化时,第三方模块才需要重新编译。
有关您正在运行的更多详细信息,请阅读文件/proc/version_signature
:
cat /proc/version_signature
Ubuntu 2.6.24-28.80-generic
这将显示内核包裹你当前使用的版本跑步这可能与最近的已安装内核。例如,在上面,ABI 是“28”,这将uname -r
显示:
uname -r
2.6.24-28-generic
然后你就可以看到你已经安装的内容了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
在上述情况下,如果安装的下一个内核包的版本为 2.6.24-二十八.81,只有“微版本”发生了变化。由于模块编译与 ABI 相关联,因此无需重新编译,但您仍需要重新启动才能获得内核修复。如果安装的下一个内核版本为 2.6.24-二十九.81,那么 ABI 将会改变,并且您需要在重新启动后重新编译模块。
有关 ABI 的更多详细信息,请参阅https://wiki.ubuntu.com/KernelTeam/BuildSystem/ABI