kexec 之后捕获内核可以用作普通内核吗?

kexec 之后捕获内核可以用作普通内核吗?

我读过有关 kexec/kdump 设施的内容,我们知道崩溃/恐慌的内核是通过 /proc/vmcore 提供的。

我听说人们使用基于 kexec 的启动来绕过 EFI/BIOS/FW 初始化阶段,以加速生产计算机上的操作系统修补活动。这意味着这些机器在剩余的处理/正常运行时间内继续使用捕获内核。

我找不到关于捕获内核回收为获取 kdump 而保留的旧内存区域的能力的明确提及。保存转储后,捕获内核是否可以丢弃那些保留的内存内容?

确实,捕获内核会从“非标准”内存位置运行,因为它是“可重定位”内核,但它可以利用/释放所有其他内存并继续用作生产用途的主内核吗?

答案1

标准 kexec 内核和紧急内核之间存在很大差异。

“普通”kexec 内核将从旧内核接收完整的物理内存映射(例如 x86 机器上的 E820 映射,或 IBM POWER 上的设备树),因此它会初始化整个 RAM 的所有内存管理结构。

另一方面,恐慌内核将得到一个修改后的映射,其中仅包括crashkernel=第一个内核中用参数保留的区域。原始内核的 RAM 映射在 ELF 核心头中单独传递(参见elfcorehdr=内核参数),并且恐慌内核只能通过 /proc/vmcore 特殊文件访问它。

理论上,剩余的 RAM 可以在某个时候热插拔,但这并没有实现,据我所知,甚至没有人致力于实现这一点。

相关内容