微知SOP-定位Linux crash问题的几个常用方面和常用命令?

1 背景

x86或者arm上存在crash,如何快速定位?隔一段时间老是忘记。本文主要记录从头到尾在一台新服务器出现异常如何快速定位的记录。如果没有文档容易少收集信息。本文详细记录需要收集的一些关键信息,虽然不全,但是基本能定位出个大概。尤其其中的结合SP堆栈指针SP + rd + struct能够看到表面现象背后很多隐藏的数据,打开了一闪通往真相的大门,灵活运用并结合反汇编和操作系统函数调用应该算一个高阶功法了。参悟可以打出“立棍式”。`

2 问题描述和SOP

本文是一次服务器上crash的日志,进行的一些分析。

2.1 进入目录

进入/var/crash中最新的crash目录:
快速进入最近一次crash的快捷命令:

# 快速进入最近一次crash的目录
cd /var/crash/`ls /var/crash -t | head -n 1` && pwd && ls

在这里插入图片描述

2.2 安装crasn和vmlinux

# 安装vmlinux
yum install -y crash
yum install -y kernel-debuginfo*
yum install -y kernel-debuginfo-common*
# 确定安装vmlinux成功
ls /usr/lib/debug/lib/modules/`uname -r`/vmlinux -l

如果没有在对应的rpm包网站下载
实操效果:
在这里插入图片描述

2.3 使用crash命令进入debug目录

crash /usr/lib/debug/lib/modules/`uname -r`/vmlinux ./vmcore

实操效果:
在这里插入图片描述

2.4 收集主要信息

主要通过2个收集,一个是进入时候显示的信息,另一个是vmcore-message.log文件

进入后读取关键信息,包括:
panic主要信息:比如图中是访问了一个空指针:BUG: unable to handle kernel NULL pointer dereference at 0000000000000030
PID信息,比如图中2948098
PID的名字,比如图中poweroff

另外vmcore-message文件获取堆栈数据,可以通过目录下的文件显示,也可以直接在crash中显示,使用log命令,快速获取最后crash点可以:

# 显示crash关键信息
log -T | tail -n 
### 修改通过 `kubectl` 获取的 BackupPack 资源的 YAML 文件 当用户执行 `kubectl get BackupPack sop.default.backup -n sop -o yaml` 时,会输出当前集群中该资源的完整 YAML 配置内容。此内容可以直接保存到本地文件中进行修改,然后再重新应用回集群。 #### 1. 获取并保存 YAML 文件 将资源导出为 YAML 文件,可以使用以下命令: ```bash kubectl get BackupPack sop.default.backup -n sop -o yaml > backuppack.yaml ``` 此命令将资源的 YAML 内容写入本地文件 `backuppack.yaml` 中,以便后续编辑。 #### 2. 编辑 YAML 文件 使用任意文本编辑器(如 `vim`、`nano` 或 VS Code)打开 `backuppack.yaml` 文件。例如: ```bash vim backuppack.yaml ``` 在文件中,可以修改任意字段,例如: - `metadata.labels`:添加或修改标签 - `spec.template`:调整备份策略或存储路径 - `spec.schedule`:更改定时任务的调度时间 确保修改后的内容符合 API 的格式要求,避免因格式错误导致资源无法更新。 #### 3. 应用修改后的 YAML 文件 修改完成后,使用 `kubectl apply` 命令将更新后的配置重新应用到集群中: ```bash kubectl apply -f backuppack.yaml ``` 此命令会触发 Kubernetes 控制器对资源进行更新。如果资源不存在,`apply` 命令会尝试创建它;如果资源已存在,则会根据 YAML 文件内容进行更新。 #### 4. 验证更新 更新完成后,可以通过以下命令验证资源是否已正确更新: ```bash kubectl get BackupPack sop.default.backup -n sop -o yaml ``` 此命令将输出更新后的资源定义,确认修改已生效。 #### 5. 注意事项 - 在修改 YAML 文件时,确保不删除 `metadata.resourceVersion` 或 `uid` 等字段,这些字段用于资源版本控制唯一标识。 - 如果资源类型 `BackupPack` 是由 Operator 管理的 CRD(自定义资源定义),则需确保修改内容符合 Operator 的期望状态,否则可能会被控制器覆盖[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值