如何在不重新启动的情况下升级服务器的内核?

Oli*_*Oli 29 updates kernel canonical-livepatch

这是一个很重要的问题,因为我已经知道并且对ksplice非常感兴趣。问题是,自从它们被 Oracle 收购后,他们被迫从产品中提取大量服务器发行版。答案并不像以前那么简单。

我注意到Unix.SE上的一个问题指出:

您可以构建自己的 ksplice 补丁以动态加载到您自己的内核中

伟大的!但是怎么样?!

我已经ksplice在桌面上的 repo 中安装了免费包(不是ksplice-uptrack非免费的),现在想要生成和应用更新。过程是怎样的?是否有任何脚本可以自动化该过程?

此外,如果无需重启升级所需的所有机制都位于内核(和ksplice包)中,那么我们究竟为什么不在默认情况下利用它呢?


最近kGraft 被宣布。这似乎是大致相同的结果,所以如果你有一个涉及它的答案,我会很高兴。不过现在距离发布还有几个月的时间。


注 1:我对 ksplice 之外的解决方案感到高兴,但它必须提供相同的东西:滚动更新内核,无需重新启动服务器即可应用。

注2:我再说一遍;主要的 ksplice “服务”不支持 Ubuntu Server。以前有,但现在没有了。当我说要使用ksplice时,我说的是ksplice包中的开源工具。任何谈论的答案ksplice-uptrack可能都不是我所追求的,因为这是与上述“服务”直接集成的部分。

Mar*_*ski 6

我对 ksplice 不太了解,但我想我会提到它 - 你听说过kexec吗?这可能是您所需要的。

关于为什么我们没有采用它作为默认机制的问题?好吧,在当前内核仍在运行时覆盖它的内存可能会导致潜在的问题。它还期望硬件设备处于明确定义的状态,这并不总是可能的。

您可以查看有关它的 IBM developerworks文章,以确定它是否适合您的需求。

  • +1 为`kexec`,但本质上它是热重启 - IE 内核从头开始重新加载,因此仍然调用 init 脚本等。这不是*技术上* 重新启动,但正在运行的服务将停止。 (5认同)
  • 我需要多读一点关于这个,因为它很有趣。那么您试图从重置中节省多少正常运行时间?:D (2认同)

dpb*_*dpb 6

这里的所有其他答案都很棒,但特别是对于 Ubuntu,Canonical 现在在 16.04 上提供此服务。

这使用了自 4.0 发布以来上游 Linux 内核中的实时修补技术。