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

这是一个加载的问题,因为我已经意识到了,并且对ksplice非常感兴趣。 问题在于,由于他们被Oracle收购,他们被迫从产品中提取大量服务器发行版。 答案并不像以前那么简单。

我在Unix.SE上注意到一个问题 :

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

大! 但是怎么样?!

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

此外,如果重新启动升级所需的所有机器都位于内核(和ksplice软件包)中,那么为什么我们默认不利用它呢?


最近kGraft宣布了 。 这似乎是大致相同的结果,所以如果你有一个涉及它的答案,我会对此感到高兴。 现在距离发布还有几个月了。


注1:我很高兴在ksplice旁边提供解决方案,但它必须提供相同的function:滚动内核更新,无需重新启动服务器即可应用。

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

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

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

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

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

您可以查看有关它的IBM开发人员工作文章,以确定它是否适合您的需求。

ksplice将允许内核交换而无需重启。 Uptrack在ksplice中工作,并在/etc/uptrack/uptrack.conf中有一个可编辑的配置文件

Ksplice有一些完全开源的替代品,它们都已提交包含在主线Linux内核中。 现在判断哪些内容会在内核中结束还为时过早,但如果你足够勇敢,你仍然可以尝试一下:

  • kGraft ,你已经提到了。 Ubuntu的一位内核工程师有一篇博客文章,在那里他尝试了: 使用kgraft和ubuntu
  • kpatch ,目前由Red Hat开发。 它的github网站有一些在Ubuntu上试用它的说明: https : //github.com/dynup/kpatch#ubuntu-1404

你可以在这里阅读更多关于它们的信息: SUSEpostkGraft,Red Hat发布Kpatch补丁

Arch Linux wiki有说明: https : //wiki.archlinux.org/index.php/ksplice

似乎是特定于发行版的唯一部分是如何安装ksplice本身。 既然你已经认识到这一点,我认为这应该让你顺利。

自2015年7月16日起,“Oracle Ksplice在Fedora和Ubuntu Desktop Editions上免费提供。”,正式发布。

只需安装下载的.deb文件即可到达此处 。

如果您尝试使用sudo dpkg -i ksplice-uptrack.deb ,则可能必须使用sudo apt-get install -f修复依赖项。

Interesting Posts