kexec(kernel execution,类似于Unix或Linux的系统调用)是Linux内核的一种机制,它允许从当前运行的内核启动新内核。kexec会跳过由系统固件(BIOS或UEFI)执行的引导加载程序阶段和硬件初始化阶段,直接将新内核加载到主内存并立即开始执行。这避免了与完全重新启动相关的漫长时间,并且可以通过最小化停机时间来帮助系统满足高可用性要求。
虽然可行,但使用kexec等机制会带来两大挑战:
- 旧内核的内存被新内核覆盖,而旧内核仍在执行。
- 新的内核通常希望所有的硬件设备处于一个定义良好的状态,在这种状态下,系统重启后系统固件会将其重置为“正常”状态。绕过真正的重新启动可能会使设备处于未知状态,新内核将不得不从中恢复。
支持仅通过kexec引导已签名的内核已合并到2014年10月5日发布的Linux内核主线的3.17版中。 这不允许Root用户通过kexec加载并执行任意代码,补充了UEFI安全启动和内核安全机制,以确保只有经过签名的Linux内核模块才能被插入正在运行的内核中。
参见
- kdump Linux内核的崩溃转储机制,它在内部使用kexec
- SUSE开发的Linux内核实时修补技术
- 由红帽开发的Linux内核实时修补技术
- Ksplice Ksplice公司开发的Linux内核实时修补技术,后来被Oracle收购
参考文献
外部链接
- [http://prefetch.net/blog/index.php/2009/07/06/using-kdump-to-get-core-files-on-fedora-and-centos-hosts/ Using kexec and kdump to get core files on Fedora and CentOS hosts]
评论 (0)