kernel panic如何分析?(包含grub)
生产内核&捕获内核
kernel panic如何分析?
Kdump文档:https://www.kernel.org/doc/Documentation/kdump/kdump.txt
kdump是一种在系统崩溃(crash)或系统卡住(hang)时的通过转储系统内存的服务,是通过开启第二个内核(捕获内核)
kdump是一种基于kexec的内核崩溃转储技术。kdump需要两个内核,分别是生产内核和捕获内核,生产内核是捕获内核要服务的对象,
且保留了内存的一部分给捕获内核启动使用。当系统崩溃时,kdump使用kexec启动捕获内核,以相应的ramdisk一起组建一个微环境,用以对生产内核下的内存进行收集和转存
系统内核的内存映像保存在重新启动并且可以被转储捕获内核访问
/etc/kdump.conf #KDUMP服务配置文件
/proc/vmcore 这会将转储导出为 ELF 格式的文件,您可以
使用 cp 或 scp 等文件复制命令导出。此外,您可以
使用 GNU 调试器 (GDB) 和崩溃工具(crash)等分析工具来调试转储文件
kexec -p #交互式加载捕获内核
sysctl在系统运行时配置系统内核参数
内核参数kernel.sysrq=1(配置手动触发)
grub引导参数:crashkernel=auto (centos7在系统内存小于8G时自动禁用kdump):启用kdump功能并且设置crashkernel捕获内核内存的大小
NMI Watchdog(另一种触发panic方式)
当centos7在系统内存小于8G时自动禁用kdump,要手动启动kudmp前配置crashkernel内存步骤:
1.更改GRUB,到/etc/default/grub更改crashkernel为128M或更大内存;
2.重新生成grub配置:grub2-mkconfig -o /boot/grub2/grub.cfg
3.reboot
参考:https://www.jianshu.com/p/8e031b28d98b
centos7.8系统的GRUB情况
官网:https://www.gnu.org/software/grub/index.html
GRUB引导加载程序是计算机启动时运行的第一个软件程序。
它负责加载和将控制权转移到操作系统内核软件(如Hurd或 Linux)。内核反过来初始化操作系统的其余部分(例如 GNU)。
GRUB 是引导装入器 – 它负责装入内核并引导 Linux 系统
grub2-mkconfig工具
/etc/default/grub #grub的宏文件
grub2的默认配置文件为/boot/grub2/grub.cfg
grub2-mkconfig是根据/etc/default/grub文件来创建配置文件/boot/grub2/grub.cfg的
引导分为2个阶段(stage)
/boot/grub2/grub.cfg 系统引导读取的文件
lrwxrwxrwx. 1 root root 22 5月 24 02:08 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
MBR(主引导记录)包含三部分:引导程序、磁盘分区表、结束标志
MBR是磁盘的第一扇区,一扇区512字节,包含从0开始的446字节的引导程序、64字节的分区表、2字节结束标志
主引导记录是非常重要的一个扇区,其中引导代码用来告诉计算机如何处理分区表,
如何定位操作系统等;分区表用来管理硬盘的分区情况;标志表明该扇区是一个有效的引导记录扇区
dd命令备份主引导扇区(前512字节)
磁盘分区程序:fdisk、parted
计算机启动过程像是一个接力赛,把不同阶段的控制权交给下一个程序:
通电----BIOS自检(加电开机检测硬件)--(MBR)引导系统(在MBR中读取grub引导程序)--启动内核--初始化系统
大概流程:硬件检测阶段----引导程序阶段-----内核阶段-----操作系统阶段
首先读取/boot (这里有内核),然后到init程序(去设置开机自启的进程)--初始化系统
grub2引导程序推荐:https://www.cnblogs.com/f-ck-need-u/p/7094693.html
grub可设置启动内核参数
IPMI带外口(ipmitool工具)
【Alt + SysRq(PrtScr) + C】手动触发机器重启,促使捕获内核生成coredump类型的vmcore文件(前提已配置kdump服务)