自编译内核5.0.5的crash与kdump安装
1 环境
- 操作系统版本:centos 7.3.1164 自带linux-3.10.0-514.el7.x86_64的内核。
- 硬盘:1T以上 内存:16G cpu: intel-xxx。
2 步骤
- 升级前:
- 安装必要的软件
yum install -y ncurses-devel elfutils-libelf-devel openssl-devel bc
yum install gcc rpm-build rpm-devel rpmlint make python bash coreutils diffutils patch rpmdevtools
2. 升级内核步骤
(1)获得linux-5.0.5.tar.xz的内核源码
地址:kernel.org或者github中Linux项目获取
(2)解压缩源码,并进入解压缩后的目录。
(3)根据下面链接中所需要修改的config配置,按照说明配置即可。
https://www.ibm.com/developerworks/cn/linux/l-cn-dumpanalyse/index.html
并修改源码目录下scripts/package/mkspec文件,去掉%define debug_package %{nil},并在%install 后面加/usr/lib/rpm/find-debuginfo.sh %{_builddir}/%{?buildsubdir}
- 随后在源码目录下make rpm-pkg来编译rpm包。make -j可以提高速度,j后面写你的cpu核心数,不超过即可。
- 编译完成后进入用户目录,在rpmbuild/RPMS/下可以找到编译好的rpm包。原则上rpm -ivh kernel-xxx.rpm, kernel-devel-xxx.rpm即可。
- grub2-mkconfig -o /boot/grub2/grub.cfg来生成新的grub.cfg
- grub2-set-default来改变默认启动内核
- grub2-editenv list 来查看当前默认启动内核版本。
- grubby --update-kernel=DEFAULT --args=crashkernel=128M来为crashkernel分配空间。内存大的可以分配更多空间。
- reboot即可。
3.启动kdump
centos 7默认是带有kdump.service服务的。但对于新内核有点老了。
- 更新或安装kexec-tools,yum install kexec-tools / yum update kexec-tools
- 安装最新的crash(最重要,因为老crash对于pageoffset的处理不对。)
地址:https://github.com/crash-utility/crash
解压后,进入目录make & make lzo. 如果lzo报错,则yum install lzo-devel安装lzo.在重新make lzo。最后再make 一遍,make install成功即可。crash -v查看是否到了对应的版本。
- 重启。
- 重启后检查kdump是否正常开启。systemctl status kdump.service.
注意事项:
- kdump不能启动,可能是no memory allocated ,即没有分配对应的crashkernel。
原则上,centos 7可以grubby --update-kernel...解决,上面已经写了。
- kdump不能启动,可能是selinux没关,不要问为什么,关了就行了,可以通过vim /etc/selinux/config 将enforcing 改为disabled就行了。setenforce 0可以临时关闭。最后再重启一遍。
- kdump不能启动,可能是/boot/vmlinuz-xxx没有执行权限。
- kdump不能启动,可能是kexec-tools版本太低,自己解决。
4.crash分析
(1)上述步骤都正常了后,可以测试crash了
(2)echo c > /proc/sysrq-trigger 来启动panic,使得kdump工作。
(3)等机器重启后,进入/var/crash查看生成文件。
(4)crash 用户/rpmbuild/BUILD/kernel-xxx/vmlinux vmcore来分析。正常进去了,就成功了。