kdump 是一种高级崩溃转储机制。
启用后,系统将从另一个内核的上下文中引导。
第二个内核保留少量内存,其唯一目的是在系统崩溃时捕获核心转储镜像。
由于能够分析核心转储非常有助于确定系统故障的确切原因,因此强烈建议启用此功能。
- 如果尚未安装 kexec-tools 包,则先安装
要使用 kdump 服务,我们必须安装 kexec-tools 包。
如果尚未安装,请安装 kexec-tools 。
# yum install kexec-tools
- 在 GRUB2 中配置内存使用
要配置为 kdump 内核保留的内存量,请修改 /etc/default/grub 并修改 GRUB_CMDLINE_LINUX ,将 crashkernel=[size] 参数设置为内核选项列表。
GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=128M vconsole.keymap=us rhgb quiet" GRUB_DISABLE_RECOVERY="true"
运行以下命令以重新生成 grub 配置:
# grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统使内核参数生效。
# shutdown -r now
- 配置转储位置
要配置 kdump,我们需要编辑配置文件 /etc/kdump.conf 。
默认选项是将 vmcore 文件存储在本地文件系统的 /var/crash/ 目录中。
更改要保存核心转储的本地目录,并将值替换为所需的目录路径。
例如:
path /usr/local/cores
或者,我们还可以将核心转储直接保存到原始分区。
例如:
raw /dev/sdb4
要使用 NFS 协议将转储存储到远程计算机,请删除 #nfs my.server.com:/export/tmp 行开头的哈希符号(“#”),并将该值替换为有效的主机名和目录路径。
例如:
nfs my.server.com:/export/tmp
- 配置核心收集器
为了减小 vmcore 转储文件的大小,kdump 允许我们指定一个外部应用程序来压缩数据,并可选择忽略所有不相关的信息。
目前,唯一完全受支持的核心收集器是 makedumpfile。
要启用核心收集器,请修改配置文件/etc/kdump.conf,去掉#core_collector makedumpfile -c -message-level 1 -d 31 行开头的井号(“#”),然后编辑命令行选项如下所述。
例如:
core_collector makedumpfile -c
- 更改默认操作
我们还可以指定当核心转储无法在所需位置生成时要执行的默认操作。
如果未指定默认操作,则假定默认为“reboot”。
例如:
default halt
- 启动 kdump 守护进程
检查并确保内核命令行包含 kdump 配置,并且为崩溃内核保留了内存:
# cat /proc/cmdline BOOT_IMAGE=/vmlinuz-3.8.13-98.2.1.el7uek.x86_64 root=/dev/mapper/rhel-root ro rd.lvm.lv=rhel/root crashkernel=128M rd.lvm.lv=rhel/swap vconsole.font=latarcyrheb-sun16 vconsole.keymap=us rhgb quiet nomodeset
设置 kdump 服务可以在系统重新启动时启动。
# systemctl enable kdump.service
要在当前会话中启动服务,请使用以下命令:
# systemctl start kdump.service
- 测试kdump(手动触发kdump)
为了测试配置,我们可以在启用 kdump 的情况下重新启动系统,并确保服务正在运行。
例如:
# systemctl is-active kdump active
# service kdump status Redirecting to /bin/systemctl status kdump.service kdump.service - Crash recovery kernel arming Loaded: loaded (/usr/lib/systemd/system/kdump.service; enabled) Active: active (exited) since 一 2015-08-31 05:12:57 GMT; 1min 6s ago Process: 19104 ExecStop=/usr/bin/kdumpctl stop (code=exited, status=0/SUCCESS) Process: 19116 ExecStart=/usr/bin/kdumpctl start (code=exited, status=0/SUCCESS) Main PID: 19116 (code=exited, status=0/SUCCESS) Aug 31 05:12:57 ol7 kdumpctl[19116]: kexec: loaded kdump kernel Aug 31 05:12:57 ol7 kdumpctl[19116]: Starting kdump: [OK] Aug 31 05:12:57 ol7 systemd[1]: Started Crash recovery kernel arming.
然后在 shell 提示符下键入以下命令:
# echo 1 > /proc/sys/kernel/sysrq # echo c > /proc/sysrq-trigger
这会强制Linux内核崩溃,地址-YYYY-MM-DD-HH:MM:SS/vmcore 文件会被复制到你在配置中选择的位置(也就是/var/crash/)默认)
日期:2020-09-17 00:12:01 来源:oir作者:oir