CentOS/RHEL 7:如何配置 kdump

kdump 是一种高级崩溃转储机制。
启用后,系统将从另一个内核的上下文中引导。
第二个内核保留少量内存,其唯一目的是在系统崩溃时捕获核心转储镜像。
由于能够分析核心转储非常有助于确定系统故障的确切原因,因此强烈建议启用此功能。

  1. 如果尚未安装 kexec-tools 包,则先安装
    要使用 kdump 服务,我们必须安装 kexec-tools 包。
    如果尚未安装,请安装 kexec-tools 。
# yum install kexec-tools
  1. 在 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
  1. 配置转储位置
    要配置 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
  1. 配置核心收集器
    为了减小 vmcore 转储文件的大小,kdump 允许我们指定一个外部应用程序来压缩数据,并可选择忽略所有不相关的信息。
    目前,唯一完全受支持的核心收集器是 makedumpfile。

要启用核心收集器,请修改配置文件/etc/kdump.conf,去掉#core_collector makedumpfile -c -message-level 1 -d 31 行开头的井号(“#”),然后编辑命令行选项如下所述。

例如:

core_collector makedumpfile -c
  1. 更改默认操作
    我们还可以指定当核心转储无法在所需位置生成时要执行的默认操作。
    如果未指定默认操作,则假定默认为“reboot”。

例如:

default halt
  1. 启动 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
  1. 测试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