CARASH工具使用
linux crash
CARASH工具使用
安装
apt install linux-crashdump
vim /etc/default/grub.d/kexec-tools.config
# change reserved memory from 128M to 256M
# 测试起来只有512能work, 多了少了都是奇怪的报错。本质上应该没有什么意义
#重新编译内核,主要是减小内核和驱动部分的大小
make -j10
objcopy --strip-debug ./vmlinux.o
make INSTALL_MOD_STRIP=1 modules_install
make install
# in one
make -j10 && objcopy --strip-debug ./vmlinux.o && make INSTALL_MOD_STRIP=1 modules_install && make install
#查看状态
kdump-config show
# 重启后进行功能测试
# 手动触发内核崩溃
echo c > /proc/sysrq-trigger
# 设置死锁自动panic以便搜集信息,实际上是最后一个,其他事开启检测,一般都是自动开的
echo 1 > /proc/sys/kernel/watchdog
echo 1 > /proc/sys/kernel/soft_watchdog
echo 1 > /proc/sys/kernel/softlockup_panic
# 然而实际上有时候会一直卡在重启界面,没有提示,不过实际上能够备份。只是看机器要等一段时间。。。我一般是为了确保能work,等10分钟。
仍然有bug
看起来是crash后msr寄存器状态错误。 corrupted hw-pmu resource msr 38d is b0
极度迷惑性的信息。实际上毫不相干,维护内核那帮人都直呼懒得管。
不管,再加上取消debug信息
# make -j10
objcopy --strip-debug ./vmlinux.o
看起来就能work了,但是有因为我们是在linux内核上,使用fastswap的内核原本必须要装载那个内核模块才能用swap。
但是这里crash过程中也要用,直接爆炸。
把同步接口去掉即可。
| 内存容量 | 预留内存容量 |
|---|---|
| 0GB~12GB | 64MB |
| 12GB~48GB | 128MB |
| 48GB~128GB | 512MB |
| 128GB~256GB | 512MB/768MB/896MB |
看见保存好在reboot了可以直接硬重启,因为我这里等了一个小时都没重启起来,直接冲了是可以的
复活后
# 第一个参数为内核符号。可以在编译内核的地方找到,我这里就是用的这个。
crash /home/lt/lightswap/linux-4.11-hmtt/vmlinux /var/crash/202201121743/dump.202201121743
可以进入crash控制台
WARNING: kernel relocated [418MB]: patching 92251 gdb minimal_symbol values
KERNEL: /home/lt/lightswap/linux-4.11-hmtt/vmlinux
DUMPFILE: /var/crash/202201121743/dump.202201121743 [PARTIAL DUMP]
CPUS: 40
DATE: Wed Jan 12 17:37:13 2022
UPTIME: 00:03:57
LOAD AVERAGE: 9.47, 2.81, 0.97
TASKS: 848
NODENAME: 54
RELEASE: 4.11.0-hmttv1+
VERSION: #196 SMP Wed Jan 12 16:42:02 CST 2022
MACHINE: x86_64 (2200 Mhz)
MEMORY: 127.7 GB
PANIC: "sysrq: SysRq : Trigger a crash"
PID: 4965
COMMAND: "bash"
TASK: ffff98c68603bb00 [THREAD_INFO: ffff98c68603bb00]
CPU: 1
STATE: TASK_RUNNING (SYSRQ)
crash> bt
PID: 4965 TASK: ffff98c68603bb00 CPU: 1 COMMAND: "bash"
#0 [ffffb0778d947a60] machine_kexec at ffffffff9b25deda
#1 [ffffb0778d947ac0] __crash_kexec at ffffffff9b31d71d
#2 [ffffb0778d947b88] __crash_kexec at ffffffff9b31d7f5
#3 [ffffb0778d947ba0] crash_kexec at ffffffff9b31d83b
#4 [ffffb0778d947bc0] oops_end at ffffffff9b23089b
#5 [ffffb0778d947be8] no_context at ffffffff9b26d5ee
#6 [ffffb0778d947c48] __bad_area_nosemaphore at ffffffff9b26d8b1
#7 [ffffb0778d947c88] bad_area_nosemaphore at ffffffff9b26d9f4
#8 [ffffb0778d947c98] __do_page_fault at ffffffff9b26dd9e
#9 [ffffb0778d947d00] do_page_fault at ffffffff9b26e1d2
#10 [ffffb0778d947d20] page_fault at ffffffff9baea268
[exception RIP: sysrq_handle_crash+22]
RIP: ffffffff9b77c626 RSP: ffffb0778d947dd0 RFLAGS: 00010282
RAX: 000000000000000f RBX: 0000000000000063 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffff98c73ea4dc28 RDI: 0000000000000063
RBP: ffffb0778d947dd0 R8: 00000000000832b8 R9: 000000000000060c
R10: 0000000000000001 R11: ffffffff9c46276d R12: 0000000000000004
R13: 0000000000000000 R14: ffffffff9c116040 R15: 0000000000000000
ORIG_RAX: ffffffffffffffff CS: 0010 SS: 0018
#11 [ffffb0778d947dd8] __handle_sysrq at ffffffff9b77ce0a
#12 [ffffb0778d947e08] write_sysrq_trigger at ffffffff9b77d28f
#13 [ffffb0778d947e20] proc_reg_write at ffffffff9b4d3962
#14 [ffffb0778d947e40] __vfs_write at ffffffff9b459297
#15 [ffffb0778d947ec8] vfs_write at ffffffff9b459bd8
#16 [ffffb0778d947f08] sys_write at ffffffff9b45b1e5
#17 [ffffb0778d947f50] entry_SYSCALL_64_fastpath at ffffffff9bae8e3b
RIP: 00007fed5a6013c0 RSP: 00007ffc9db851b8 RFLAGS: 00000246
RAX: ffffffffffffffda RBX: 00007fed5a8cf620 RCX: 00007fed5a6013c0
RDX: 0000000000000002 RSI: 00000000020f5008 RDI: 0000000000000001
RBP: 0000000000000001 R8: 00007fed5a8d0780 R9: 00007fed5af08700
R10: 0000000000000001 R11: 0000000000000246 R12: 0000000000000001
R13: 000000000226ef38 R14: 0000000000000000 R15: 00000000004d0af9
ORIG_RAX: 0000000000000001 CS: 0033 SS: 002b
crash>
关闭
修改: /etc/default/kdump-tools
查看状态
kdump-config show
参考资料
https://zhuanlan.zhihu.com/p/104292358
https://www.cnblogs.com/lshs/p/6038935.html
https://askubuntu.com/questions/805617/kdump-config-show-gives-not-ready-to-kdump-but-memory-was-reserved
pavilion's blog