内核 4.0 如何修补系统而无需重新启动?

内核 4.0 如何修补系统而无需重新启动?

我发现 Linux 内核 4.0 中提到的新功能是无需重新启动即可更新的能力。

  • 这是否意味着我可以在应用程序运行的情况下使用我的系统,并且更新不会对当前进程的执行产生任何影响?
  • 这是如何实现的?是否是当前内核的逐个文件复制,同时将旧文件保存在临时内存中?

是不是像 ksplice(内核交换)一样?或者 kGraft/kPatch?

答案1

它不会是 Ksplice,因为它不是开源的。 Oracle 仅通过自己的发行版进行分发。

根据维基百科对于 kpatch:

自 2015 年 4 月以来,将 kpatch 移植到 Linux 内核主线提供的通用实时修补核心的工作正在进行中。然而,所需的函数级一致性机制的实现已被推迟,因为在涉及没有适当堆栈帧的汇编代码的情况下,Linux 内核提供的调用堆栈可能不可靠;因此,截至 2015 年 9 月,移植工作仍在进行中。为了提高内核调用堆栈的可靠性,还开发了专门的健全性检查 stacktool 用户空间实用程序。

据我所知,kpatch/kgraft 不会用于更新内核本身,而是使用“向后移植”补丁对其进行修补。这意味着,如果您运行仅包含安全更新的发行版,或者如果您想要手动更新内核,则可以借助该工具来完成此操作,而无需重新启动。看看在红帽企业 Linux 7 中使用 kpatch视频

回答您的问题:

  • 是的!
  • 类似的东西,但是是在内核函数的层面上。查看上面的视频了解更多详情。

相关内容