Linux kernel 笔记 (46)——配置crashkernel参数

crashkernel用来配置Kexec启动的第二个kernelcrash kernel),即用来捕获第一个kernel crash dumpkernel的大小和位置。 配置crashkernel参数有四种形式:

(1)

crashkernel=size[@offset]  

保留[offset,offset + size]这段内存,如果@offset省略,则会自动选择一个合适的offset
(2)

crashkernel=range1:size1[,range2:size2,...][@offset]
range=start-[end](包含`start`,但不包含`end`)

举例来看:

crashkernel=512M-2G:64M,2G-:128M

含义如下:
a)如果内存小于512M,则不保留内存;
b)内存介于512M2G之间,保留64M内存;
c)内存2G以上,保留128M内存。

(3)

crashkernel=size,high

只用于X86_64平台。当内存大于4G时,允许kerneltop,也就是高于4G的内存地址开始分配。如果内存小于4G,则自然从低于4G的地址空间分配。如果指定crashkernel=size,则这个选项会被忽略。

(4)

crashkernel=size,low

只用于X86_64平台。当指定crashkernel=size,high时,也需要在low,也就是低于4G的内存地址分配一段内存。默认情况下,系统会尝试自动分配至少256M内存。

参考资料:
Kernel Parameters

 

Linux kernel 笔记 (24)——Kdump是如何工作的

先介绍两个术语:
a)Standard(production)kernel:正常使用的kernel
b)Crash(capture)kernel:用来收集crash dumpkernel

Kdump有两个重要的组件:KdumpKexec
a)Kexec
是一种fastboot mechanismKexec允许不通过BIOS,而是从运行的kernel中启动另一个kernel,这样做速度很快,可以节省大量时间。
b)Kdump
是一种新的,可靠的crash dumping mechanismCrash dump是从新启动的kernel中去捕获,而不是从已经crashed kernel中。当系统crash后,Kdump使用Kexec启动第二个kernelCrash kernel),而第一个kernelStandard kernel)会保留一部分内存供第二个kernel使用。由于Kexec没有通过BIOS启动第二个kernel,因此第一个kernel的内存得到保护,也就是最终的kernel crash dump

参考资料:
Linux Kernel Crash Book