---
title: 配置kdump服务内核参数后系统无法启动问题总结-官方技术文章-鲲鹏社区
description: 客户在使用《鲲鹏技术疑难问题分析》配置kdump服务和内核参数后，重启服务器发现无法正常启动。
keywords: 配置,服务内核参数,后系统无法启,动问题总结,官方技术文章,鲲鹏社区,问题背景,二
url: https://www.hikunpeng.com/developer/techArticles/20250911-12?envFlag=1
section: (其他)
---

# 配置kdump服务内核参数后系统无法启动问题总结-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20250911-12?envFlag=1
描述: 客户在使用《鲲鹏技术疑难问题分析》配置kdump服务和内核参数后，重启服务器发现无法正常启动。
关键词: 配置,服务内核参数,后系统无法启,动问题总结,官方技术文章,鲲鹏社区,问题背景,二

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

配置kdump服务内核参数后系统无法启动问题总结

配置kdump服务内核参数后系统无法启动问题总结

操作系统

发表于 2025/09/11

0

作者 |谢忠华

# 一、问题背景

## kdump

kdump是一种内核崩溃转储工具，可以在系统发生内核崩溃时将内存转储到硬盘中以便进行分析。

kdump机制在Linux 2.6.38被ARM平台内核主线接纳，它是通过两个内核实现的，在正常使用的系统内核外，通过启动另一个捕获内核来捕获系统内核信息的方法，进行转储操作。

1、系统内核正常启动，包括硬件自检，bootloader加载等常规过程，并预留内存空间给捕获内核。

2、加载捕获内核到预留内存空间。

3、系统发生崩溃，触发panic，捕获内核启动。捕获内核采用的是kexec机制，可以跳过硬件自检的环境，快速启动内核。

4、捕获内核通过/proc/vmcore内存镜像文件，收集系统内核信息。

5、将系统内核信息经过压缩，生成转储文件，写到磁盘中。

Kdump的配置文件位于：/etc/kdump.conf，可以配置转储文件的存储位置：NFS，SSH或者本地。

## crashkernel

crashkernel是用于保存系统崩溃信息的内存区域，它的大小通常为系统内存的一小部分，一般为auto/512M/1024M（一般设置为auto即可，对于大内存系统，如512G内存，可以手动配置为1024M，防止进入捕获内核时发生OOM）。

在Linux系统中，crashkernel的内存分配是通过在启动时传递内核参数来实现的。具体来说，需要在grub或者其他引导程序中添加crashkernel参数，指定crashkernel的大小，crashkernel=<范围1>:<大小1>[,<范围2>:<大小2>,...][@偏移量]，例如： crashkernel=128M@16M表示将从物理地址16MB处开始分配128MB的内存用于crashkernel。

在分配内存时，需要注意crashkernel的大小不能超过系统实际可用(系统保留的内存)的内存大小，否则会导致系统崩溃或者无法启动。同时，crashkernel的分配也会占用一部分系统内存，可能会影响系统性能。因此，需要根据实际情况合理设置crashkernel的大小。

通过dmesg | grep crashkernel查看crashkernel保存的位置。

客户在使用《鲲鹏技术疑难问题分析》 [了解详情](https://www.hikunpeng.com/document/detail/zh/kunpenggrf/ref/kunpenggrffaq_10_0002.html)配置kdump服务和内核参数后，重启服务器发现无法正常启动。

# 二、问题复现

## 1、复现环境

使用旗舰店裸金属服务器复现，系统配置如下：

| 硬件 | 配置信息 |
| --- | ---|
| 服务器型号 | TaiShan 200K（Model 2280K） |
| CPU型号 | Kunpeng 5231K |
| 内存 | 32G*12 @2933 |
| 网卡 | TM280 4*25GE |
| 硬盘 | 12*1.1T HDD |
| Raid卡 | SAS 3508 |
| GPU卡 | NA |

操作系统如下：

| 操作系统名称 | 版本 |
| --- | ---|
| CentOS | 7.6 |
| openEuler | 22.03 LTS |

## 2、复现步骤

## 启动kdump服务

一般操作系统默认是开启kdump服务的，可以通过systemctl status kdump查看服务的状态，处于“active (exited)”即是已启动。如未启动，则可以通过以下步骤进行启动：（以CentOS 7.6为例）

1、安装kdump工具。

```
yum install crash kexec-tools -y
```

2、配置grub参数并更新。

```
vim /etc/default/grub
```

```
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
```

可以查看/boot/efi/EFI/centos/grub.cfg验证是否修改成功。

3、重启服务器。

```
reboot
```

4、查看kdump服务。

```
systemctl status kdump
```

显示“active”时即为启动成功。

## 配置内核参数

将以下配置写入/etc/sysctl.conf文件：

```
kernel.hung_task_panic=1kernel.hung_task_timeout_secs=60kernel.softlockup_panic=1vm.panic_on_oom=1kernel.panic_on_warn=1
```

## 重启

重启后，旗舰店服务器系统无法正常启动，通过iBMC进入虚拟控制台，发现系统在选择完内核之后卡住在启动界面，如下图：

## 三、问题分析

1、收集系统日志。

登录iBMC后，下载维护诊断系统日志和系统串口日志，查看最近一次的启动日志，发现以下内容：

2、分析日志。

当内核发出WARNING后，由于配置了“kernel.panic_on_warn=1”参数，所以内核立即发生了“Kernel panic”，最终导致了系统无法正常启动。

查阅相关资料，“kernel.panic_on_warn=1”参数的作用是：在内核发生警告时，强制系统崩溃。这样可以确保在发生严重问题时系统能够及时停止运行，避免进一步的损坏或数据丢失。但是，这也会导致系统的可用性降低，因为即使是一些较小的问题也会导致系统崩溃。因此，建议仅在必要时才启用该参数。

查阅相关资料，上面的“WARNING：CPU：12 PID：5022 at drivers/pei/msi.c:1220 pci_irq_vector+0x5c/0xc4”告警通常表示：在drivers/pei/msi.c文件的第1220行中，pci_irq_vector 函数的执行出现了一些问题，具体来说，这个函数可能在尝试获取PCI设备的中断向量时遇到了一些错误或异常情况。可能就是硬件或驱动没有和系统完全适配，导致了内核发出告警。

3、复原系统验证。

复原系统之后，将/etc/sysctl.conf文件中的“kernel.panic_on_warn=1”参数删除，然后重新启动服务器，发现能够正常启动。同样查看系统启动日志：

发现该“WARNING”仍然存在，但是系统能够正常启动。也验证了该“WARNING”不会导致系统启动失败，但是如果添加“kernel.panic_on_warn=1”参数则会导致内核发生panic，从而无法正常启动。

4、在openEuler上分析。

在同一个环境上安装有openEuler 22.03 LTS系统，启动后，查看相应的启动日志，发现没有产生WARNING告警。在/etc/sysctl.conf文件中添加“kernel.panic_on_warn=1”参数后，重启服务器也能正常启动，并无异常。

# 四、问题总结

## 修改内核参数

将/etc/sysctl.conf文件中的“kernel.panic_on_warn=1”参数删除。

由于原来系统启动时本身就有WARNING告警，且没有影响正常启动，所以可以不配置上述参数，另外根据经验，上述配置在内核出现问题时，能够帮助定位的信息不多，所以可以不配置上述参数。

## 保证软硬件的兼容性

如3-问题分析中所述，同一个环境，在openEuler 22.03 LTS上没有发生问题，而在CentOS 7.6的启动日志中有WARNING告警信息。

可能是因为CentOS 7.6很久之前就停止更新了，对一些新的硬件或驱动适配性没有那么好，而openEuler 22.03 LTS有更新的内核，在鲲鹏服务器上有更好的兼容性，所以没有告警信息，在配置了“kernel.panic_on_warn=1”参数后也能正常启动。

本页内容
